






















分析日期:2026-06-22
Voicebox 是由 Jamie Pine 开发的一款开源跨平台语音合成桌面应用,旨在为用户提供高质量的语音合成(TTS)与语音识别(STT)体验。它将前沿的 AI 语音模型(如 Qwen3-TTS、LuxTTS、Chatterbox、Kokoro 等)打包为直观的图形界面,并内置大语言模型(Qwen3)和 MCP 协议集成,支持将语音合成能力无缝接入 AI Agent 工作流。
Voicebox 的设计理念是"AI 语音工具箱",用户可以在一个应用中完成文本转语音、语音转文本、自定义声音克隆、AI Agent 语音交互等全链路语音任务。
| 项目 | 详情 |
|---|---|
| 项目名称 | Voicebox |
| 项目地址 | https://github.com/jamiepine/voicebox |
| 项目官网 | 暂无独立官网,以 GitHub 仓库为主 |
| 作者 | Jamie Pine |
| Stars | 31,000+ |
| 当前版本 | v0.5.0 |
| 开源协议 | MIT License |
| 主要语言 | TypeScript(前端)、Python(后端)、Rust(Tauri 层) |
Voicebox 提供直观的桌面 GUI 界面,主要功能视图包括:
Voicebox 集成了 7 种主流 TTS 引擎,用户可按需切换:
| 引擎 | 特点 |
|---|---|
| Qwen3-TTS | 通义千问官方 TTS,支持多语言、情感控制,自然度极高 |
| Qwen CustomVoice | 基于 Qwen3 的声音克隆,上传少量样本即可复刻音色 |
| LuxTTS | 轻量级 TTS,推理速度快,适合实时场景 |
| Chatterbox Multilingual | 多语言 TTS,覆盖中英日韩等主流语言 |
| Chatterbox Turbo | Chatterbox 加速版,延迟更低 |
| TADA | 情感表现力丰富的 TTS 模型 |
| Kokoro | 开源社区热门 TTS,82M 参数,支持多语言 |
Voicebox 是首批将 MCP(Model Context Protocol) 集成到语音工具的桌面应用。通过 MCP,Voicebox 的 TTS 和 STT 能力可以作为工具被 Claude Desktop、Trae 等 AI 客户端调用,让 AI Agent 具备"说话"和"听"的能力。
基于 Tauri v2 构建,支持 Windows、macOS、Linux 三大平台,安装包体积小,内存占用低,原生性能体验。
MIT 协议开源,所有功能免费使用,无云端依赖,数据本地处理,隐私安全有保障。
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | x86_64 或 ARM64 | 支持 AVX2 指令集的 CPU |
| 内存 | 8GB RAM | 16GB+ RAM |
| GPU | 无强制要求(CPU 推理) | NVIDIA GPU(CUDA 12.1+)用于加速 |
| 磁盘空间 | 5GB(应用 + 基础模型) | 20GB+(含多个 TTS 模型) |
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| Python | 3.10+ | 后端 FastAPI 服务运行环境 |
| Node.js | 18+ | 前端构建工具链 |
| Rust | 1.75+ | Tauri 编译环境 |
| CUDA | 12.1+(可选) | GPU 加速推理 |
| FFmpeg | 最新版 | 音频处理 |
| 平台 | 支持状态 |
|---|---|
| Windows | 10/11 x64 |
| macOS | 12+ (Intel + Apple Silicon) |
| Linux | Ubuntu 20.04+, Debian 12+ |
首次运行时会自动从 Hugging Face 下载所需的 TTS/STT/LLM 模型文件,下载量约 2-15GB(取决于启用的引擎数量)。
voicebox/
├── src/ # 前端 React 源码 (TypeScript)
│ ├── components/ # UI 组件
│ │ ├── TTS/ # TTS 合成面板
│ │ ├── STT/ # STT 转录面板
│ │ ├── LLM/ # LLM 对话面板
│ │ ├── VoiceCloning/ # 声音克隆管理
│ │ └── Settings/ # 设置面板
│ ├── hooks/ # React Hooks
│ │ ├── useTTS.ts # TTS 调用 Hook
│ │ ├── useSTT.ts # STT 调用 Hook
│ │ └── useBackend.ts # 后端通信 Hook
│ ├── lib/ # 工具库
│ │ ├── api.ts # REST API 封装
│ │ └── audio.ts # 音频播放/录制工具
│ ├── stores/ # 状态管理
│ │ └── voiceStore.ts # 语音相关全局状态
│ └── App.tsx # 应用入口
├── src-tauri/ # Tauri 层 (Rust)
│ ├── src/
│ │ ├── main.rs # Tauri 入口
│ │ ├── commands.rs # Tauri Commands(IPC 桥接)
│ │ └── mcp_server.rs # MCP 服务器实现
│ └── Cargo.toml
├── backend/ # Python 后端
│ ├── main.py # FastAPI 入口
│ ├── engines/ # TTS 引擎适配层
│ │ ├── base.py # 引擎抽象基类
│ │ ├── qwen3_tts.py # Qwen3-TTS 引擎
│ │ ├── qwen_custom_voice.py # Qwen 自定义声音
│ │ ├── luxtts.py # LuxTTS 引擎
│ │ ├── chatterbox.py # Chatterbox 引擎
│ │ ├── tada.py # TADA 引擎
│ │ └── kokoro.py # Kokoro 引擎
│ ├── stt/ # STT 模块
│ │ └── whisper.py # Whisper 语音识别
│ ├── llm/ # LLM 模块
│ │ └── qwen3.py # Qwen3 对话模型
│ ├── voice_cloning/ # 声音克隆模块
│ │ └── custom_voice.py # 音色训练与推理
│ └── requirements.txt
├── package.json
├── tsconfig.json
└── README.md
前端采用 React 18 + TypeScript 构建,使用 Tauri 提供的原生窗口和系统 API 调用能力。核心组件包括:
Tauri 层负责桌面应用的原生功能:
Python 后端是 Voicebox 的核心推理层:
engines/):统一的引擎接口,每个 TTS 引擎实现 generate(text, voice, **params) -> audio 方法stt/):Whisper 模型加载与推理llm/):Qwen3 模型加载与对话生成voice_cloning/):音频特征提取、音色嵌入、定制化合成Voicebox 的 MCP 服务器实现了以下工具:
voicebox_tts:文本转语音,参数包括 text、engine、voice、speed、pitchvoicebox_stt:语音转文本,参数包括 audio_file_pathvoicebox_list_voices:列出可用的音色列表voicebox_list_engines:列出可用的 TTS 引擎# backend/engines/base.py
from abc import ABC, abstractmethod
from typing import Optional
import numpy as np
class TTSEngine(ABC):
"""所有 TTS 引擎的抽象基类"""
@abstractmethod
def load_model(self) -> None:
"""加载模型到内存"""
pass
@abstractmethod
def generate(
self,
text: str,
voice: str = "default",
speed: float = 1.0,
pitch: float = 0.0,
emotion: Optional[str] = None
) -> np.ndarray:
"""生成语音音频数据
Returns:
numpy array of audio samples (sample_rate,)
"""
pass
@abstractmethod
def list_voices(self) -> list[str]:
"""返回可用的音色列表"""
pass
@property
@abstractmethod
def sample_rate(self) -> int:
"""返回引擎的输出采样率"""
pass
# backend/main.py (片段)
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from engines import get_engine
app = FastAPI(title="Voicebox Backend")
class TTSRequest(BaseModel):
text: str
engine: str = "qwen3_tts"
voice: str = "default"
speed: float = 1.0
pitch: float = 0.0
emotion: str | None = None
@app.post("/api/tts/generate")
async def generate_tts(req: TTSRequest):
engine = get_engine(req.engine)
if engine is None:
raise HTTPException(404, f"Engine '{req.engine}' not found")
audio = engine.generate(
text=req.text,
voice=req.voice,
speed=req.speed,
pitch=req.pitch,
emotion=req.emotion
)
return {"audio": audio.tolist(), "sample_rate": engine.sample_rate}
@app.get("/api/engines")
async def list_engines():
return {"engines": list(ENGINE_REGISTRY.keys())}
@app.get("/api/voices/{engine}")
async def list_voices(engine: str):
eng = get_engine(engine)
if eng is None:
raise HTTPException(404)
return {"voices": eng.list_voices()}
// src/hooks/useTTS.ts
import { useState, useCallback } from 'react';
import { api } from '@/lib/api';
interface TTSParams {
text: string;
engine: string;
voice: string;
speed: number;
pitch: number;
emotion?: string;
}
export function useTTS() {
const [isGenerating, setIsGenerating] = useState(false);
const [audioUrl, setAudioUrl] = useState<string | null>(null);
const generate = useCallback(async (params: TTSParams) => {
setIsGenerating(true);
try {
const response = await api.post('/api/tts/generate', params);
const { audio, sample_rate } = response.data;
// 将音频数据转换为 WAV Blob
const audioBuffer = new Float32Array(audio);
const wavBlob = encodeWAV(audioBuffer, sample_rate);
const url = URL.createObjectURL(wavBlob);
setAudioUrl(url);
return url;
} finally {
setIsGenerating(false);
}
}, []);
return { generate, isGenerating, audioUrl };
}
// src-tauri/src/mcp_server.rs (片段)
use mcpr::schema::{Tool, ToolInputSchema};
pub fn create_tts_tool() -> Tool {
Tool {
name: "voicebox_tts".to_string(),
description: "Convert text to speech using Voicebox".to_string(),
input_schema: ToolInputSchema {
properties: serde_json::json!({
"text": {
"type": "string",
"description": "The text to convert to speech"
},
"engine": {
"type": "string",
"enum": ["qwen3_tts", "luxtts", "chatterbox", "kokoro"],
"description": "TTS engine to use"
},
"voice": {
"type": "string",
"description": "Voice name to use"
}
}),
required: vec!["text".to_string()],
},
}
}
| 场景 | 说明 |
|---|---|
| 内容创作 | 为视频、播客、有声书生成高质量 AI 配音 |
| 无障碍辅助 | 为视障用户提供文字转语音阅读服务 |
| AI Agent 语音交互 | 通过 MCP 让 AI Agent 具备语音输出和输入能力 |
| 语言学习 | 多语言 TTS 辅助发音练习 |
| 个人语音助手 | 结合 LLM 构建本地语音助手 |
| 声音定制 | 声音克隆用于个性化语音应用 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。