
Pocket TTS音频输出格式详解24kHz采样率与PCM数据怎么处理【免费下载链接】pocket-ttsA TTS that fits in your CPU (and pocket)项目地址: https://gitcode.com/GitHub_Trending/po/pocket-ttsPocket TTSKyutai 开源的轻量级 TTS 文本转语音系统是一个完全运行在 CPU 上的语音生成工具1 亿参数、支持音频流式输出、首块延迟约 200ms生成的是24kHz 采样率、16 位 PCM 编码的单声道 WAV音频。本文带你从零理解这套音频格式是怎么产生的——24kHz 采样率从何而来、浮点波形如何变成 PCM 字节、以及输入音频如何被重采样到 24kHz帮你彻底搞懂 Pocket TTS 音频输出的每一个环节。24kHz 采样率从哪里来Pocket TTS 的音频标准由底层的Mimi 音频编解码器决定。在所有语言配置如 pocket_tts/config/english.yaml中都有这样一段sample_rate: 24000—— 输出 24kHz 采样率channels: 1—— 单声道frame_rate: 12.5—— 编解码器每秒只产生 12.5 个音频帧也就是说每个音频 tokenlatent对应 1/12.5 80ms 的语音。语言模型每生成一个 tokenMimi 解码器就吐出 80ms 的 24kHz 波形这也正是流式输出能低延迟工作的原因不用等整段语音生成完每攒够一小段就能立刻播放。为什么选 24kHz 而不是 44.1kHz两个理由音质足够人声有效频率集中在 4kHz 以下24kHz 采样率奈奎斯特频率 12kHz完全覆盖语音频段算力友好Pocket TTS 的目标是装进口袋的 TTS更低的采样率意味着更少的样本数和更快的 CPU 推理正好匹配它 2 核 CPU 就能跑的定位。PCM 数据怎么处理从浮点波形到 16 位 WAV模型内部运算用的是float32 浮点波形取值范围 -1 到 1而写入文件的 PCM 是int16 整型。转换发生在 pocket_tts/data/audio.py 的StreamingWAVWriter中核心逻辑只有两步写文件头声明单声道、16 位采样宽度setsampwidth(2)、24kHz 采样率逐块转换每收到一段浮点音频先clamp(-1, 1)削顶防溢出再乘以 32767 转成 int16 字节流写入文件。这里有 3 个新手容易忽略的细节 结尾补 200ms 静音finalize()会往文件末尾追加 0.2 秒的静音让句尾收尾更自然避免播放器截断尾音 支持不可寻流的 stdout当输出目标是管道--output-path -而非普通文件时无法回头修改 WAV 头部的帧数代码会把帧数先写成占位值 10 亿并跳过头部回填pocket_tts/data/audio.py⚡ 首块缓冲可通过环境变量FIRST_CHUNK_LENGTH_SECONDS控制攒够多少秒再落盘用于调低首次写盘延迟。整个流式写入的调度入口是 pocket_tts/data/audio.py 的stream_audio_chunks()它支持把音频块写入文件、写入 stdout或仅打印pathNone三种模式共用同一套 PCM 转换逻辑。输入音频怎么办重采样与单声道化声音克隆时你提供的参考音频往往是 44.1kHz 的立体声 MP3Pocket TTS 会把它翻译成模型能吃的 24kHz 单声道格式处理环节做了什么位置读取16 位 WAV 用内置wave模块读为 float32除以 32768 归一化其他格式走 soundfileaudio.py降混多声道取平均得到单声道同上重采样用scipy.resample_poly按最大公约数精确换算到 24kHz如 44100→24000audio_utils.py重采样用resample_poly而不是简单抽点是为了避免频谱混叠——这也是官方建议克隆前先清理参考音频的原因之一输入质量会直接影响输出。三种方式拿到 24kHz PCM 音频1. CLI 命令行pocket-tts generate默认输出到./tts_output.wavpocket_tts/main.py。加-可把 WAV 流直接打到终端管道pocket-tts generate --output-path - | aplay2. 本地服务pocket-tts serve启动 FastAPI 服务pocket_tts/main.py/tts接口以audio/wav chunked 编码边生成边推送浏览器端可以实现边下载边播放的流式体验。3. Python APITTSModel 提供两种方法——generate_audio()返回完整张量形状[channels, samples]采样率从model.sample_rate属性读取即 24000generate_audio_stream()则逐块 yield 音频张量适合做实时播放器集成。关键文件路径速查文件作用pocket_tts/data/audio.py音频读写、流式 WAV 写入与 PCM 转换pocket_tts/data/audio_utils.py重采样与声道转换工具pocket_tts/models/tts_model.pyTTS 主模型流式生成入口pocket_tts/config/english.yaml24kHz/12.5fps 等音频参数配置pocket_tts/main.pyCLI 与 HTTP 服务实现docs/API Reference/python-api.mdPython API 完整参考一句话总结Pocket TTS 的音频世界非常简单统一——24kHz、16 位、单声道 PCM模型内部是 float32 波形落盘时乘以 32767 变成 int16流式逐块写入 WAV输入音频则通过resample_poly重采样到这个标准。搞懂这一点你就能放心地把它的输出接进任何播放器、剪辑软件或你自己的实时语音管道里。【免费下载链接】pocket-ttsA TTS that fits in your CPU (and pocket)项目地址: https://gitcode.com/GitHub_Trending/po/pocket-tts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考