Courses
近年来,自动语音识别(ASR)取得了长足进步。过去需要强大 GPU 且结果不稳定的语音转文字模型,如今已能在日常电脑上提供精准转写效果。
与此同时,模型体积不断缩小,CPU 推理速度更快,多语言支持也在扩展,为用户带来了更佳的转写质量、速度、易用性与隐私性的组合。
微软的 VibeVoice-ASR-BitNet 正是这一进展的好例子。
其优化后的 VibeASR.cpp 运行时,让您无需依赖独立 GPU 或将录音上传到云端,就能在 Windows、Linux 或 macOS 电脑上本地运行多语言语音转文字。
本指南将带您完成 VibeASR.cpp 的安装与构建、量化模型下载、命令行转写音频文件、运行持久化流式服务器,以及通过 Gradio 网页界面进行上传或录音转写。
什么是 Microsoft VibeASR.cpp?
VibeASR.cpp 是微软为 VibeVoice-ASR-BitNet 提供的官方 C++ 推理运行时。该模型是面向 CPU 高效本地推理的压缩多语言自动语音识别模型。
VibeASR.cpp 并非独立的语音模型,而是提供运行该模型所需的优化引擎,使其无需独立 GPU 或云端语音服务即可实现实时转写。
这使其适用于笔记本、台式机、边缘设备等算力受限的系统。

来源: microsoft/VibeVoice-ASR-BitNet
为使 CPU 部署更实际可行,微软将原始 VibeVoice-ASR 架构中使用的 Qwen2.5-7B 语言模型组件替换为更小的 Qwen2.5-1.5B 模型。
此外,还对两个主要组件采用了不同的量化方法:
I8_S用于 VAE 音频编码器I2_S用于语言模型,并对嵌入部分使用更高精度
这些优化将模型总大小从约 4.62 GB 降至 1.58 GB,让其在笔记本和台式机上运行更为实际。
尽管体积大幅缩小,压缩后的模型与更大架构相比,词错误率(WER)仅有约 1–4 个百分点的小幅上升。
VibeASR.cpp 利用 ggml 框架、自定义 CPU 指令以及算子融合来提升推理速度。
根据微软的基准测试,在相近模型规模下,它可比 Whisper.cpp 快 1.6–2.3 倍,在支持的 CPU 上配合足够线程可实现快于实时的转写。
在微软的 CPU 基准测试中,模型在 4 线程时 RTF 为 0.63,8 线程时为 0.42,分别约等于 1.59× 与 2.38× 实时速度。
其报告的 WER 包括 MLC English 8.25%、AMI 头戴式麦克风 21.36%、AMI 远距麦克风 25.87%,以及 LibriSpeech clean 2.41%,在转写准确性、模型体积与 CPU 性能之间达成了很好的平衡。
1. 安装必需的构建工具
VibeASR.cpp 完全在 CPU 上运行,因此无需独立 GPU。您只需一台受支持的 Windows、Linux 或 macOS 电脑,Python 3.9 或更高版本、Git、C++ 编译器,以及约 4 GB 可用磁盘空间,用于源码、构建文件与模型。
构建过程还需要 CMake 和 Ninja。
在 Windows 上,最简单的方式是使用 w64devkit,它在预配置的终端中提供编译器与构建工具。
在 Linux 上,可直接通过系统包管理器安装所需软件包。
Windows
从 w64devkit 的 发布页下载最新的 x64 .exe 文件。

下载的文件是自解压归档。运行它并将文件夹解压到一个简便的位置,例如:
C:\w64devkit
然后打开:
C:\w64devkit\w64devkit.exe
这将启动一个即开即用的终端,内置 GCC、CMake、Make 与 Ninja。您可以直接在该终端中完成后续 Windows 步骤,无需手动配置环境变量。
Linux
在 Ubuntu、Debian 及其衍生发行版中,可用一条命令安装所需的编译器与构建工具:
sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv
这会安装 GCC 编译器、CMake、Ninja、Git、Python,以及创建 Python 虚拟环境所需的软件包。
macOS
在 macOS 上,先安装 Apple 的命令行开发工具:
xcode-select --install
您还需要 Git、Python 3.9 或更新版本、CMake 与 Ninja。安装这些工具最简单的方法是通过 Homebrew:
brew install git python cmake ninja
2. 克隆 VibeASR.cpp 并设置 Python 环境
以下设置流程在 Windows、Linux 与 macOS 上相同。
唯一与操作系统相关的差异在于激活 Python 虚拟环境的命令。
打开终端,进入用于存放项目的文件夹,克隆 VibeASR.cpp 仓库:
git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

--recursive 选项还会下载所需的 llama.cpp 子模块。若缺少该子模块,构建推理运行时所需的部分文件将不存在。
在项目文件夹中创建一个 Python 虚拟环境。
python -m venv .venv
使用对应操作系统的命令激活它。
在 w64devkit 终端下的 Windows:
. .venv/Scripts/activate
Linux 与 macOS:
source .venv/bin/activate
激活后,终端提示符前应显示 (.venv)。确认 Python 可用:
python --version
升级 pip 并安装项目依赖:
python -m pip install --upgrade pip
pip install -r requirements.txt
这些依赖包括搭建脚本、模型下载流程与本地 Gradio 网页界面所需的 Python 包。
3. 构建 VibeASR.cpp 并下载模型
VibeASR.cpp 提供了一个设置脚本,同时处理 C++ 构建流程与模型下载。
它会编译命令行与流式可执行文件、安装所需的 GGUF 包,并将预量化模型文件下载到项目目录中。
运行设置脚本前,请确保已激活 Python 虚拟环境。
在 Linux 与 macOS 上运行:
python setup_env.py
在 Windows 上,请在 w64devkit 终端中运行:
CMAKE_GENERATOR=Ninja python setup_env.py
设置 CMAKE_GENERATOR=Ninja 可确保 CMake 使用 Ninja 构建系统,而不是尝试使用 w64devkit 环境中不可用的 Microsoft Visual C++。
该设置脚本将:
- 安装必需的
ggufPython 包。 - 配置并编译 VibeASR.cpp。
- 构建推理与流式可执行文件。
- 下载预量化的 VibeASR 模型文件。
- 将下载的模型保存到
models/vibeasr中。
流程完成后,主推理可执行文件位于以下位置。
在 Windows:
build/bin/asr_infer.exe
在 Linux 与 macOS:
build/bin/asr_infer
通过查看可执行文件的命令行选项,验证其是否构建成功。
在 Windows:
./build/bin/asr_infer.exe --help
在 Linux 与 macOS:
./build/bin/asr_infer --help

4. 测试文件与流式转写
至此运行时与模型已就绪,您可以测试两种转写方式。
标准推理可执行文件会处理单个音频文件并返回完整转写;而流式服务器会常驻内存加载模型,并在生成令牌的过程中逐步显示转写。
首先,在 VibeASR.cpp 项目文件夹内下载一个简短示例录音:
curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav
该音频文件会以 recording.wav 的名称保存在当前项目目录。
转写音频文件
标准推理命令会加载音频编码器与语言模型,处理录音并输出完整转写。
在 Windows 上运行:
./build/bin/asr_infer.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy
在 Linux 与 macOS 上,使用相同命令但去掉 .exe 后缀:
./build/bin/asr_infer \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy

-t 6 选项将 6 个 CPU 线程分配给推理。您可根据处理器情况调整该数值。
--greedy 选项会在每步解码时选择最可能的令牌,以获得一致的转写结果。
在我的电脑上,14.085 秒的录音约耗时 13.7 秒处理:
RTF: 0.9726
Speed: approximately 1.03× real time
实时因子(RTF)用于比较处理时间与音频时长。
RTF 低于 1.0 表示转写速度快于音频实际播放长度。性能会因处理器、操作系统、线程数与录音长度而异。
测试逐令牌流式输出
VibeASR.cpp 还包含一个持久化的流式服务器。它会一次性加载两份模型文件并保持常驻,允许您多次提交录音而无需每次重启并重新加载模型。
其输出方式类似于大语言模型的流式输出。
无需等待完整转写结束,解码器在生成每个令牌时就会开始显示文本。
有的令牌可能代表完整词语,也可能是词语的一部分或标点,但会持续逐步显示直至转写完成。
在 Windows 上启动服务器:
./build/bin/asr_stream_server.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy
在 Linux 与 macOS 上运行:
./build/bin/asr_stream_server \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy

等待服务器完成模型加载并显示:
---READY---
输入音频文件路径并回车:
recording.wav
转写将以逐令牌形式开始输出。录音完全处理后,服务器会显示:
---END---

随后您可以在不重新加载模型的情况下继续输入其他音频文件路径。要停止服务器,输入:
exit
在需要批量转写或将 VibeASR.cpp 接入其他需要渐进式转写输出的应用时,这种常驻式工作流尤为实用。
5. 启动并测试网页界面
VibeASR.cpp 附带本地 Gradio 网页界面,可用于上传音频文件或通过麦克风直接录音。该流程在 Windows、Linux 与 macOS 上相同,但 Windows 的可执行文件以 .exe 结尾。
包括 Gradio、SoundFile 与 NumPy 在内的界面依赖,已通过 requirements.txt 安装。
首先确保虚拟环境已激活。
在 w64devkit 终端下的 Windows:
. .venv/Scripts/activate
Linux 与 macOS:
source .venv/bin/activate
在 Windows 上,用以下命令启动界面:
python demo/gradio_asr_demo.py \
--port 7860 \
--bin build/bin/asr_infer.exe \
--server-bin build/bin/asr_stream_server.exe
在 Linux 与 macOS 上,默认可执行文件路径会自动检测:
python demo/gradio_asr_demo.py --port 7860
模型路径已在各操作系统的 Gradio 脚本内配置,无需在命令中手动指定。
脚本也支持为标准推理可执行文件与流式服务器分别设置路径。
在浏览器中打开以下地址:
http://127.0.0.1:7860
浏览界面
该界面可让您:
- 选择 CPU 模型。
- 设置 CPU 线程数。
- 在在线与离线处理之间切换。
- 启用贪婪解码,或调节温度与 Top-p。
- 上传音频文件或直接用麦克风录音。
- 添加可选热词,如人名或技术术语。
- 查看转写结果、音频时长与实时因子。
这里的在线模式并不意味着音频会被发送到线上服务。
它会按块渐进式处理更长的录音,并在可用时使用 asr_stream_server。
离线模式会在处理完整个音频文件后再显示结果。

测试一段短录音
首次测试中,我直接通过麦克风录制了一句短语,并选择 离线 模式与 4 个 CPU 线程。

RTF 为 0.9584 表示模型处理每秒音频大约需要 0.96 秒。
这约等于 1.04× 实时速度,因此转写略快于录音的实际时长。
测试一段更长的录音
我还用一段约 109.7 秒的录音测试了界面。模型成功生成完整转写并报告:
RTF: 0.5305
Audio: 109.7s

这意味着模型处理每秒音频约需 0.53 秒。整段录音大约用时 58 秒 转写,速度约为 1.88× 实时。
结语
本地语音识别的实用性让我印象深刻。
即便在较老的 CPU 上,VibeASR.cpp 也能在无需 GPU、大量内存或大量存储的情况下,实现接近或快于实时的音频转写。
编译生成的可执行文件还能集成进 Python 应用、封装为 FastAPI 接口,或作为更大本地工具的转写引擎。
主要需要权衡的设置是分配给进程的 CPU 线程数。
您还需要在在线模式(逐步流式输出转写)与离线模式(处理完成后一次性返回完整结果)之间进行选择。
安装流程仍有改进空间,尤其是在 Windows、Linux 与 macOS 上。
鉴于项目仍在发展,我预计安装与预编译二进制的支持会持续改进。一旦有稳定的独立二进制可用,我能想象自己会在更多本地语音转文字项目中使用该模型。
也推荐阅读我们的 GPT 实时转写 API 教程。
FAQs
VibeASR 模型实际支持哪些语言?
VibeVoice-ASR 模型原生支持 50 多种语言。 其中包括英语、中文、法语、意大利语、韩语、葡萄牙语与越南语。 它不需要显式设置语言,并可自动处理“语码转换”(即在一句话中自然混用多种语言)。
在转写之前需要先转换我的 MP3 或视频文件吗?
如果您直接使用命令行可执行文件 asr_infer,它需要 .wav 文件(通常为 16kHz、16 位单声道)。如果您的音频为 MP3、M4A 或 FLAC 等其他格式,需先用 FFmpeg 等工具转换为 WAV,再传给 CLI。
模型能区分不同说话人或输出词级时间戳吗?
基础的 VibeVoice-ASR 架构在设计时就面向一次性生成包含“谁”(说话人分离)、“何时”(时间戳)与“内容”(文本)的结构化输出。 不过,轻量级 C++ 推理可执行文件(VibeASR.cpp)当前专注于渐进式原始文本转写。若要获取包含说话人 ID 与时间戳的完整结构化 JSON 输出,通常需要通过 Python 的 transformers 库运行该模型。