Files
SoundGame/tools/tts_smoke_test.py
T
SoundGame Dev f0f0a9b50e 初始提交:3 款纯音频游戏 + 共享引擎 + 完整文档与资产管线
- 共享引擎(app/src/main):GestureEngine 6 手势识别、AudioEngine 三层音频
  (ExoPlayer BGM 交叉淡入 / 对白 ducking / SoundPool 低延迟)、Game/GameEngine
  状态机接口、MainActivity 全屏封面 + TalkBack
- 《声命线》storyline:末世互动广播剧,3 幕 8 抉择点 4 结局
- 《声东击西》reflex:听声辨位反应,12 波战斗 + BGM 三档 BPM 变速
- 《暗室》escape:3x3 网格密室逃脱,钥匙→铁柜→保险丝→电箱→大门谜题链
- 文档:setup(从零搭建)/ architecture(架构)/ engine-api(引擎 API)/
  asset-pipeline(资产流水线)/ games/*(三款游戏设计文档)
- 资产管线:Qwen3-TTS 对白 + 程序合成音效/BGM + Mureka BGM 的 gen 脚本与台账,
  全部 ogg 资产入库可复现
- env.d 环境脚本:android/tts 入库;sfx/mureka 含密钥不入库,仅提交 .example.sh 模板
2026-08-29 13:00:34 +08:00

35 lines
1.1 KiB
Python

"""Qwen3-TTS CustomVoice 冒烟测试:预置音色 + 情感指令生成中文对白。"""
import os
import time
os.environ.setdefault("HF_HOME", "/home/ubuntu/SoundGame/models/hf")
os.environ.setdefault("HF_ENDPOINT", "https://hf-mirror.com")
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
t0 = time.time()
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
device_map="cuda:0",
dtype=torch.bfloat16,
# 未安装 flash-attn,使用默认注意力实现
)
print(f"model loaded in {time.time() - t0:.1f}s")
print("speakers:", model.get_supported_speakers())
print("languages:", model.get_supported_languages())
wavs, sr = model.generate_custom_voice(
text="快躲开!它来了!",
language="Chinese",
speaker="Vivian",
instruct="用惊恐、急促的语气大声喊出来",
)
out = "/home/ubuntu/SoundGame/tools/samples/tts_test.wav"
sf.write(out, wavs[0], sr)
dur = len(wavs[0]) / sr
print(f"saved: {out} sr={sr} duration={dur:.2f}s samples={len(wavs[0])}")
assert dur > 0.3, "audio too short, something went wrong"