Skip to content

Lumi083/isp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ISP

这是一个 IndexTTS2 的 Flask API ,提供带有流式输出和情感预设支持的语音合成服务。

ISP的优势:

  1. 无论你要生成多长的文本,你都能在几秒内听到这段文本是什么样的,不会白白等几个小时然后发现效果不好。
  2. 基于官方接口实现,兼容绝大多数的仓库和整合包。

如果你喜欢速度和并发:

我们为VLLM写了一个FASTAPI版本。这里有(Win)ISP+VLLM的整合包。由于测试尚不充分,可能会遇到一点小问题,欢迎反馈。

安装

这里有一份简单版的安装指南。或者,如果你已经安装好了IndexTTS2,你可以根据下面的说明继续。

  1. 克隆和安装 2025.10 以后的 IndexTTS及其依赖。
  2. 将此仓库克隆到 index-tts 文件夹(使路径为 index-tts/isp)。
cd index-tts
git clone https://github.com/Lumi083/isp.git
  1. IndexTTS2 推荐使用 uv 进行环境管理。通过在 index-tts 文件夹执行下列命令,你可以将本项目的依赖安装到相同的 uv 管理环境中:
# pyaudio 仅用于 test\audio_play.py,你可以不安装它
# 但是你肯定需要 flask。
uv pip install flask==3.0.0 pyaudio>=0.2.14

运行 API

启动 API 服务器:

uv run isp/app.py

服务器默认运行在 http://127.0.0.1:23467

测试:

uv run .\isp\test\latency.py # 测试stream的首包延迟
uv run .\isp\test\audio_play.py # 用pyaudio播放stream的输出
uv run .\isp\test\presets.py # 测试各种情绪的生成
# 一些情况下 soundfile 可能无法识别部分文件。详见 issue 1

app.py 的命令行选项

  • --verbose:启用详细日志
  • --port:API 端口(默认:23467)
  • --host:绑定主机(默认:0.0.0.0)
  • --model_dir:模型检查点路径(默认:./checkpoints)
  • --fp16:推理使用 FP16(默认:True)
  • --deepspeed:使用 DeepSpeed 加速
  • --cuda_kernel:使用 cuda kernel 编译加速
  • --force_presets:禁用 /voice/indextts,仅保留 /voice/indextts/presets。

API 端点

GET 或 POST /voice/indextts

使用提供的参数从文本生成音频。

必需参数

  • text:要合成的文本
  • prompt_audio:用于克隆说话人音色的参考音频路径

可选参数

基本设置
  • format:输出格式(当前仅支持:"wav")
  • lang:语言代码(可能仅支持中文英文,默认:"zh")
流式
  • stream:启用流式音频生成(默认:false)

  • quick_token:快速流式令牌阈值(默认:0)

  • stream=false 时:下载生成的音频文件

  • stream=true 时:返回流式 WAV 音频返回

情感控制
  • emo_weight:情感混合权重(默认:0.65)
  • emo_control_method:情感控制方法(默认:0)
    • 0:使用 prompt_audio 中的说话人情感
    • 1:使用参考音频的情感
    • 2:使用自定义情感向量
    • 3:使用文本描述的情感
  • emo_ref_path:情感参考音频路径(方法 1)
  • vec1vec8:自定义情感向量分量(方法 2)
vec1 = gr.Slider(label=i18n("喜"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec2 = gr.Slider(label=i18n("怒"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec3 = gr.Slider(label=i18n("哀"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec4 = gr.Slider(label=i18n("惧"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec5 = gr.Slider(label=i18n("厌恶"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec6 = gr.Slider(label=i18n("低落"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec7 = gr.Slider(label=i18n("惊喜"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
vec8 = gr.Slider(label=i18n("平静"), minimum=0.0, maximum=1.0, value=0.0, step=0.05)
  • emo_text:情感描述文本(方法 3,不推荐)
  • emo_random:随机化情感向量(不推荐)

GET 或 POST /voice/indextts/presets

使用 id 替代 prompt_audio,使用 emo_id 替代 emo_ref_path

# ext in [wav, mp3]
prompt_audio = api_root_folder/presets/voice/{id}/prompt.{ext}
emo_ref_path = api_root_folder/presets/emo/{emo_id}.{ext}

备注

  • 参考音频应不超过 15 秒

About

A simple Flask-based API for IndexTTS2, providing text-to-speech synthesis with emotion control and streaming support.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages