""" Voice-editing demo using Tencent's AuK (https://github.com/Tencent-Hunyuan/AuK). Unlike MOSS-TTS's `instruction` field (steers style at generation time), AuK edits emotion on an *existing* recording directly - same speaker, same words, same duration, different delivery. Demonstrates on the public-domain narrator clip already used by the whisperx/tts demos. Run from the auk/ directory with its .venv activated. """ from pathlib import Path from auk.infer.infer_auk import AukInfer, save_audio HERE = Path(__file__).parent CONFIG = HERE / "ckpts" / "AuK" / "config.yaml" CKPT = HERE / "ckpts" / "AuK" / "auk_base.safetensors" QWEN_PATH = HERE / "ckpts" / "Qwen2.5-Omni-3B" INPUT_AUDIO = HERE.parent / "tts" / "reference" / "narrator_ref_en.wav" OUTPUT_PATH = HERE / "narrator_excited.wav" INSTRUCTION = "Change the emotion to excited." def main() -> None: engine = AukInfer( str(CONFIG), str(CKPT), qwen_path=str(QWEN_PATH), cpu_offload=True ) messages = [ { "role": "user", "content": [ {"type": "text", "text": INSTRUCTION}, {"type": "audio", "audio": str(INPUT_AUDIO)}, ], } ] audio, sr = engine.generate(messages) save_audio(audio, sr, str(OUTPUT_PATH)) print(f"[INFO] Saved {OUTPUT_PATH}") if __name__ == "__main__": main()