暮晨集雨

Mu Chen's Online Collection

谓暮晨集雨者,牧宸集语也。一个AI加持的个人博客站。

Fish Audio S2

S2 tags 介绍: Fish Audio S2! Fine-Grained AI Voice Control at the Word Level – Fish Audio Blog

Shell 脚本控制:

# text2semantic/inference.py Options:
  --text TEXT
  --prompt-text TEXT
  --prompt-tokens PATH
  --prompt-audio PATH
  --output PATH
  --num-samples INTEGER
  --max-new-tokens INTEGER
  --top-p FLOAT
  --top-k INTEGER
  --temperature FLOAT
  --checkpoint-path PATH
  --device TEXT
  --compile / --no-compile
  --seed INTEGER
  --half / --no-half
  --iterative-prompt / --no-iterative-prompt
  --chunk-length INTEGER
  --output-dir PATH
  --help   

# fish_speech/models/dac/inference.py Options:
  -i, --input-path PATH
  -o, --output-path PATH
  --config-name TEXT
  --checkpoint-path TEXT
  -d, --device TEXT
  --help                  Show this message and exit.


# step 1: 
cd /home/ziwen/Apps/fish-speech/fish-speech
source .venv/bin/activate
python fish_speech/models/dac/inference.py --input-path /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_input/english_male.mp3 --checkpoint-path "checkpoints/s2-pro/codec.pth" --output-path /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_output/fake_english_male.wav

# step 2: 
cd /home/ziwen/Apps/fish-speech/fish-speech
source .venv/bin/activate
python fish_speech/models/text2semantic/inference.py --text  "[laugh]This is my first auto generated sound. Made by fish audo." --prompt-text "The morning brings little comfort - a handful of dried berries, a cup of water from yesterday's rain. The wooden bowl is cracked but clean, like everything else here. Sometimes, watching the runrise throuth the window's dusty pane feels like a feast itself." --prompt-tokens /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_output/fake_english_male.npy  --prompt-audio /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_output/fake_english_male.wav  --device "cuda" --chunk-length 1000 --max-new-tokens 2048 --output-dir /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/VQGAN_files/

# step 3: 
cd /home/ziwen/Apps/fish-speech/fish-speech
source .venv/bin/activate
python fish_speech/models/dac/inference.py --input-path  "/home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/VQGAN_files/codes_0.npy" --output-path "/home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/tmp_generated_files/step3.wav" --device "cuda" --checkpoint-path "checkpoints/s2-pro/codec.pth"


# combine step 2 and step 3:
cd /home/ziwen/Apps/fish-speech/fish-speech
source .venv/bin/activate
python fish_speech/models/text2semantic/inference.py --text  "[speaking slowly, almost hesitant]This is my first auto generated sound. Made by fish audo." --prompt-text "The morning brings little comfort - a handful of dried berries, a cup of water from yesterday's rain. The wooden bowl is cracked but clean, like everything else here. Sometimes, watching the runrise throuth the window's dusty pane feels like a feast itself." --prompt-tokens /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_output/fake_english_male.npy  --prompt-audio /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/demo_output/fake_english_male.wav  --device "cuda" --chunk-length 1000 --max-new-tokens 2048 --output /home/ziwen/Apps/fish-speech/fish-speech/run_env_ziwen/tmp_generated_files/step_combined.wav

一些参数的解释:


在 Fish Audio(特别是其最新的 S2 模型,参考论文 arXiv:2603.08823)中,由于其采用了类似于大型语言模型(LLM)的双自回归架构(Dual-Autoregressive Architecture),文本到语音(TTS)的生成本质上是预测离散音频 Token 的过程。

因此,它的推理参数不仅包含传统的音频设置,还包含了类似大模型的解码生成(Decoding)参数。以下是对你提供的各个参数的详细解释以及调整策略:

1. 文本与分块控制 (Text & Chunking)

  • chunk_length: 1000
    • 含义:单次处理的文本块长度(字符数)。为了降低延迟和显存占用,长文本合成会被切分成多个小块(Chunk)进行处理。
    • 如何调整
      • 注意:Fish Audio 官方公共 API 通常建议将此值限制在 100~300 之间。设为 1000 通常适用于本地拥有大显存(如 24GB+ VRAM)的非流式部署。
      • 调小(例如 150-250):如果你在做实时对话机器人,需要极低的“首字出声延迟(Time-to-first-audio,可降至 100ms)”,或者为了降低显存占用,请将其调小。
      • 调大:提供更长的上下文,使得较长段落的情绪和语调更加连贯。如果发现生成的语音在某句话中间被极其突兀地截断并换气,请增大该值。
  • normalize: false
    • 含义:文本归一化开关。决定是否在送入合成前让模型自动清理文本(如将数字“123”转为“一百二十三”,处理特殊符号或缩写)。
    • 如何调整
      • 如果你输入的文本是未经预处理的原始网页/对话文本,建议设为 true,防止模型遇到特殊符号时读错或崩溃。
      • 如果你已经有自己的文本清洗流程,或者你想利用 Fish Audio S2 强大的**标签内联控制(Inline Control)**功能(例如在文本中插入 [laugh], [whispers], [pitch up] 等自然语言指令来精确控制情绪),请务必保持为 false,以免这些指令标签被当做无意义符号清除。

2. 生成与解码参数 (Decoding Parameters)

由于 Fish Audio 使用自回归模型预测声音 Token,以下三个参数直接决定了声音的“表现力”和“稳定性”:

  • temperature: 0.9
    • 含义:采样温度。控制生成的随机性和创造力。值越低,概率最高的 Token 越容易被选中(越保守);值越高,声音的随机变化越大。
    • 如何调整
      • 调高(0.8 – 1.0):当前 0.9 偏向高表现力设定。声音会更具情感、抑扬顿挫更自然,适合讲故事或需要强烈情绪起伏的场景。
      • 调低(0.1 – 0.5):如果模型出现乱发音、突然大叫或破音等幻觉(Hallucinations),降低温度可以让声音变得非常稳定,但听起来可能像没有感情的“棒读”机器人。
  • top_p: 0.9
    • 含义:核采样(Nucleus Sampling)阈值。模型只会从累计概率达到 top_p 的候选池中进行选择,过滤掉极其低概率(大概率是错误发音)的离谱选项。
    • 如何调整:通常与 temperature 配合调整。0.8 - 0.9 可以在保持发音正确的同时引入足够的声音细节变化。如果依然出现个别口齿不清或发错音的情况,可适当降低至 0.7 - 0.8
  • repetition_penalty: 1.05
    • 含义:重复惩罚机制。防止模型像复读机一样陷入死循环。数值大于 1.0 表示对重复发音的 Token 进行惩罚。
    • 如何调整
      • 如果生成的语音出现结巴电音卡顿(一直重复发某一个字的音),请调高(例如 1.11.2)。
      • 如果发现模型跳字、漏字,说明惩罚过重导致模型“不敢”说正常的叠词或常用字,请将其调低(接近 1.0 或当前设定的 1.05 通常是一个很好的平衡值)。
  • max_new_tokens: 2048
    • 含义:模型在当前的一个文本块(Chunk)内,最多允许生成的音频 Token 数量。
    • 如何调整:由于你的 chunk_length 设定得非常大(1000),那么音频 Token 的消耗量也会很大。如果遇到**一句话没说完就戛然而止(静音)**的情况,说明达到了 Token 上限,需要将其进一步调高。反之,如果出现长时间的无意义环境音或尾音拖长,可适当调低作为强制截断的保险手段。

3. 音频输出与性能控制 (Output & Performance)

  • format: “mp3”
    • 含义:导出的音频格式。
    • 如何调整
      • "mp3":适合大多数通用场景,体积小巧。
      • "wav""pcm":无损未压缩格式,适合后续需要导入剪辑软件进行二次混音的高要求场景。
      • "opus":如果你在开发实时语音对话应用(Streaming),Opus 具有最低的延迟和极优的带宽利用率。
  • latency: “normal”
    • 含义:延迟模式策略。决定推理引擎在音频质量和计算速度之间的权衡。
    • 如何调整
      • "normal":标准模式,追求最高的声音逼真度和细节表现。
      • "balanced""low":降低内部处理的复杂度或批量策略,以便更快地输出第一段音频,适合实时交互。
  • references: []
    • 含义:参考音频列表,用于零样本声音克隆(Zero-shot Voice Cloning)
    • 如何调整
      • 当前为空数组 [],意味着模型将使用默认预训练的音色进行发声。
      • 如果你想让 AI 模仿某个特定的声音,可以在此处传入该人物的一段纯净音频(建议 10~30 秒的高质量 WAV)。Fish Audio S2 可以直接提取其声纹、情绪色彩甚至是口音习惯进行复刻。

💡 核心调参建议总结:

  • 追求生动自然:保持高 temperature (0.8-0.9) 和高 top_p (0.8-0.9),允许模型自由发挥情感。
  • 遭遇合成崩溃/乱读/破音:立即降低 temperature(例如降至 0.6),并将 repetition_penalty 微微提高到 1.15,并考虑开启 normalize