- 共享引擎(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 模板
35 lines
1.1 KiB
Python
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"
|