Files
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

3.2 KiB
Raw Permalink Blame History

Qwen3-TTS 本地对白生成环境使用说明

环境位置

  • 虚拟环境:/home/ubuntu/SoundGame/.venv-tts(Python 3.12.14,uv 创建)
  • 关键包:torch 2.11.0+cu128、torchaudio 2.11.0+cu128、qwen-tts 0.1.1、soundfile、transformers 4.57.3
  • 模型缓存:/home/ubuntu/SoundGame/models/hf(HF_HOME)
    • Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice(预置音色 + 情感指令,主力)
    • Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign(文字描述造音色)
    • Qwen/Qwen3-TTS-Tokenizer-12Hz(语音编解码器,上面两个模型自带副本,这个是独立的)

启用环境

source /home/ubuntu/SoundGame/env.d/tts.sh   # 设置 HF_HOME / HF_ENDPOINT(hf-mirror 镜像)
source /home/ubuntu/SoundGame/.venv-tts/bin/activate

注意:本机连不通 huggingface.co,必须走 HF_ENDPOINT=https://hf-mirror.com(tts.sh 已设好)。

生成对白(CustomVoice:预置音色 + 情感指令)

import torch, soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
    device_map="cuda:0",
    dtype=torch.bfloat16,
)
wavs, sr = model.generate_custom_voice(
    text="快躲开!它来了!",
    language="Chinese",
    speaker="Vivian",
    instruct="用惊恐、急促的语气大声喊出来",   # 不需要情感控制时省略
)
sf.write("out.wav", wavs[0], sr)   # sr = 24000

支持批量:text/language/speaker/instruct 均可传等长 list。 可透传 HF generate 参数,如 max_new_tokens=2048。

VoiceDesign(文字描述造音色)

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
    device_map="cuda:0", dtype=torch.bfloat16,
)
wavs, sr = model.generate_voice_design(
    text="哥哥,你回来啦!",
    language="Chinese",
    instruct="撒娇稚嫩的萝莉女声,音调偏高且起伏明显",
)

预置音色查询

代码查询:

model.get_supported_speakers()   # ['aiden','dylan','eric','ono_anna','ryan','serena','sohee','uncle_fu','vivian']
model.get_supported_languages()  # auto/chinese/english/french/german/italian/japanese/korean/portuguese/russian/spanish

中文对白推荐音色(母语中文):

speaker 描述
Vivian 明亮略带锋芒的年轻女声
Serena 温暖柔和的年轻女声
Uncle_Fu 低沉醇厚的中年男声
Dylan 北京话年轻男声
Eric 四川话活泼男声,略带沙哑

(其余:Ryan/Aiden 英语男声,Ono_Anna 日语女声,Sohee 韩语女声)

冒烟测试

/home/ubuntu/SoundGame/.venv-tts/bin/python /home/ubuntu/SoundGame/tools/tts_smoke_test.py
# 输出 /home/ubuntu/SoundGame/tools/samples/tts_test.wav(实测 1.92s, 24kHz)

Web UI(可选)

qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000

已知事项

  • 未装 flash-attn(可选加速,编译耗时长;RTX 3090 24GB 不装也完全够用,加载+生成一句仅十几秒)。
  • 系统无 sox 命令行二进制(无 sudo 装不了),qwen-tts 会打印警告但不影响生成;只有用到 sox 音频处理链路时才需要它。
  • 显存占用:1.7B 模型 bf16 推理远低于 24GB,充足。