# RapidSpeech.cpp
**Repository Path**: RapidAI/RapidSpeech.cpp
## Basic Information
- **Project Name**: RapidSpeech.cpp
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-24
- **Last Updated**: 2026-06-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
简体中文 | [English](./README.md)
# RapidSpeech.cpp 🎙️
**RapidSpeech.cpp** 是一个基于 **ggml** 构建的高性能、边缘原生(Edge-native)语音智能框架,致力于为 ASR(自动语音识别)与 TTS(语音合成)大模型提供 **纯 C++、零依赖、可端侧部署** 的推理解决方案。
------
## 🌟 核心差异化优势
在当前开源生态中,云端侧已有如 **vLLM-omni** 等高吞吐推理框架,端侧也有 **sherpa-onnx** 这样成熟的工具链。而 **RapidSpeech.cpp** 则在以下关键维度实现了代际突破。
### 1. 对比 vLLM:边缘计算优先,而非云端吞吐优先
- **vLLM**
- 面向数据中心与云端部署
- 强依赖 Python 运行时与 CUDA
- 通过 PageAttention 等技术最大化 GPU 吞吐
- **RapidSpeech.cpp**
- 面向 **边缘计算与端侧推理**
- 强调 **低延迟、低内存占用与轻量化**
- 可运行于嵌入式设备、移动端、普通笔记本,甚至无 GPU 的 NPU 平台
- **无需 Python 运行环境**
### 2. 对比 sherpa-onnx:更深度的底层掌控能力
| 维度 | sherpa-onnx(ONNX Runtime) | **RapidSpeech.cpp(ggml)** |
| --- | --- | --- |
| **内存管理** | 依赖 ORT 内部机制,内存行为相对不可控 | **零运行时内存分配**,在计算图构建阶段完成内存规划,最大限度避免端侧 OOM |
| **量化能力** | 以 INT8 为主,对超低比特支持有限 | **完整 K-Quants 量化体系**(Q4_K / Q5_K / Q6_K 等),在保证精度的同时显著降低带宽与内存压力 |
| **GPU 性能** | 通过 EP 映射,存在通用算子转换开销 | **原生后端优化**,直接使用 `ggml-cuda` / `ggml-metal`,推理效率显著优于 `onnxruntime-gpu` |
| **部署形态** | 通常依赖动态库与外部配置文件 | **单一可执行文件**,模型与配置统一封装于 **GGUF**,部署即运行 |
------
## 📦 模型支持
**语音识别(ASR)**
- [x] SenseVoice-small
- [x] FunASR-nano
- [ ] Qwen3-ASR
- [ ] FireRedASR2
**语音合成(TTS)**
- [x] OpenVoice2(MeloTTS + 声音克隆)
- [x] OmniVoice(单阶段非自回归扩散 TTS,多语种 + 声音克隆)
- [ ] CosyVoice3
- [ ] Qwen3-TTS
------
## 🏗️ 架构设计
RapidSpeech.cpp 并非"单模型推理工具",而是一套面向真实业务场景设计的完整语音框架:
- **核心引擎(Core Engine)**
基于 `ggml` 的高性能计算后端,支持从 INT4 到 FP32 的混合精度推理。
- **架构层(Architecture Layer)**
插件式模型构建与加载机制,支持 FunASR-nano、CosyVoice、Qwen3-TTS 等主流模型体系。
- **业务逻辑层(Business Logic)**
内置环形缓冲区、VAD(端点检测)、文本前端(如音素化)以及多会话并发管理能力。
------
## 🚀 核心特性
- [x] **极致量化支持**:原生支持 4-bit / 5-bit / 6-bit 量化方案,充分适配不同算力与带宽条件的硬件。
- [x] **零依赖部署**:纯 C/C++ 实现,最终产物为单一、轻量级二进制文件。
- [x] **GPU / NPU 加速**:针对语音模型特点,对 CUDA 与 Metal 后端进行定制化优化。
- [x] **统一模型格式**:ASR 与 TTS 统一采用扩展后的 **GGUF** 模型格式。
- [x] **Python 绑定**:通过 pybind11 提供 Python API,支持 `pip install` 一键安装。
------
## 🛠️ 快速开始
### 模型下载
请从以下平台下载对应模型:
- 🤗 Hugging Face:https://huggingface.co/RapidAI/RapidSpeech
- ModelScope:https://www.modelscope.cn/models/RapidAI/RapidSpeech
### 从源码构建
```bash
git clone https://github.com/RapidAI/RapidSpeech.cpp
cd RapidSpeech.cpp
git submodule sync && git submodule update --init --recursive
cmake -B build
cmake --build build --config Release
```
构建产物位于 `build/` 目录:
- `rs-asr-offline` — 离线 ASR 命令行工具
- `rs-asr-online` — 在线(流式)ASR 命令行工具
- `rs-tts-offline` — 离线 TTS 命令行工具
- `rs-quantize` — 模型量化工具
### C++ 命令行使用
#### 离线识别(rs-asr-offline)
**基础用法 — 不使用 VAD:**
```bash
./build/rs-asr-offline \
-m /path/to/funasr-nano-fp16.gguf \
-w /path/to/audio.wav \
-t 4 \
--gpu true
```
**使用 VAD 分段(推荐,适合长音频):**
```bash
./build/rs-asr-offline \
-m /path/to/funasr-nano-fp16.gguf \
-v /path/to/silero_vad_v6.gguf \
-w /path/to/audio.wav \
-t 4 \
--vad-threshold 0.5 \
--silence-ms 600
```
指定 VAD 模型后,工具会自动按语音活动分段,并输出带时间戳的分段识别结果。
参数说明:
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| `-m, --model` | GGUF 模型文件路径(必填) | — |
| `-w, --wav` | WAV 音频文件路径(16kHz,必填) | — |
| `-v, --vad` | VAD GGUF 模型路径 —— Silero 或 FireRed,根据 `general.architecture` 自动识别(可选,启用 VAD 分段) | — |
| `-t, --threads` | CPU 线程数 | 4 |
| `--gpu` | 是否启用 GPU 加速(`true`/`false`) | true |
| `--vad-threshold` | VAD 语音检测阈值(0~1,越低越灵敏) | 0.5 |
| `--silence-ms` | 静默时长超过该值则切分段落(ms) | 600 |
| `--max-segment-s` | ASR 输入的最大分段长度(秒) | 30.0 |
#### 在线/流式识别(rs-asr-online)
**WAV 文件(模拟流式):**
```bash
./build/rs-asr-online \
-m /path/to/funasr-nano-fp16.gguf \
-v /path/to/silero_vad_v6.gguf \
-w /path/to/audio.wav \
-t 4 \
--vad-threshold 0.5 \
--silence-ms 600
```
**麦克风实时识别:**
```bash
./build/rs-asr-online \
-m /path/to/funasr-nano-fp16.gguf \
-v /path/to/silero_vad_v6.gguf \
--mic \
-t 4
```
**两遍模式(CTC 快速解码 + LLM 重打分,仅 FunASR-Nano 支持):**
```bash
./build/rs-asr-online \
-m /path/to/funasr-nano-fp16.gguf \
-v /path/to/silero_vad_v6.gguf \
-w /path/to/audio.wav \
--two-pass
```
参数说明:
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| `-m, --model` | ASR GGUF 模型文件路径(必填) | — |
| `-v, --vad` | Silero VAD 模型文件路径(必填) | — |
| `-w, --wav` | WAV 音频文件路径(16kHz) | — |
| `--mic` | 使用麦克风输入(实时模式) | 关闭 |
| `--mic-device` | 麦克风设备索引 | 自动 |
| `--mic-chunk-ms` | 麦克风读取块大小(ms) | 32 |
| `-t, --threads` | CPU 线程数 | 4 |
| `--gpu` | 是否启用 GPU 加速(`true`/`false`) | true |
| `--vad-threshold` | VAD 语音检测阈值(0~1,越低越灵敏) | 0.5 |
| `--silence-ms` | 静默超时切分时长(ms) | 600 |
| `--two-pass` | 启用两遍模式:CTC 解码 + LLM 重打分 | 关闭 |
| `--ctc-precheck` | LLM 解码前 CTC 预检,跳过静音段(减少幻觉,略微增加实时率) | 关闭 |
#### 语音合成(rs-tts-offline)
##### MeloTTS / OpenVoice2
OpenVoice2 基于 [MeloTTS](https://github.com/myshell-ai/MeloTTS) 作为底层声学模型(VITS 风格:文本编码器 + 时长预测器 + Flow 解码器 + HiFi-GAN 声码器)。MeloTTS 每种语言一个权重文件,`--lang` 必须与转换 GGUF 时使用的语言一致。
**英语(MeloTTS-English):**
```bash
./build/rs-tts-offline \
-m /path/to/openvoice2-base-en.gguf \
-t "Hello, welcome to RapidSpeech!" \
--lang English \
-o output.wav \
--threads 4
```
**中文(MeloTTS-Chinese):**
```bash
./build/rs-tts-offline \
-m /path/to/openvoice2-base-zh.gguf \
-t "你好,欢迎使用 RapidSpeech 语音合成。" \
--lang Chinese \
-o output.wav
```
**日语(MeloTTS-Japanese):**
```bash
./build/rs-tts-offline \
-m /path/to/openvoice2-base-jp.gguf \
-t "こんにちは、RapidSpeech へようこそ。" \
--lang Japanese \
-o output.wav
```
`--lang` 可选值:`English`/`EN`/`en`、`Chinese`/`ZH`/`zh`、`Japanese`/`JA`/`ja`,大小写不敏感,但必须与模型匹配——给英语模型喂中文文本会产生乱码。
**声音克隆(OpenVoice2 = MeloTTS 基础模型 + 音色转换器):**
OpenVoice2 把说话人音色和韵律解耦。通过 `--ref` 传入参考音频,即可把对应说话人的音色应用到合成语音上。需要音色转换器 GGUF 与基础 GGUF 放在同一目录(加载器会自动发现)。
```bash
./build/rs-tts-offline \
-m /path/to/openvoice2-base-en.gguf \
-t "Hello, this is cloned voice." \
--lang English \
--ref /path/to/reference.wav \
-o output.wav
```
##### OmniVoice(扩散 TTS,多语种 + 声音克隆)
```bash
./build/rs-tts-offline \
-m /path/to/omnivoice-f16.gguf \
-t "Hello, welcome to RapidSpeech!" \
--instruct "male, young adult, moderate pitch" \
--lang English \
--n-steps 32 \
-o output.wav
```
**声音克隆(OmniVoice):**
```bash
./build/rs-tts-offline \
-m /path/to/omnivoice-f16.gguf \
-t "Hello, this is cloned voice." \
--ref /path/to/reference.wav \
--ref-text "transcript of the reference audio" \
-o output.wav
```
参数说明:
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| `-m, --model` | TTS GGUF 模型文件路径(必填) | — |
| `-t, --text` | 要合成的文本(必填) | — |
| `-o, --output` | 输出 WAV 文件路径 | output.wav |
| `--lang` | 目标语种。MeloTTS:`English`/`Chinese`/`Japanese`(必须与 GGUF 一致);OmniVoice:`English`/`zh`/... | English |
| `--ref` | 参考音频 WAV 文件路径,用于声音克隆(OpenVoice2 / OmniVoice) | — |
| `--ref-text` | 参考音频对应的文本转录(仅 OmniVoice) | — |
| `--bert` | 中文 BERT GGUF(1024 维,OpenVoice2 中文专用,可选) | — |
| `--mbert` | 多语种 BERT GGUF(768 维,可选) | — |
| `--instruct` | 声音描述,如 `male`、`female`、`young adult`(OmniVoice) | male |
| `--seed` | 随机种子(OmniVoice) | 42 |
| `--n-steps` | 扩散步数 1-128,越少越快但音质可能下降(OmniVoice) | 32 |
| `--threads` | CPU 线程数 | 4 |
| `--gpu` | 是否启用 GPU 加速(`true`/`false`) | true |
#### 模型量化(rs-quantize)
```bash
./build/rs-quantize /path/to/funasr-nano-fp16.gguf /path/to/output-q4_k.gguf q4_k
```
支持的量化类型:`q4_0`, `q4_k`, `q4_k_m`, `q5_0`, `q5_k`, `q8_0`, `f16`, `f32`
> ⚠️ **量化注意**:Q2_K 量化对 FunASR Nano 精度损失过大,会导致输出乱码,不推荐使用。推荐使用q4_k_m或q8
### Python 使用
#### 安装
```bash
# CPU 版本(Linux / macOS / Windows)
pip install rapidspeech
# CUDA 版本(Linux + NVIDIA GPU)
pip install rapidspeech-cuda
# Metal 版本(macOS Apple Silicon)
pip install rapidspeech-metal
```
支持的后端:
| 后端 | 发行包名 | 平台 | 备注 |
|---------|----------------------|-------------------------------|--------------------------------------------|
| CPU | `rapidspeech` | Linux / macOS / Windows | 默认后端,无 GPU 依赖 |
| CUDA | `rapidspeech-cuda` | Linux + NVIDIA GPU | 基于 CUDA 11.8 构建(manylinux2014) |
| Metal | `rapidspeech-metal` | macOS(Apple Silicon) | DAC 声码器使用 Metal 融合内核加速 |
| Vulkan | _仅源码构建_ | Linux / Windows + Vulkan SDK | 跨厂商 GPU 加速 |
| CANN | _仅源码构建_ | Linux + 华为昇腾 NPU | 需安装 CANN 工具链 |
| OpenCL | _仅源码构建_ | Linux / Android + OpenCL ICD | 适用于移动端 / 嵌入式 GPU |
| WebGPU | _仅源码构建_ | 原生(Dawn)/ WASM | 浏览器部署,WASM 下使用 emdawnwebgpu |
> 提示:不同后端的 pip 发行包名不同,但 Python 中的 import 名统一为 `rapidspeech`。标注为 _仅源码构建_ 的后端未发布到 PyPI,请按下方指引从源码编译。
#### 从源码构建 Python 包
```bash
# CPU 构建(默认)
pip install .
# 内置识别的后端(setup.py 会自动设置 wheel 名)
RS_BACKEND=cuda pip install . # 需 PATH 中可找到 nvcc
RS_BACKEND=metal pip install . # macOS,Apple Silicon 自动启用
# 其他后端 —— 通过 RAPIDSPEECH_CMAKE_ARGS 直接传递 CMake 选项
RAPIDSPEECH_CMAKE_ARGS="-DRS_VULKAN=ON" pip install . # Vulkan
RAPIDSPEECH_CMAKE_ARGS="-DRS_CANN=ON" pip install . # 华为昇腾
RAPIDSPEECH_CMAKE_ARGS="-DRS_OPENCL=ON" pip install . # OpenCL
RAPIDSPEECH_CMAKE_ARGS="-DRS_WEBGPU=ON" pip install . # WebGPU (Dawn)
```
#### Python API
```python
import rapidspeech
import numpy as np
# 初始化 ASR 上下文
ctx = rapidspeech.asr_offline(
model_path="funasr-nano-fp16.gguf",
n_threads=4,
use_gpu=True
)
# 读取 WAV 音频(16kHz, float32, 单声道)
pcm = ... # np.ndarray, shape=[N], dtype=float32
# 推送音频并识别
ctx.push_audio(pcm)
ctx.process()
# 获取识别结果
text = ctx.get_text()
print(f"识别结果: {text}")
```
完整示例参见 [python-api-examples/asr/asr-offline.py](python-api-examples/asr/asr-offline.py)。
**TTS Python API:**
```python
import rapidspeech
import numpy as np
# 初始化 TTS 合成器
tts = rapidspeech.tts_synthesizer(
model_path="openvoice2-base.gguf",
n_threads=4,
use_gpu=True
)
# 合成文本为音频(返回完整 PCM numpy 数组)
pcm = tts.synthesize("你好,欢迎使用RapidSpeech!")
# 流式合成(返回 numpy 数组列表)
chunks = tts.synthesize_streaming("你好,欢迎使用RapidSpeech!")
for chunk in chunks:
print(f"音频块: {len(chunk)} 采样点")
# 可选:设置参考音频用于声音克隆
# reference_pcm = ... # 加载参考音频
# tts.set_reference(reference_pcm, sample_rate=16000)
```
------
## 🧪 示例与多语言绑定
每种语言绑定都有独立的示例目录与 README,覆盖从安装、命令行参数到底层 API 的端到端用法。
| 目录 | 覆盖内容 | 文档 |
|------|----------|------|
| 🐍 **Python** | `pip install rapidspeech` → 离线 / 流式 ASR(神经 VAD + 2-pass LLM 重打分)、离线 / 流式 TTS、声音克隆 | [`python-api-examples/README.md`](python-api-examples/README.md) |
| 🌐 **浏览器(WebAssembly)** | 三标签页演示:离线 ASR、麦克风在线 ASR、离线 TTS。本地运行,WebGPU + pthreads | [`wasm-examples/README.md`](wasm-examples/README.md) |
| 🟩 **Node.js** | 复用 WASM 模块的 CLI:文件 → ASR(可选 VAD + 2-pass)、文本 → TTS(可选声音克隆) | [`node-api-example/README.md`](node-api-example/README.md) |
| 💻 **C++ CLI** | `rs-asr-offline` / `rs-asr-online` / `rs-tts-offline` / `rs-quantize` | 本 README 上方章节 |
| ☁️ **Colab Notebook** | 在免费 T4 上编译 CLI、跑 ASR/TTS、使用 Python API 全流程 | [`colab/README.md`](colab/README.md) |
| 🤗 **HuggingFace Space** | 以 Docker SDK 部署浏览器 demo(自动配好 COOP/COEP) | [`huggingface-space/HOWTO.md`](huggingface-space/HOWTO.md) |
快速预览:
```bash
# Python —— 带 VAD 切分的 2-pass 转写
python python-api-examples/asr/asr-offline.py \
--model funasr-nano.gguf --audio long.wav \
--vad silero-vad.gguf --two-pass
# 浏览器 —— 三个标签页一起跑
cd wasm-examples && python3 serve.py 8000 # 然后访问 http://localhost:8000
# Node.js —— 同一份 WASM 模块,文件级 ASR/TTS
node node-api-example/index.js asr -m funasr-nano.gguf -w audio.wav --two-pass
node node-api-example/index.js tts -m omnivoice.gguf -t "你好世界" --lang Chinese -o out.wav
```
------
## 📊 性能基准
测试环境:Apple M1 Pro, funasr-nano-fp16.gguf, 15s 音频
| 配置 | RTF | 耗时 | 备注 |
|------|-----|------|------|
| CPU -t 4 | 0.465 | 12.4s | 纯 CPU 推理 |
| GPU -t 4 | 0.170 | 5.2s | Metal 加速 |
| GPU -t 4 Q4_K | 0.756 | — | 量化模型在 GPU 上反量化开销增大 |
| CPU -t 4 Q4_K | 0.530 | — | 量化模型 CPU 推理,模型体积 596MB(压缩 3.3x) |
> RTF(Real-Time Factor)= 处理时间 / 音频时长,越低越快。RTF < 1 表示快于实时。
------
## 🔧 模型格式转换
### ASR 模型(HF → GGUF)
提供 HF 模型到 GGUF 格式的转换工具:
```bash
python scripts/convert_hf_to_gguf.py \
--model /path/to/hf-model-dir \
--outfile /path/to/output.gguf \
--outtype f16
```
### Silero VAD 模型(safetensors → GGUF)
用于 `rs-asr-online` 或离线 VAD 分段的 Silero VAD 模型转换:
```bash
python scripts/convert_silero_to_gguf.py \
--model /path/to/silero_vad_16k.safetensors \
--output /path/to/silero_vad_v6.gguf
```
转换后的 VAD 模型也可直接从 [HuggingFace](https://huggingface.co/RapidAI/RapidSpeech) 或 [ModelScope](https://www.modelscope.cn/models/RapidAI/RapidSpeech) 下载。
### TTS 模型(OpenVoice2 / MeloTTS → GGUF)
将 MeloTTS(OpenVoice2 基础模型)以及可选的音色转换器转换为 GGUF。MeloTTS 每种语言对应一个 HuggingFace 仓库,请选择匹配的 `--base-model` 和 `--language` 标签。
```bash
# 英语
python scripts/convert_openvoice2.py \
--base-model myshell-ai/MeloTTS-English \
--output-dir ./models \
--language EN
# 中文
python scripts/convert_openvoice2.py \
--base-model myshell-ai/MeloTTS-Chinese \
--output-dir ./models \
--language ZH
# 日语
python scripts/convert_openvoice2.py \
--base-model myshell-ai/MeloTTS-Japanese \
--output-dir ./models \
--language JA
# 同时转换音色转换器(启用 --ref 声音克隆)
python scripts/convert_openvoice2.py \
--base-model myshell-ai/MeloTTS-English \
--converter-model myshell-ai/OpenVoiceV2 \
--output-dir ./models \
--language EN
```
产物说明:
- `openvoice2-base-.gguf` — 文本编码器 + 时长预测器 + Flow 解码器 + HiFi-GAN 声码器
- `openvoice2-converter.gguf` — 音色转换器(仅在指定 `--converter-model` 时生成;`--ref` 声音克隆需要它)
### TTS 模型(OmniVoice → GGUF)
将 OmniVoice PyTorch 模型(LLM + audio tokenizer)合并转换为单一 GGUF:
```bash
python scripts/convert_omnivoice_to_gguf.py \
--model /path/to/omnivoice-model \
--tokenizer /path/to/omnivoice-audio-tokenizer \
--output /path/to/omnivoice-merged.gguf \
--outtype f16
```
------
## 🤝 参与贡献
如果你对以下领域感兴趣,欢迎提交 PR 或参与讨论:
- 适配更多模型。
- 完善项目框架。
- 优化推理性能。
## 致谢
1. [Fun-ASR](https://github.com/FunAudioLLM/Fun-ASR)
2. [llama.cpp](https://github.com/ggml-org/llama.cpp)
3. [ggml](https://github.com/ggml-org/ggml)