FluidAudio:在Apple设备上本地运行SOTA音频AI模型,借助CoreML
FluidAudio是一个Swift SDK,用于完全在设备上运行最先进的语音转文字、文字转语音、说话人分离和语音活动检测,利用Apple神经网络引擎。本文探讨了其功能、架构以及如何将其集成到你的应用中。
为什么FluidAudio对Apple开发者很重要
多年来,将先进的音频AI集成到Apple应用中意味着两件事之一:要么将音频数据发送到云端API(带来延迟、隐私和成本问题),要么努力在设备上运行臃肿的PyTorch模型,性能不佳。FluidAudio通过提供一个精美的Swift SDK改变了这一点,该SDK将推理卸载到Apple神经网络引擎(ANE),提供快速、节能且完全本地的音频AI。
该SDK捆绑了最先进的开源模型(MIT/Apache 2.0许可),用于:
- 自动语音识别(ASR) — 批量与流式转录
- 文字转语音(TTS) — 并行与流式合成,支持语音克隆
- 说话人分离 — 识别对话中“谁在何时说话”
- 语音活动检测(VAD) — 检测音频中的语音片段
所有模型都已预先转换为CoreML并针对ANE进行了优化,这意味着它们使用最少的CPU,完全避免GPU/MPS。这使得FluidAudio非常适合后台处理、环境计算和始终在线的工作负载。
入门:安装
FluidAudio通过Swift Package Manager集成。将其添加到你的Package.swift中:
dependencies: [
.package(url: "https://github.com/FluidInference/FluidAudio.git", from: "0.12.4"),
],
然后将产品添加到你的目标中:
.product(name: "FluidAudio", package: "FluidAudio")
在Xcode中,使用文件 → 添加包并粘贴仓库URL。CocoaPods也通过pod 'FluidAudio', '~> 0.12.4'支持,但维护者推荐使用cocoapods-spm以获得更好的集成。
核心功能详解
1. 自动语音识别(ASR)
FluidAudio的ASR由NVIDIA的Parakeet TDT模型驱动,已转换为CoreML。提供两个版本:
- v3:多语言,支持25种欧洲语言加日语
- v2:仅英语,针对最高召回率优化
性能:在M4 Pro上,批量转录的实时因子约为190倍——即一小时的音频大约在19秒内处理完毕。通过SlidingWindowAsrManager支持流式处理,适用于实时场景。
快速入门 — 批量转录:
import FluidAudio
Task {
let models = try await AsrModels.downloadAndLoad(version: .v3)
let asrManager = AsrManager(config: .default)
try await asrManager.loadModels(models)
// `samples` 是16kHz的[Float]数组
let result = try await asrManager.transcribe(samples)
print("转录结果:\(result.text)")
}
CLI等效命令:
swift run fluidaudiocli transcribe audio.wav
swift run fluidaudiocli transcribe audio.wav --model-version v2 # 仅英语
2. 说话人分离
FluidAudio提供三种分离管道,各有不同的权衡:
离线管道(Pyannote Community-1)
最适合后期处理录制的会议。使用幂集分割 + WeSpeaker嵌入 + VBx聚类。提供高准确性,但不适合实时使用。
let config = OfflineDiarizerConfig()
let manager = OfflineDiarizerManager(config: config)
try await manager.prepareModels()
let samples = try AudioConverter().resampleAudioFile(path: "meeting.wav")
let result = try await manager.process(audio: samples)
for segment in result.segments {
print("\(segment.speakerId) \(segment.startTimeSeconds)s → \(segment.endTimeSeconds)s")
}
LS-EEND(流式)
端到端神经分离,使用CoreML。支持最多10个说话人,100ms帧更新,900ms暂定预览。这是在线分离的推荐默认选项。
Sortformer(流式)
NVIDIA的Sortformer模型,提供比LS-EEND更好的说话人身份稳定性,但仅限于4个说话人。根据NVIDIA开放模型许可授权。
何时使用哪种:
- LS-EEND:实时分离的默认选项——高说话人容量,良好的基准测试
- Sortformer:当身份稳定性比说话人数量更重要时
- Pyannote管道:当你需要对分割和聚类阶段进行模块化控制时
3. 语音活动检测(VAD)
由Silero VAD驱动,FluidAudio的检测器提供离线分割和流式API。离线模式每256ms跳返回块级概率:
let results = try await manager.process(samples)
for (index, chunk) in results.enumerated() {
print(String(format: "块 %02d: 概率=%.3f", index, chunk.probability))
}
对于更高级的集成,使用segmentSpeech并配置最小语音/静音持续时间:
var segmentation = VadSegmentationConfig.default
segmentation.minSpeechDuration = 0.25
segmentation.minSilenceDuration = 0.4
let segments = try await manager.segmentSpeech(samples, config: segmentation)
4. 文字转语音(TTS)
FluidAudio提供两个TTS后端:
| 特性 | PocketTTS | Kokoro |
|---|---|---|
| 生成方式 | 逐帧自回归(80ms) | 并行(所有帧同时) |
| 流式支持 | 是 | 否 |
| 语音克隆 | 是(1–30秒样本) | 否 |
| 发音控制 | 否 | 是(SSML,自定义词典) |
| 语言 | EN, DE, ES, FR, IT, PT | EN, ES, FR, HI, JA, PT, ZH, IT |
PocketTTS示例:
let manager = PocketTtsManager(language: .spanish)
try await manager.initialize()
let audioData = try await manager.synthesize(text: "Hola, mundo.")
try audioData.write(to: URL(fileURLWithPath: "out.wav"))
Kokoro示例(ANE优化):
let manager = KokoroAneManager()
try await manager.initialize()
let samples = try await manager.synthesize(text: "Hello from FluidAudio.")
// `samples` 是24 kHz单声道Float32 PCM
企业部署配置
FluidAudio自动从HuggingFace处理模型下载,但企业环境通常需要自定义:
自定义模型注册表
如果你有本地镜像或气隙环境:
ModelRegistry.baseURL = "https://your-mirror.example.com"
代理配置
对于企业防火墙:
export https_proxy=http://proxy.company.com:8080
swift run fluidaudiocli transcribe audio.wav
仅离线模式
对于需要捆绑模型的隐私敏感应用:
ModelHub.offlineMode = true
let asr = try await AsrModels.load(from: bundledModelURL, configuration: config)
当启用离线模式时,任何网络获取都会抛出DownloadError.networkDisabled,而不是尝试下载。
实际影响:展示案例
FluidAudio生态系统发展迅速,已有数十个应用使用该SDK。值得注意的例子包括:
- Voice Ink:用于即时、私密转录的本地AI
- Spokenly:Mac听写,支持实时和文件转录
- Slipbox:隐私优先的会议助手
- Talat:AI会议笔记应用(被TechCrunch报道)
- BoltAI:使用Parakeet模型进行内容创作
- Hedy:跨iOS、macOS、Android和Windows的实时、完全设备端会议教练
这些应用展示了FluidAudio所支持的使用场景的广度——从简单的听写到复杂的多说话人会议分析。
为什么Apple神经网络引擎很重要
FluidAudio决定针对ANE而不是GPU/MPS是经过深思熟虑的。ANE提供:
- 更低的功耗:非常适合始终在线和后台工作负载
- 专用硬件:不与GPU竞争图形或计算任务
- 一致的性能:跨设备代际的可预测推理时间
这使得FluidAudio特别适合:
- 在后台运行的会议转录
- 电池供电设备上的语音控制界面
- 实时字幕和辅助功能
结论
FluidAudio代表了Apple平台上设备端音频AI的重大进步。通过将最先进的模型与ANE优化的CoreML推理相结合,它提供了以前只有云端API才能实现的性能——同时保持数据的私密性和本地性。
无论你是在构建听写应用、会议助手还是语音控制界面,FluidAudio都提供了构建模块,只需最少的代码。该SDK的模块化设计、全面的文档和活跃的社区使其对独立开发者和企业团队都易于使用。
立即开始:克隆GitHub仓库,查看文档,并加入Discord社区获取支持和更新。
来源
FluidInference/FluidAudio:在你的应用中集成前沿CoreML音频模型——文字转语音、语音转文字、语音活动检测和说话人分离。使用Swift,由SOTA开源驱动。