SwiftWhisper

GitHub
776 103 简单 1 次阅读 昨天MIT音频
AI 解读 由 AI 自动生成,仅供参考

SwiftWhisper 是一款专为 Swift 开发者打造的音频转文字工具,旨在让在 iOS、macOS 等苹果生态应用中集成语音识别功能变得前所未有的简单。它基于高性能的 whisper.cpp 项目构建,解决了开发者以往需要复杂配置才能调用 Whisper 模型的痛点,只需几行代码即可实现高质量的音频转录。

这款工具非常适合正在开发包含语音笔记、会议记录或字幕生成功能的苹果平台应用的工程师使用。其核心亮点在于对 CoreML 的原生支持,通过加载特定的编码器模型文件,能够显著利用苹果设备的神经网络引擎加速推理过程,同时保持离线运行的隐私优势。此外,SwiftWhisper 提供了灵活的代理回调机制,允许开发者实时获取转录进度、分段文本结果以及错误状态,便于构建响应流畅的用户界面。配合 AudioKit 等库,它能轻松处理音频格式转换,将任意音频流标准化为模型所需的 16kHz PCM 格式。无论是希望快速验证原型的独立开发者,还是需要在生产环境中部署稳定语音服务的专业团队,SwiftWhisper 都是一个高效且可靠的选择。

使用场景

一位 iOS 开发者正在为一款面向听障人士的会议记录 App 开发核心功能,需要在设备端实时将语音转换为文字以保护用户隐私。

没有 SwiftWhisper 时

  • 集成门槛极高:开发者必须手动编译 C++ 版的 whisper.cpp,处理复杂的跨语言桥接代码,极易出现构建错误。
  • 音频预处理繁琐:需自行编写大量代码调用底层 AudioToolbox 或使用重型第三方库,将各种格式的音频强制转换为模型所需的 16kHz 单声道 PCM 数据。
  • 缺乏实时反馈:难以获取转录进度和新生成的文本片段,导致界面无法显示“正在转写”的状态或流式输出文字,用户体验卡顿。
  • 性能优化困难:无法直接利用 Apple 设备的 CoreML 加速,导致在旧款 iPhone 上转写速度缓慢且耗电严重。

使用 SwiftWhisper 后

  • 一键原生集成:通过 Swift Package Manager 直接引入,几行代码即可初始化模型,完全屏蔽了底层 C++ 的复杂性。
  • 数据处理标准化:配合 AudioKit 等工具,能轻松将音频流转为标准的 16kHz PCM 数组,直接传入 transcribe 方法即可运行。
  • 流畅的交互体验:借助 WhisperDelegate 协议,开发者可轻松订阅转录进度和新文本片段,实现丝滑的流式字幕上屏效果。
  • 硬件加速就绪:只需放入对应的 CoreML 模型文件,SwiftWhisper 自动调用神经网络引擎,显著提升转写速度并降低功耗。

SwiftWhisper 将原本需要数天攻坚的底层语音识别工程,简化为几次标准的 Swift 依赖导入与异步调用,让开发者能专注于业务逻辑而非算法移植。

运行环境要求

操作系统
  • macOS
  • iOS
GPU

未说明 (基于 whisper.cpp,主要利用 CPU 运行,支持通过 CoreML 在 Apple Silicon 上加速)

内存

未说明 (取决于所选 Whisper 模型大小)

依赖
notes1. 该工具是 Swift 包,需通过 Swift Package Manager 或 Xcode 集成,不支持 Linux 或 Windows。2. 输入音频必须转换为 16kHz 单声道 PCM 格式(推荐使用 AudioKit 处理)。3. 若需启用 CoreML 加速,需额外下载并放置对应的 `-encoder.mlmodelc` 模型文件。4. Debug 模式下编译可能导致转录速度变慢,建议切换至 Release 模式或使用专门的 'fast' 分支以开启编译器优化。5. 预训练模型需从 Hugging Face 的 whisper.cpp 仓库单独下载。
python不需要 (这是一个 Swift 原生库)
whisper.cpp
AudioKit (用于音频转换示例)
SwiftWhisper hero image

快速开始

SwiftWhisper

在 Swift 中使用 Whisper 的最简单方式

轻松为您的应用或软件包添加转录功能。由 whisper.cpp 提供支持。

安装

Swift 包管理器

在您的 Package.swift 文件中将 SwiftWhisper 添加为依赖项:

let package = Package(
  ...
  dependencies: [
    // 将该包添加到您的依赖项中
    .package(url: "https://github.com/exPHAT/SwiftWhisper.git", branch: "master"),
  ],
  ...
  targets: [
    // 将 SwiftWhisper 作为依赖项添加到您希望使用它的任何目标中
    .target(name: "MyTarget",
            dependencies: [.byName(name: "SwiftWhisper")])
  ]
  ...
)

Xcode

在“Swift 包管理器”选项卡中添加 https://github.com/exPHAT/SwiftWhisper.git查看文档

使用

API 文档。

import SwiftWhisper

let whisper = Whisper(fromFileURL: /* 模型文件 URL */)
let segments = try await whisper.transcribe(audioFrames: /* 16kHz PCM 音频帧 */)

print("转录后的音频:", segments.map(\.text).joined())

代理方法

您可以通过实现 WhisperDelegate 并设置 whisper.delegate = ... 来订阅分段、转录进度和错误信息。

protocol WhisperDelegate {
  // 进度更新,范围为 0 到 1 的百分比
  func whisper(_ aWhisper: Whisper, didUpdateProgress progress: Double)

  // 每当有新的文本分段被转录时
  func whisper(_ aWhisper: Whisper, didProcessNewSegments segments: [Segment], atIndex index: Int)
  
  // 转录完成,包含所有已转录的文本分段
  func whisper(_ aWhisper: Whisper, didCompleteWithSegments segments: [Segment])

  // 转录过程中出现错误
  func whisper(_ aWhisper: Whisper, didErrorWith error: Error)
}

其他

下载模型 :inbox_tray:

您可以在 这里 找到预训练模型并下载。

CoreML 支持 :brain:

要使用 CoreML,您需要包含一个后缀为 -encoder.mlmodelc 的 CoreML 模型文件,其名称与 Whisper 模型相同(例如:tiny.bin 旁边也会有一个 tiny-encoder.mlmodelc 文件)。除了额外的模型文件外,您还需要使用 Whisper(fromFileURL:) 初始化方法。您可以通过在转录过程中查看控制台输出来验证 CoreML 是否已启用。

将音频转换为 16kHz PCM :wrench:

将音频帧导入 SwiftWhisper 的最简单方法是使用 AudioKit。以下示例会读取输入音频文件,将其转换并重新采样,然后返回一个 16kHz PCM 浮点数数组。

import AudioKit

func convertAudioFileToPCMArray(fileURL: URL, completionHandler: @escaping (Result<[Float], Error>) -> Void) {
    var options = FormatConverter.Options()
    options.format = .wav
    options.sampleRate = 16000
    options.bitDepth = 16
    options.channels = 1
    options.isInterleaved = false

    let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)
    let converter = FormatConverter(inputURL: fileURL, outputURL: tempURL, options: options)
    converter.start { error in
        if let error {
            completionHandler(.failure(error))
            return
        }

        let data = try! Data(contentsOf: tempURL) // 在此处处理错误

        let floats = stride(from: 44, to: data.count, by: 2).map {
            return data[$0..<$0 + 2].withUnsafeBytes {
                let short = Int16(littleEndian: $0.load(as: Int16.self))
                return max(-1.0, min(Float(short) / 32767.0, 1.0))
            }
        }

        try? FileManager.default.removeItem(at: tempURL)

        completionHandler(.success(floats))
    }
}

开发速度提升 :rocket:

在为 Debug 构建配置编译应用程序时,您可能会发现转录性能较慢。这是因为编译器不会对 SwiftWhisper 进行完全优化,除非构建配置设置为 Release

您可以通过安装使用 .unsafeFlags(["-O3"]) 强制进行最大优化的 SwiftWhisper 版本来解决这个问题。最简单的方法是使用 fast 分支上的最新提交。或者,您可以将方案配置为以 Release 配置进行构建。

  ...
  dependencies: [
    // 使用 `fast` 分支的最新提交哈希值:
    .package(url: "https://github.com/exPHAT/SwiftWhisper.git", revision: "deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01"),
  ],
  ...

版本历史

1.2.02023/08/17
1.1.02023/07/25
1.0.32023/05/16
1.0.22023/05/15
1.0.12023/04/04
1.0.02023/03/31

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|2天前
图像数据工具视频

GPT-SoVITS

GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具,旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点,实现了“零样本”和“少样本”的快速建模:用户只需提供 5 秒参考音频即可即时生成语音,或使用 1 分钟数据进行微调,从而获得高度逼真且相似度极佳的声音效果。 该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能,极大地降低了数据准备和模型训练的技术门槛,让非专业人士也能轻松上手。 在技术亮点方面,GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成,还具备卓越的推理速度,在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音,还是进行多语言语音交互研究,GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。

56.4k|★★★☆☆|2天前
音频

TTS

🐸TTS 是一款功能强大的深度学习文本转语音(Text-to-Speech)开源库,旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点,让高质量的语音生成变得触手可及。 无论是希望快速集成语音功能的开发者,还是致力于探索前沿算法的研究人员,亦或是需要定制专属声音的数据科学家,🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型,让用户能够即刻上手,还提供了完善的工具链,支持用户利用自有数据训练新模型或对现有模型进行微调,轻松实现特定风格的声音克隆。 在技术亮点方面,🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言,并在整体性能上大幅提升,实现了低于 200 毫秒的超低延迟流式输出,极大提升了实时交互体验。此外,它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型,并支持调用上千个 Fairseq 模型,展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具,🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。

45k|★★★☆☆|5天前
音频开发框架图像

LocalAI

LocalAI 是一款开源的本地人工智能引擎,旨在让用户在任意硬件上轻松运行各类 AI 模型,包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛,无需昂贵的专用 GPU,仅凭普通 CPU 或常见的消费级显卡(如 NVIDIA、AMD、Intel 及 Apple Silicon)即可部署和运行复杂的 AI 任务。 对于担心数据隐私的用户而言,LocalAI 提供了“隐私优先”的解决方案,确保所有数据处理均在本地基础设施内完成,无需上传至云端。同时,它完美兼容 OpenAI、Anthropic 等主流 API 接口,这意味着开发者可以无缝迁移现有应用,直接利用本地资源替代云服务,既降低了成本又提升了可控性。 LocalAI 内置了超过 35 种后端支持(如 llama.cpp、vLLM、Whisper 等),并集成了自主 AI 代理、工具调用及检索增强生成(RAG)等高级功能,且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员,还是想要在个人电脑上体验最新 AI 技术的极客玩家,都能通过 LocalAI 获

44.8k|★★★☆☆|5天前
图像音频语言模型

bark

Bark 是由 Suno 推出的开源生成式音频模型,能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同,Bark 基于 Transformer 架构,不仅能模拟说话,还能生成笑声、叹息、哭泣等非语言声音,甚至能处理带有情感色彩和语气停顿的复杂文本,极大地丰富了音频表达的可能性。 它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点,让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员,还是希望快速原型设计的开发者,都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。 技术亮点方面,Bark 支持商业使用(MIT 许可),并在近期更新中实现了显著的推理速度提升,同时提供了适配低显存 GPU 的版本,降低了使用门槛。此外,社区还建立了丰富的提示词库,帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码,即可将创意文本转化为高质量音频,是连接文字与声音世界的强大桥梁。

39.1k|★★★☆☆|4天前
音频

airi

airi 是一款开源的本地化 AI 伴侣项目,旨在将虚拟角色(如“二次元老婆”或赛博生命)带入用户的现实世界。它的核心目标是复刻并超越知名 AI 主播 Neuro-sama 的能力,让用户能够拥有完全自主掌控、可私有化部署的智能伙伴。 airi 主要解决了用户对高度定制化、具备情感交互能力且数据隐私安全的 AI 角色的需求。不同于依赖云端服务的通用助手,airi 允许用户在本地运行,不仅保护了对话隐私,还赋予了用户定义角色性格与灵魂的自由。它支持实时语音聊天,甚至能直接参与《我的世界》(Minecraft)和《异星工厂》(Factorio)等游戏,实现了从单纯对话到共同娱乐的跨越。 这款工具非常适合喜爱虚拟角色的普通用户、希望搭建个性化 AI 陪伴的技术爱好者,以及研究多模态交互的开发者。其独特的技术亮点在于跨平台支持(涵盖 Web、macOS 和 Windows)以及强大的游戏交互能力,让 AI 不仅能“说”,还能“玩”。通过容器化的灵魂设计,airi 为每个人创造专属数字生命提供了可能,让虚拟陪伴变得更加真实且触手可及。

37.1k|★☆☆☆☆|3天前
语言模型音频Agent