用audio.cpp server搭建TTS/ASR API服务:OpenAI兼容接口完整实战指南
【免费下载链接】audio.cppAn all-in-one, pure C++ inference engine for audio models, powered by ggml. Supports TTS, STT, VAD, voice conversion, music generation, and more, with highly optimized performance. No Python dependency.项目地址: https://gitcode.com/gh_mirrors/au/audio.cpp
audio.cpp是基于 ggml 的纯 C++ 音频模型推理引擎,无需任何 Python 依赖。它内置的audiocpp_server可以把本地的 TTS(文本转语音)和 ASR(语音识别)模型一键暴露为OpenAI 兼容的 HTTP 接口——POST /v1/audio/speech和POST /v1/audio/transcriptions,现有 OpenAI SDK 或任何标准 HTTP 客户端基本都能直接接入。本文带你从零完成构建、配置模型、启动服务并调通 TTS/ASR 两大接口,是一套开箱即用的本地语音 API 服务方案。
为什么选择 audio.cpp server
相比"Python 脚本 + 各种依赖"的传统本地部署路线,audio.cpp server 有几个明显优势:
| 优势 | 说明 |
|---|---|
| 🚀 零 Python 依赖 | 整个服务端是一个原生二进制,部署到 Docker / 裸机都极简 |
| 🔌 OpenAI 兼容 | /v1/audio/speech、/v1/audio/transcriptions对齐 OpenAI 约定,客户端几乎零改造 |
| ⚡ 高性能 | CUDA 优化路径,多个 TTS 路线实测比 Python 官方实现快 1.8x~8x,端到端延迟降低 45%~85% |
| 🧩 会话复用 | 每个模型保持一个常驻会话,重复请求复用 graph/缓存,避免重复建图开销 |
| 🖥 内置 WebUI | 可选启动浏览器界面,直接试听、上传录音,方便调试 |
| 📦 80+ 模型家族 | 覆盖 TTS、语音克隆、ASR、说话人分离、VAD 等任务 |
第一步:构建 audiocpp_server
克隆仓库并启用你打算使用的推理后端(CUDA 为官方优化路径,CPU 始终可用):
git clone https://gitcode.com/gh_mirrors/au/audio.cpp cd audio.cpp cmake -S . -B build -DENGINE_ENABLE_CUDA=ON cmake --build build --parallel --target audiocpp_server构建参数速查:
| 参数 | 用途 |
|---|---|
-DENGINE_ENABLE_CUDA=ON | NVIDIA GPU(推荐,性能最佳) |
-DENGINE_ENABLE_VULKAN=ON | AMD / 跨厂商 GPU |
-DENGINE_ENABLE_METAL=ON | Apple Silicon |
-DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER=ON | 开启 WebUI 的模型下载与动态管理 |
💡 详细构建与模式说明见 app/server/README.md。
第二步:编写 server.json 配置文件
服务通过一份 JSON 声明监听地址、后端和要加载的模型。仓库提供了现成模板 app/server/example.json,核心结构如下:
{ "host": "127.0.0.1", "port": 8080, "backend": "cuda", "lazy_load": true, "models": [ { "id": "pocket-tts", "family": "pocket_tts", "path": "/path/to/models/pocket-tts", "task": "tts", "mode": "offline", "default_voice_preset": { "voice_id": "alba" } }, { "id": "qwen3-asr", "family": "qwen3_asr", "path": "/path/to/models/Qwen3-ASR-0.6B", "task": "asr", "mode": "offline" } ] }几个关键配置项:
id:模型在接口请求中的"名字",客户端调用model字段时填它;family:模型家族名,决定使用哪套推理实现(可用audiocpp_cli --list-loaders查看);lazy_load: true:启动时只注册模型,首次请求时才真正加载——多模型共存时能显著缩短启动时间、降低显存峰值;mode:offline或streaming。流式 ASR/TTS 需要选支持 streaming 的模型,完整示例见 app/server/streaming_example.json;max_loaded_models/idle_unload_ms:分别限制常驻显存上限和空闲卸载时间,显存紧张时建议开启。
模型家族与任务对应关系可参考 docs/tts.md(TTS 列表)和 docs/asr.md(ASR 列表)。
第三步:启动服务并验证
build/bin/audiocpp_server --config server.json启动后先用健康检查和模型列表接口验证:
curl http://127.0.0.1:8080/health curl http://127.0.0.1:8080/v1/models/v1/models返回 OpenAI 风格的模型条目,你可以把id直接填进任意 OpenAI SDK 的model参数。如果启用了 UI,浏览器打开http://127.0.0.1:8080还能直接试听与传录音(见 webui/README.md)。
调通 TTS 接口:/v1/audio/speech
这是与 OpenAI TTS 完全同构的接口,默认返回audio/wav:
curl http://127.0.0.1:8080/v1/audio/speech \ -H 'Content-Type: application/json' \ -o out.wav \ -d '{ "model": "pocket-tts", "input": "audio.cpp is serving this request.", "max_tokens": 96, "seed": 1234 }'常见可选字段
| 字段 | 作用 |
|---|---|
voice | 选择配置好的声音预设或voice_dir音色库中的音色 |
voice_ref | 声音克隆参考音频,支持服务器本地路径、{"type":"path"}或{"type":"base64"}内联 WAV |
reference_text | 参考音频对应的文本(克隆时提高相似度) |
speed | 语速倍数(模型支持时生效) |
response_format | 默认 wav;"json"返回 base64 WAV |
两个实用技巧:
- 声音预设:在模型配置里写
default_voice_preset,客户端就可以省略voice_ref,每次请求自动使用同一音色,非常适合做固定"播报员"场景; - 音色库
voice_dir:把多个.wav音色放到一个目录,请求里传"voice": "demo_01_man"即可克隆,GET /v1/audio/voices?model=<id>可以列出全部可用音色,方便前端做音色下拉框。
调通 ASR 接口:/v1/audio/transcriptions
同样对齐 OpenAI Whisper API 约定,支持两种请求方式:
方式一:JSON + 服务器本地路径(模型和音频都在同一台机器上时最简单):
curl http://127.0.0.1:8080/v1/audio/transcriptions \ -H 'Content-Type: application/json' \ -d '{ "model": "qwen3-asr", "audio": "/path/to/input.wav" }'方式二:multipart 文件上传(Open WebUI 等真实客户端的标准用法,音频不落盘、在内存中解码):
curl http://127.0.0.1:8080/v1/audio/transcriptions \ -F model=qwen3-asr \ -F language=en \ -F file=@/path/to/input.wav对于mode: "streaming"的流式 ASR 模型,追加-F stream=true即可收到 OpenAI 风格的 SSE 事件流:先是一串transcript.text.delta增量文本,最后一条transcript.text.done携带完整转写,适合长音频降低首字等待。
📌 需要词级时间戳、分段或说话人标签时,改用扩展接口
POST /v1/audio/transcriptions/details,普通接口的响应结构保持不变。
进阶能力一览
| 接口 | 用途 |
|---|---|
POST /v1/batches/transcriptions | 多个 WAV 走同一批离线推理(模型需支持原生 batch),SSE 逐条返回结果 |
POST /v1/audio/transcriptions/live | 麦克风 PCM 边采边传、边说边出字,配合 ffmpeg 一行管道即可实现实时听写 |
POST /v1/audio/alignments | 强制对齐:已知文本 + 音频,返回词级时间戳 |
POST /v1/audio/speech/live | 语音到语音模型的实时接入端点 |
POST /v1/tasks/unload_models | 手动卸载指定模型释放显存,下次请求自动透明重载 |
完整端点说明见 app/server/README.md。
性能表现:长会话复用是最大亮点
由于每个模型保持一个常驻会话,audio.cpp server 在"长生命周期会话"下优势尤其明显——下图展示了多个 TTS/ASR 模型相对 Python 官方实现的推理加速比,PocketTTS、Qwen3 系普遍达到 2x~3x 以上:
而在"一次性冷启动"场景下,首次请求虽然包含模型加载与建图成本,多数模型仍明显快于 Python 路线(Parakeet-TDT 甚至接近 13x):
实际部署建议:
- 🔥 保持
lazy_load: true,让显存在首次请求时才被占用; - 🧮 显存不够时设
max_loaded_models: 1,超出上限的模型会自动 LRU 换出; - ⏱ 长任务(如批量转写)注意
busy_timeout_ms:同一模型的请求是串行锁执行的,超时后返回 503 供客户端重试,避免请求无限排队。
总结
用 audio.cpp server 搭建一套 OpenAI 兼容的 TTS/ASR API 服务,只需要三步:构建(两条 cmake 命令)→配置(一份声明 TTS/ASR 模型的 server.json)→启动(一条命令),即可获得/v1/audio/speech、/v1/audio/transcriptions等标准端点,外加流式转写、批量处理、声音克隆预设等生产级特性——全部零 Python 依赖。
常用资料索引:
- 服务端完整文档:app/server/README.md
- 配置示例:app/server/example.json、app/server/streaming_example.json
- TTS 模型手册:docs/tts.md
- ASR 模型手册:docs/asr.md
- CLI 用法:docs/usage.md
- WebUI 说明:webui/README.md
【免费下载链接】audio.cppAn all-in-one, pure C++ inference engine for audio models, powered by ggml. Supports TTS, STT, VAD, voice conversion, music generation, and more, with highly optimized performance. No Python dependency.项目地址: https://gitcode.com/gh_mirrors/au/audio.cpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考