[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-exPHAT--SwiftWhisper":3,"tool-exPHAT--SwiftWhisper":65},[4,23,32,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":22},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85013,2,"2026-04-06T11:09:19",[13,14,15,16,17,18,19,20,21],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架","音频","ready",{"id":24,"name":25,"github_repo":26,"description_zh":27,"stars":28,"difficulty_score":29,"last_commit_at":30,"category_tags":31,"status":22},4128,"GPT-SoVITS","RVC-Boss\u002FGPT-SoVITS","GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具，旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点，实现了“零样本”和“少样本”的快速建模：用户只需提供 5 秒参考音频即可即时生成语音，或使用 1 分钟数据进行微调，从而获得高度逼真且相似度极佳的声音效果。\n\n该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能，极大地降低了数据准备和模型训练的技术门槛，让非专业人士也能轻松上手。\n\n在技术亮点方面，GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成，还具备卓越的推理速度，在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音，还是进行多语言语音交互研究，GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。",56375,3,"2026-04-05T22:15:46",[21],{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":29,"last_commit_at":38,"category_tags":39,"status":22},2863,"TTS","coqui-ai\u002FTTS","🐸TTS 是一款功能强大的深度学习文本转语音（Text-to-Speech）开源库，旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点，让高质量的语音生成变得触手可及。\n\n无论是希望快速集成语音功能的开发者，还是致力于探索前沿算法的研究人员，亦或是需要定制专属声音的数据科学家，🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型，让用户能够即刻上手，还提供了完善的工具链，支持用户利用自有数据训练新模型或对现有模型进行微调，轻松实现特定风格的声音克隆。\n\n在技术亮点方面，🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言，并在整体性能上大幅提升，实现了低于 200 毫秒的超低延迟流式输出，极大提升了实时交互体验。此外，它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型，并支持调用上千个 Fairseq 模型，展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具，🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。",44971,"2026-04-03T14:47:02",[21,20,13],{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":29,"last_commit_at":46,"category_tags":47,"status":22},2375,"LocalAI","mudler\u002FLocalAI","LocalAI 是一款开源的本地人工智能引擎，旨在让用户在任意硬件上轻松运行各类 AI 模型，包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛，无需昂贵的专用 GPU，仅凭普通 CPU 或常见的消费级显卡（如 NVIDIA、AMD、Intel 及 Apple Silicon）即可部署和运行复杂的 AI 任务。\n\n对于担心数据隐私的用户而言，LocalAI 提供了“隐私优先”的解决方案，确保所有数据处理均在本地基础设施内完成，无需上传至云端。同时，它完美兼容 OpenAI、Anthropic 等主流 API 接口，这意味着开发者可以无缝迁移现有应用，直接利用本地资源替代云服务，既降低了成本又提升了可控性。\n\nLocalAI 内置了超过 35 种后端支持（如 llama.cpp、vLLM、Whisper 等），并集成了自主 AI 代理、工具调用及检索增强生成（RAG）等高级功能，且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员，还是想要在个人电脑上体验最新 AI 技术的极客玩家，都能通过 LocalAI 获",44782,"2026-04-02T22:14:26",[13,21,19,17,20,14,16],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":29,"last_commit_at":54,"category_tags":55,"status":22},3108,"bark","suno-ai\u002Fbark","Bark 是由 Suno 推出的开源生成式音频模型，能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同，Bark 基于 Transformer 架构，不仅能模拟说话，还能生成笑声、叹息、哭泣等非语言声音，甚至能处理带有情感色彩和语气停顿的复杂文本，极大地丰富了音频表达的可能性。\n\n它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点，让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员，还是希望快速原型设计的开发者，都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。\n\n技术亮点方面，Bark 支持商业使用（MIT 许可），并在近期更新中实现了显著的推理速度提升，同时提供了适配低显存 GPU 的版本，降低了使用门槛。此外，社区还建立了丰富的提示词库，帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码，即可将创意文本转化为高质量音频，是连接文字与声音世界的强大桥梁。",39067,"2026-04-04T03:33:35",[21],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":62,"last_commit_at":63,"category_tags":64,"status":22},3788,"airi","moeru-ai\u002Fairi","airi 是一款开源的本地化 AI 伴侣项目，旨在将虚拟角色（如“二次元老婆”或赛博生命）带入用户的现实世界。它的核心目标是复刻并超越知名 AI 主播 Neuro-sama 的能力，让用户能够拥有完全自主掌控、可私有化部署的智能伙伴。\n\nairi 主要解决了用户对高度定制化、具备情感交互能力且数据隐私安全的 AI 角色的需求。不同于依赖云端服务的通用助手，airi 允许用户在本地运行，不仅保护了对话隐私，还赋予了用户定义角色性格与灵魂的自由。它支持实时语音聊天，甚至能直接参与《我的世界》（Minecraft）和《异星工厂》（Factorio）等游戏，实现了从单纯对话到共同娱乐的跨越。\n\n这款工具非常适合喜爱虚拟角色的普通用户、希望搭建个性化 AI 陪伴的技术爱好者，以及研究多模态交互的开发者。其独特的技术亮点在于跨平台支持（涵盖 Web、macOS 和 Windows）以及强大的游戏交互能力，让 AI 不仅能“说”，还能“玩”。通过容器化的灵魂设计，airi 为每个人创造专属数字生命提供了可能，让虚拟陪伴变得更加真实且触手可及。",37086,1,"2026-04-05T10:54:25",[19,21,17],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":81,"owner_email":79,"owner_twitter":82,"owner_website":83,"owner_url":84,"languages":85,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":10,"env_os":94,"env_gpu":95,"env_ram":96,"env_deps":97,"category_tags":103,"github_topics":104,"view_count":10,"oss_zip_url":79,"oss_zip_packed_at":79,"status":22,"created_at":114,"updated_at":115,"faqs":116,"releases":152},5461,"exPHAT\u002FSwiftWhisper","SwiftWhisper","🎤 The easiest way to transcribe audio in Swift","SwiftWhisper 是一款专为 Swift 开发者打造的音频转文字工具，旨在让在 iOS、macOS 等苹果生态应用中集成语音识别功能变得前所未有的简单。它基于高性能的 whisper.cpp 项目构建，解决了开发者以往需要复杂配置才能调用 Whisper 模型的痛点，只需几行代码即可实现高质量的音频转录。\n\n这款工具非常适合正在开发包含语音笔记、会议记录或字幕生成功能的苹果平台应用的工程师使用。其核心亮点在于对 CoreML 的原生支持，通过加载特定的编码器模型文件，能够显著利用苹果设备的神经网络引擎加速推理过程，同时保持离线运行的隐私优势。此外，SwiftWhisper 提供了灵活的代理回调机制，允许开发者实时获取转录进度、分段文本结果以及错误状态，便于构建响应流畅的用户界面。配合 AudioKit 等库，它能轻松处理音频格式转换，将任意音频流标准化为模型所需的 16kHz PCM 格式。无论是希望快速验证原型的独立开发者，还是需要在生产环境中部署稳定语音服务的专业团队，SwiftWhisper 都是一个高效且可靠的选择。","# SwiftWhisper\n\n> The easiest way to use Whisper in Swift\n\nEasily add transcription to your app or package. Powered by [whisper.cpp](https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fwhisper.cpp).\n\n[![](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FexPHAT%2FSwiftWhisper%2Fbadge%3Ftype%3Dswift-versions)](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper)\n[![](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FexPHAT%2FSwiftWhisper%2Fbadge%3Ftype%3Dplatforms)](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper)\n\n## Install\n\n\n#### Swift Package Manager\n\nAdd SwiftWhisper as a dependency in your `Package.swift` file:\n\n```swift\nlet package = Package(\n  ...\n  dependencies: [\n    \u002F\u002F Add the package to your dependencies\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", branch: \"master\"),\n  ],\n  ...\n  targets: [\n    \u002F\u002F Add SwiftWhisper as a dependency on any target you want to use it in\n    .target(name: \"MyTarget\",\n            dependencies: [.byName(name: \"SwiftWhisper\")])\n  ]\n  ...\n)\n```\n\n#### Xcode\n\nAdd `https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git` in the [\"Swift Package Manager\" tab.](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fadding-package-dependencies-to-your-app)\n\n## Usage\n\n[API Documentation.](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper\u002F1.0.1\u002Fdocumentation\u002F)\n\n```swift\nimport SwiftWhisper\n\nlet whisper = Whisper(fromFileURL: \u002F* Model file URL *\u002F)\nlet segments = try await whisper.transcribe(audioFrames: \u002F* 16kHz PCM audio frames *\u002F)\n\nprint(\"Transcribed audio:\", segments.map(\\.text).joined())\n```\n\n#### Delegate methods\n\nYou can subscribe to segments, transcription progress, and errors by implementing `WhisperDelegate` and setting `whisper.delegate = ...`\n\n```swift\nprotocol WhisperDelegate {\n  \u002F\u002F Progress updates as a percentage from 0-1\n  func whisper(_ aWhisper: Whisper, didUpdateProgress progress: Double)\n\n  \u002F\u002F Any time a new segments of text have been transcribed\n  func whisper(_ aWhisper: Whisper, didProcessNewSegments segments: [Segment], atIndex index: Int)\n  \n  \u002F\u002F Finished transcribing, includes all transcribed segments of text\n  func whisper(_ aWhisper: Whisper, didCompleteWithSegments segments: [Segment])\n\n  \u002F\u002F Error with transcription\n  func whisper(_ aWhisper: Whisper, didErrorWith error: Error)\n}\n```\n\n## Misc\n\n### Downloading Models :inbox_tray:\n\nYou can find the pre-trained models [here](https:\u002F\u002Fhuggingface.co\u002Fggerganov\u002Fwhisper.cpp) for download.\n\n### CoreML Support :brain:\n\nTo use CoreML, you'll need to include a CoreML model file with the suffix `-encoder.mlmodelc` under the same name as the whisper model (Example: `tiny.bin` would also sit beside a `tiny-encoder.mlmodelc` file). In addition to the additonal model file, you will also need to use the `Whisper(fromFileURL:)` initializer. You can verify CoreML is active by checking the console output during transcription.\n\n### Converting audio to 16kHz PCM :wrench:\n\nThe easiest way to get audio frames into SwiftWhisper is to use [AudioKit](https:\u002F\u002Fgithub.com\u002FAudioKit\u002FAudioKit). The following example takes an input audio file, converts and resamples it, and returns an array of 16kHz PCM floats.\n\n```swift\nimport AudioKit\n\nfunc convertAudioFileToPCMArray(fileURL: URL, completionHandler: @escaping (Result\u003C[Float], Error>) -> Void) {\n    var options = FormatConverter.Options()\n    options.format = .wav\n    options.sampleRate = 16000\n    options.bitDepth = 16\n    options.channels = 1\n    options.isInterleaved = false\n\n    let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)\n    let converter = FormatConverter(inputURL: fileURL, outputURL: tempURL, options: options)\n    converter.start { error in\n        if let error {\n            completionHandler(.failure(error))\n            return\n        }\n\n        let data = try! Data(contentsOf: tempURL) \u002F\u002F Handle error here\n\n        let floats = stride(from: 44, to: data.count, by: 2).map {\n            return data[$0..\u003C$0 + 2].withUnsafeBytes {\n                let short = Int16(littleEndian: $0.load(as: Int16.self))\n                return max(-1.0, min(Float(short) \u002F 32767.0, 1.0))\n            }\n        }\n\n        try? FileManager.default.removeItem(at: tempURL)\n\n        completionHandler(.success(floats))\n    }\n}\n```\n\n### Development speed boost :rocket:\n\nYou may find the performance of the transcription slow when compiling your app for the `Debug` build configuration. This is because the compiler doesn't fully optimize SwiftWhisper unless the build configuration is set to `Release`.\n\nYou can get around this by installing a version of SwiftWhisper that uses `.unsafeFlags([\"-O3\"])` to force maximum optimization. The easiest way to do this is to use the latest commit on the [`fast`](https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Ftree\u002Ffast) branch. Alternatively, you can configure your scheme to build in the `Release` configuration.\n\n```swift\n  ...\n  dependencies: [\n    \u002F\u002F Using latest commit hash for `fast` branch:\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", revision: \"deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01\"),\n  ],\n  ...\n```\n","# SwiftWhisper\n\n> 在 Swift 中使用 Whisper 的最简单方式\n\n轻松为您的应用或软件包添加转录功能。由 [whisper.cpp](https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fwhisper.cpp) 提供支持。\n\n[![](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FexPHAT%2FSwiftWhisper%2Fbadge%3Ftype%3Dswift-versions)](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper)\n[![](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FexPHAT%2FSwiftWhisper%2Fbadge%3Ftype%3Dplatforms)](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper)\n\n## 安装\n\n\n#### Swift 包管理器\n\n在您的 `Package.swift` 文件中将 SwiftWhisper 添加为依赖项：\n\n```swift\nlet package = Package(\n  ...\n  dependencies: [\n    \u002F\u002F 将该包添加到您的依赖项中\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", branch: \"master\"),\n  ],\n  ...\n  targets: [\n    \u002F\u002F 将 SwiftWhisper 作为依赖项添加到您希望使用它的任何目标中\n    .target(name: \"MyTarget\",\n            dependencies: [.byName(name: \"SwiftWhisper\")])\n  ]\n  ...\n)\n```\n\n#### Xcode\n\n在“Swift 包管理器”选项卡中添加 `https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git`。[查看文档](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fadding-package-dependencies-to-your-app)\n\n## 使用\n\n[API 文档。](https:\u002F\u002Fswiftpackageindex.com\u002FexPHAT\u002FSwiftWhisper\u002F1.0.1\u002Fdocumentation\u002F)\n\n```swift\nimport SwiftWhisper\n\nlet whisper = Whisper(fromFileURL: \u002F* 模型文件 URL *\u002F)\nlet segments = try await whisper.transcribe(audioFrames: \u002F* 16kHz PCM 音频帧 *\u002F)\n\nprint(\"转录后的音频:\", segments.map(\\.text).joined())\n```\n\n#### 代理方法\n\n您可以通过实现 `WhisperDelegate` 并设置 `whisper.delegate = ...` 来订阅分段、转录进度和错误信息。\n\n```swift\nprotocol WhisperDelegate {\n  \u002F\u002F 进度更新，范围为 0 到 1 的百分比\n  func whisper(_ aWhisper: Whisper, didUpdateProgress progress: Double)\n\n  \u002F\u002F 每当有新的文本分段被转录时\n  func whisper(_ aWhisper: Whisper, didProcessNewSegments segments: [Segment], atIndex index: Int)\n  \n  \u002F\u002F 转录完成，包含所有已转录的文本分段\n  func whisper(_ aWhisper: Whisper, didCompleteWithSegments segments: [Segment])\n\n  \u002F\u002F 转录过程中出现错误\n  func whisper(_ aWhisper: Whisper, didErrorWith error: Error)\n}\n```\n\n## 其他\n\n### 下载模型 :inbox_tray:\n\n您可以在 [这里](https:\u002F\u002Fhuggingface.co\u002Fggerganov\u002Fwhisper.cpp) 找到预训练模型并下载。\n\n### CoreML 支持 :brain:\n\n要使用 CoreML，您需要包含一个后缀为 `-encoder.mlmodelc` 的 CoreML 模型文件，其名称与 Whisper 模型相同（例如：`tiny.bin` 旁边也会有一个 `tiny-encoder.mlmodelc` 文件）。除了额外的模型文件外，您还需要使用 `Whisper(fromFileURL:)` 初始化方法。您可以通过在转录过程中查看控制台输出来验证 CoreML 是否已启用。\n\n### 将音频转换为 16kHz PCM :wrench:\n\n将音频帧导入 SwiftWhisper 的最简单方法是使用 [AudioKit](https:\u002F\u002Fgithub.com\u002FAudioKit\u002FAudioKit)。以下示例会读取输入音频文件，将其转换并重新采样，然后返回一个 16kHz PCM 浮点数数组。\n\n```swift\nimport AudioKit\n\nfunc convertAudioFileToPCMArray(fileURL: URL, completionHandler: @escaping (Result\u003C[Float], Error>) -> Void) {\n    var options = FormatConverter.Options()\n    options.format = .wav\n    options.sampleRate = 16000\n    options.bitDepth = 16\n    options.channels = 1\n    options.isInterleaved = false\n\n    let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)\n    let converter = FormatConverter(inputURL: fileURL, outputURL: tempURL, options: options)\n    converter.start { error in\n        if let error {\n            completionHandler(.failure(error))\n            return\n        }\n\n        let data = try! Data(contentsOf: tempURL) \u002F\u002F 在此处处理错误\n\n        let floats = stride(from: 44, to: data.count, by: 2).map {\n            return data[$0..\u003C$0 + 2].withUnsafeBytes {\n                let short = Int16(littleEndian: $0.load(as: Int16.self))\n                return max(-1.0, min(Float(short) \u002F 32767.0, 1.0))\n            }\n        }\n\n        try? FileManager.default.removeItem(at: tempURL)\n\n        completionHandler(.success(floats))\n    }\n}\n```\n\n### 开发速度提升 :rocket:\n\n在为 `Debug` 构建配置编译应用程序时，您可能会发现转录性能较慢。这是因为编译器不会对 SwiftWhisper 进行完全优化，除非构建配置设置为 `Release`。\n\n您可以通过安装使用 `.unsafeFlags([\"-O3\"])` 强制进行最大优化的 SwiftWhisper 版本来解决这个问题。最简单的方法是使用 [`fast`](https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Ftree\u002Ffast) 分支上的最新提交。或者，您可以将方案配置为以 `Release` 配置进行构建。\n\n```swift\n  ...\n  dependencies: [\n    \u002F\u002F 使用 `fast` 分支的最新提交哈希值：\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", revision: \"deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01\"),\n  ],\n  ...\n```","# SwiftWhisper 快速上手指南\n\nSwiftWhisper 是在 Swift 项目中使用 Whisper 语音识别模型的最简便方式，基于 [whisper.cpp](https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fwhisper.cpp) 构建，可轻松为 App 添加语音转文字功能。\n\n## 环境准备\n\n- **系统要求**：macOS 12.0+、iOS 15.0+、watchOS 8.0+、tvOS 15.0+\n- **开发工具**：Xcode 14.0+\n- **前置依赖**：\n  - 无需额外安装底层依赖（内部已集成 whisper.cpp）\n  - 若需处理音频文件，推荐使用 [AudioKit](https:\u002F\u002Fgithub.com\u002FAudioKit\u002FAudioKit) 进行格式转换（见下文示例）\n  - 需自行下载预训练模型文件（`.bin` 格式），下载地址：[Hugging Face - whisper.cpp models](https:\u002F\u002Fhuggingface.co\u002Fggerganov\u002Fwhisper.cpp)\n\n> 💡 提示：国内开发者访问 Hugging Face 可能较慢，建议使用镜像站如 [ModelScope](https:\u002F\u002Fmodelscope.cn\u002Fmodels) 搜索 \"whisper.cpp\" 获取加速下载。\n\n## 安装步骤\n\n### 方式一：Swift Package Manager（推荐）\n\n在项目的 `Package.swift` 文件中添加依赖：\n\n```swift\nlet package = Package(\n  ...\n  dependencies: [\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", branch: \"master\"),\n  ],\n  ...\n  targets: [\n    .target(name: \"MyTarget\",\n            dependencies: [.byName(name: \"SwiftWhisper\")])\n  ]\n  ...\n)\n```\n\n### 方式二：Xcode 图形界面\n\n1. 打开 Xcode 项目\n2. 点击菜单栏 `File` → `Add Packages...`\n3. 输入仓库地址：`https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git`\n4. 选择分支 `master` 并添加\n\n> ⚡ 性能优化建议：Debug 模式下转录速度可能较慢。如需提升开发体验，可改用 `fast` 分支（强制开启 `-O3` 优化）：\n> ```swift\n> .package(url: \"https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper.git\", revision: \"deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01\")\n> ```\n\n## 基本使用\n\n### 1. 导入模块并初始化\n\n确保已将模型文件（如 `tiny.bin`）添加到项目中，并获取其 URL：\n\n```swift\nimport SwiftWhisper\n\nlet modelURL = Bundle.main.url(forResource: \"tiny\", withExtension: \"bin\")!\nlet whisper = Whisper(fromFileURL: modelURL)\n```\n\n### 2. 执行转录\n\n传入 16kHz 单声道 PCM 音频数据（Float 数组）：\n\n```swift\nlet segments = try await whisper.transcribe(audioFrames: audioFrames)\n\nprint(\"转录结果:\", segments.map(\\.text).joined())\n```\n\n### 3. （可选）监听进度与结果\n\n实现 `WhisperDelegate` 协议以实时获取转录进度和片段：\n\n```swift\nclass MyDelegate: WhisperDelegate {\n    func whisper(_ aWhisper: Whisper, didUpdateProgress progress: Double) {\n        print(\"进度: \\(progress * 100)%\")\n    }\n    \n    func whisper(_ aWhisper: Whisper, didProcessNewSegments segments: [Segment], atIndex index: Int) {\n        print(\"新片段: \\(segments.map(\\.text))\")\n    }\n    \n    func whisper(_ aWhisper: Whisper, didCompleteWithSegments segments: [Segment]) {\n        print(\"完成：\\(segments.map(\\.text).joined())\")\n    }\n    \n    func whisper(_ aWhisper: Whisper, didErrorWith error: Error) {\n        print(\"错误: \\(error)\")\n    }\n}\n\nwhisper.delegate = MyDelegate()\n```\n\n### 附：音频格式转换示例（使用 AudioKit）\n\n若原始音频非 16kHz PCM，需先转换：\n\n```swift\nimport AudioKit\n\nfunc convertAudioFileToPCMArray(fileURL: URL, completionHandler: @escaping (Result\u003C[Float], Error>) -> Void) {\n    var options = FormatConverter.Options()\n    options.format = .wav\n    options.sampleRate = 16000\n    options.bitDepth = 16\n    options.channels = 1\n    options.isInterleaved = false\n\n    let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)\n    let converter = FormatConverter(inputURL: fileURL, outputURL: tempURL, options: options)\n    converter.start { error in\n        if let error {\n            completionHandler(.failure(error))\n            return\n        }\n\n        let data = try! Data(contentsOf: tempURL)\n        let floats = stride(from: 44, to: data.count, by: 2).map {\n            return data[$0..\u003C$0 + 2].withUnsafeBytes {\n                let short = Int16(littleEndian: $0.load(as: Int16.self))\n                return max(-1.0, min(Float(short) \u002F 32767.0, 1.0))\n            }\n        }\n\n        try? FileManager.default.removeItem(at: tempURL)\n        completionHandler(.success(floats))\n    }\n}\n```\n\n> 🧠 CoreML 加速：如需启用 CoreML 加速，请同时提供同名 `-encoder.mlmodelc` 模型文件（如 `tiny-encoder.mlmodelc`），并使用相同初始化方法。转录时控制台会显示 CoreML 是否激活。","一位 iOS 开发者正在为一款面向听障人士的会议记录 App 开发核心功能，需要在设备端实时将语音转换为文字以保护用户隐私。\n\n### 没有 SwiftWhisper 时\n- **集成门槛极高**：开发者必须手动编译 C++ 版的 whisper.cpp，处理复杂的跨语言桥接代码，极易出现构建错误。\n- **音频预处理繁琐**：需自行编写大量代码调用底层 AudioToolbox 或使用重型第三方库，将各种格式的音频强制转换为模型所需的 16kHz 单声道 PCM 数据。\n- **缺乏实时反馈**：难以获取转录进度和新生成的文本片段，导致界面无法显示“正在转写”的状态或流式输出文字，用户体验卡顿。\n- **性能优化困难**：无法直接利用 Apple 设备的 CoreML 加速，导致在旧款 iPhone 上转写速度缓慢且耗电严重。\n\n### 使用 SwiftWhisper 后\n- **一键原生集成**：通过 Swift Package Manager 直接引入，几行代码即可初始化模型，完全屏蔽了底层 C++ 的复杂性。\n- **数据处理标准化**：配合 AudioKit 等工具，能轻松将音频流转为标准的 16kHz PCM 数组，直接传入 `transcribe` 方法即可运行。\n- **流畅的交互体验**：借助 `WhisperDelegate` 协议，开发者可轻松订阅转录进度和新文本片段，实现丝滑的流式字幕上屏效果。\n- **硬件加速就绪**：只需放入对应的 CoreML 模型文件，SwiftWhisper 自动调用神经网络引擎，显著提升转写速度并降低功耗。\n\nSwiftWhisper 将原本需要数天攻坚的底层语音识别工程，简化为几次标准的 Swift 依赖导入与异步调用，让开发者能专注于业务逻辑而非算法移植。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FexPHAT_SwiftWhisper_19709c51.png","exPHAT","Aaron Taylor","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FexPHAT_fff904d8.jpg",null,"WonderKiln","Canada","exphat","https:\u002F\u002Fexphat.com","https:\u002F\u002Fgithub.com\u002FexPHAT",[86],{"name":87,"color":88,"percentage":89},"Swift","#F05138",100,776,103,"2026-04-07T12:29:59","MIT","macOS, iOS","未说明 (基于 whisper.cpp，主要利用 CPU 运行，支持通过 CoreML 在 Apple Silicon 上加速)","未说明 (取决于所选 Whisper 模型大小)",{"notes":98,"python":99,"dependencies":100},"1. 该工具是 Swift 包，需通过 Swift Package Manager 或 Xcode 集成，不支持 Linux 或 Windows。2. 输入音频必须转换为 16kHz 单声道 PCM 格式（推荐使用 AudioKit 处理）。3. 若需启用 CoreML 加速，需额外下载并放置对应的 `-encoder.mlmodelc` 模型文件。4. Debug 模式下编译可能导致转录速度变慢，建议切换至 Release 模式或使用专门的 'fast' 分支以开启编译器优化。5. 预训练模型需从 Hugging Face 的 whisper.cpp 仓库单独下载。","不需要 (这是一个 Swift 原生库)",[101,102],"whisper.cpp","AudioKit (用于音频转换示例)",[21],[105,106,107,108,109,110,111,112,113],"ios","swift","whisper","macos","openai","speech-recognition","speech-to-text","transcription","whisper-cpp","2026-03-27T02:49:30.150509","2026-04-08T17:32:14.391634",[117,122,127,132,137,142,147],{"id":118,"question_zh":119,"answer_zh":120,"source_url":121},24787,"如何解决缺少必需模块 'whisper_cpp' 的编译错误？","这通常是由于 Xcode 缓存问题导致的。请尝试以下步骤：\n1. 清除 DerivedData 文件夹（在 Xcode 中：File -> Project Settings -> 点击垃圾桶图标，或手动删除 ~\u002FLibrary\u002FDeveloper\u002FXcode\u002FDerivedData）。\n2. 完全重启 Xcode。\n3. 重新添加该 Swift 包。\n如果是在扩展程序（Extensions）中遇到此问题，请确保构建设置正确包含了 C++ 模块支持。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F3",{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},24788,"是否支持 watchOS 平台？","是的，从版本 1.2.0 开始已支持 watchOS 构建。用户可以在 Apple Watch Ultra 等设备上运行，测试显示设备包含 1 个神经引擎（Neural Engine）和 2 个 GPU 可用于计算。请直接更新到最新版本进行尝试。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F23",{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},24789,"是否有包含 CoreML 模型、代理（Delegates）和 PCM 数组处理的完整示例代码？","维护者提供了一个基础示例项目供参考。使用方法如下：\n1. 下载示例项目（SwiftWhisperExample.zip）。\n2. 将预构建的模型文件拖入项目中，并重命名为 `model.bin`。\n3. 或者，根据 README 说明，拖入命名正确的预构建 CoreML 模型，库会自动识别并使用它。\n此外，WhisperDelegate 已完全实现，可用于更新进度条等 UI 反馈。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F27",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},24790,"为什么 Swift 包的运行速度比直接编译的 whisper.cpp C++ 版本慢很多？","通常情况下，通过互操作调用的速度应接近原生 C++。如果遇到显著的性能下降（例如从 2.7 秒变慢到 10 秒以上），请检查音频文件的解码设置。\n常见原因是将单声道（Mono）音频错误地设置为双声道（Stereo，channels=2）进行处理，这不仅会导致速度变慢，还可能产生幻觉转录结果。请确保将通道数设置为 1。同时，建议阅读 README 中关于“速度提升（speed boosts）”的章节以优化性能。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F19",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},24791,"如何获取单词级别的时间戳（word-level timestamps）？","虽然库本身可能没有直接的 `--word_timestamps` 开关，但可以通过配置 `WhisperParams` 参数来实现类似效果。请尝试设置以下参数：\n- `parameter.split_on_word = true`\n- `parameter.max_len = 1`\n- `parameter.token_timestamps = true`\n将 `max_len` 设置为 1 强制模型在每个单词后分割，从而获得单词级的时间戳数据。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F17",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},24792,"如何处理实时麦克风数据进行流式语音识别？","官方库主要关注文件处理，对于实时麦克风数据流式处理，社区提供了一个分叉版本（Fork）专门解决此问题。\n可以参考 `SwiftWhisperStream` 项目（https:\u002F\u002Fgithub.com\u002Flake-of-fire\u002FSwiftWhisperStream），其中包含了将实时麦克风数据接入库的讨论和实现方案，类似于 macOS 的听写系统功能。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F28",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},24793,"为什么设置了静音阈值参数（no_speech_thold）仍然无法检测到停顿或间隙？","如果在调整 `params.no_speech_thold` 后仍然发现转录结果中单词之间没有间隙（即使实际说话中有长停顿），这可能是底层 whisper.cpp 版本或特定参数组合的问题。\n建议检查是否使用了最新版本的 whisper.cpp（SwiftWhisper 1.0.3+ 已集成最新版）。如果问题依旧，可能需要进一步探索 whisper.cpp 的其他底层参数，因为目前的封装可能未完全暴露所有控制停顿检测的参数。","https:\u002F\u002Fgithub.com\u002FexPHAT\u002FSwiftWhisper\u002Fissues\u002F8",[153,158,163,168,173,178],{"id":154,"version":155,"summary_zh":156,"released_at":157},154302,"1.2.0","- 恢复对 Linux 的支持\n- 对 watchOS 的支持\n- 对 tvOS 的支持","2023-08-17T15:54:03",{"id":159,"version":160,"summary_zh":161,"released_at":162},154303,"1.1.0","- Core ML 支持\n- Swift 5.6 支持","2023-07-25T17:48:28",{"id":164,"version":165,"summary_zh":166,"released_at":167},154304,"1.0.3","- 更新到 whisper.cpp 的最新版本\r\n- 使用新的 `progress_callback` 参数","2023-05-16T16:13:16",{"id":169,"version":170,"summary_zh":171,"released_at":172},154305,"1.0.2","- 修复内存泄漏","2023-05-15T18:52:09",{"id":174,"version":175,"summary_zh":176,"released_at":177},154306,"1.0.1","- 移除不安全的编译标志\n- 提供更完善的 README 示例\n- 在 SPI 上添加文档生成工具","2023-04-04T20:12:13",{"id":179,"version":180,"summary_zh":79,"released_at":181},154307,"1.0.0","2023-03-31T20:46:44"]