MasoodishWisdom / scripts /ref_utils.py
0xrushi
Initial commit
06bc80f
raw
history blame contribute delete
1.67 kB
import tomli
import pickle
import os
from importlib.resources import files
from f5_tts.infer.utils_infer import preprocess_ref_audio_text
def load_ref_weights(pkl_path="ref_weights.pkl"):
"""
Load and return a dict of voices -> {"ref_audio", "ref_text"}.
Args:
pkl_path (str): Path to the pickle file.
Returns:
dict: Mapping voice names to preprocessed refs.
"""
if not os.path.isfile(pkl_path):
raise FileNotFoundError(f"Ref weights pickle not found at {pkl_path}. Please run ref_utils.py first.")
with open(pkl_path, "rb") as f:
return pickle.load(f)
def build_ref_weights(config_path="infer/examples/basic/basic.toml", output_pkl="data/ref_weights.pkl"):
with open(config_path, "rb") as f:
config = tomli.load(f)
def fix_path(path):
if "infer/examples/" in path:
return str(files("f5_tts").joinpath(path))
return path
ref_audio = fix_path(config.get("ref_audio", "data/15sec.wav"))
ref_text = config.get("ref_text")
main_voice = {"ref_audio": ref_audio, "ref_text": ref_text}
voices = {"main": main_voice}
if "voices" in config:
for name, v in config["voices"].items():
voices[name] = {
"ref_audio": fix_path(v.get("ref_audio")),
"ref_text": v.get("ref_text"),
}
for v in voices.values():
v["ref_audio"], v["ref_text"] = preprocess_ref_audio_text(
v["ref_audio"], v["ref_text"]
)
with open(output_pkl, "wb") as f:
pickle.dump(voices, f)
print(f"Saved {output_pkl}")
if __name__ == "__main__":
build_ref_weights()