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开源驱动。