whisper.rn

GitHub
762 61 较难 1 次阅读 3天前MIT音频
AI 解读 由 AI 自动生成,仅供参考

whisper.rn 是一款专为 React Native 开发者打造的开源库,它将高性能的 whisper.cpp 引擎无缝集成到移动端应用中。简单来说,它让 iOS 和 Android 应用能够直接在手机本地运行 OpenAI 的 Whisper 模型,实现高质量的语音转文字功能,而无需依赖云端服务器。

这一工具主要解决了移动端语音识别面临的两大难题:一是隐私安全,所有音频处理均在设备本地完成,数据不出境;二是网络依赖与延迟,即使在离线环境下也能快速响应。对于需要构建跨平台语音交互功能的移动开发者而言,whisper.rn 提供了极大的便利,避免了从零开始编译底层 C++ 代码的复杂过程。

其技术亮点在于卓越的性能优化与丰富的功能扩展。它不仅支持在 iPhone 上利用 Core ML 加速,在 Android 设备上也能高效运行,甚至集成了 Silero VAD(语音活动检测)模型,能智能识别音频中的有效人声片段,过滤静音与噪音。此外,它还支持多种模型尺寸选择,并针对 Apple Silicon 芯片等开发环境做了专门适配。无论是希望为应用添加实时字幕、语音笔记还是智能助手功能的工程师,都能通过简单的几行代码快速落地这些高级特性。

使用场景

某跨平台团队正在开发一款面向户外记者的移动端新闻采集 App,需要在无网络环境下实时将采访录音转为文字草稿。

没有 whisper.rn 时

  • 依赖云端服务:必须将录音上传至服务器处理,在信号弱的野外场景下经常超时失败,导致工作流中断。
  • 开发成本高昂:团队需分别编写 iOS (CoreML) 和 Android (TFLite) 的原生语音识别桥接代码,维护两套逻辑耗时费力。
  • 隐私合规风险:敏感采访内容需传输至第三方服务器,难以满足新闻媒体对数据本地化存储的严格合规要求。
  • 响应延迟严重:录音上传、排队、推理再回传的全链路耗时过长,记者无法在现场即时核对转录准确性。

使用 whisper.rn 后

  • 纯离线运行:利用 whisper.rn 集成的 whisper.cpp 高性能引擎,直接在手机本地完成推理,彻底摆脱网络限制。
  • 一套代码通吃:通过 React Native 统一接口调用,仅需一次集成即可同时支持 iOS 和 Android,大幅缩短研发周期。
  • 数据不出设备:所有音频处理均在用户设备内存中完成,从根源上杜绝了数据泄露风险,轻松通过安全审计。
  • 实时反馈体验:结合内置的 VAD(语音活动检测)功能,可精准截取人声片段并秒级输出文本,实现“边说边转”的流畅体验。

whisper.rn 让高性能离线语音识别在跨平台移动应用中变得触手可及,真正实现了数据隐私与开发效率的双赢。

运行环境要求

操作系统
  • iOS
  • Android
GPU
  • 非必需
  • iOS 端 VAD 功能可选开启 GPU 加速
  • Android 端依赖 NDK 编译优化(armv8.2-a+fp16),未提及具体桌面级显卡或 CUDA 需求
内存

未说明(受限于移动设备内存,大模型如 large 需注意包体积限制)

依赖
notes1. 这是一个 React Native 库,主要用于 iOS 和 Android 移动端,而非传统的 Linux/Windows 服务器环境。 2. iOS 若使用 medium 或 large 模型,建议开启 'Extended Virtual Addressing' 能力。 3. Android 在 Apple Silicon Mac 上构建时,推荐 NDK 版本为 24.0.8215888 或更高。 4. 若通过 assets 打包模型文件,需注意 RN 打包器不支持超过 2GB 的单文件,因此无法直接打包原始 f16 large 模型(2.9GB),建议使用量化模型。 5. 支持 Core ML (iOS 15.0+) 加速,需额外下载对应的 .mlmodelc 文件。
python不适用 (基于 React Native/Node.js)
react-native
whisper.cpp (底层核心)
@fugood/react-native-audio-pcm-stream (实时转录可选)
react-native-fs (或兼容的文件系统模块)
NDK r24+ (Android 构建必需)
whisper.rn hero image

快速开始

whisper.rn

Actions Status License: MIT npm

React Native 绑定 whisper.cpp

whisper.cpp:高性能推理 OpenAI's Whisper 自动语音识别 (ASR) 模型。

截图

iOS:在 iPhone 13 Pro Max 上测试 Android:在 Pixel 6 上测试
(tiny.en,启用 Core ML,发布模式 + 归档) (tiny.en,armv8.2-a+fp16,发布模式)

安装

npm install whisper.rn

iOS

请再次运行 npx pod-install

默认情况下,whisper.rn 将使用预构建的 rnwhisper.xcframework 用于 iOS。如果您想从源代码构建,请在您的 Podfile 中将 RNWHISPER_BUILD_FROM_SOURCE 设置为 1

如果您想使用 mediumlarge 模型,建议在 iOS 项目中启用 扩展虚拟地址空间 功能。

Android

如果项目中启用了 ProGuard,请在 android/app/proguard-rules.pro 中添加以下规则:

# whisper.rn
-keep class com.rnwhisper.** { *; }

对于 Apple Silicon Mac,建议在根项目构建配置中使用 ndkVersion = "24.0.8215888"(或更高版本)。否则,请参考此故障排除 问题

Expo

您需要在使用之前预构建项目。有关更多详细信息,请参阅 Expo 指南

技巧与窍门

技巧与窍门 文档收集了使用 whisper.rn 的一些技巧和窍门。

使用方法

import { initWhisper } from 'whisper.rn'

const whisperContext = await initWhisper({
  filePath: 'file://.../ggml-tiny.en.bin',
})

const sampleFilePath = 'file://.../sample.wav'
const options = { language: 'en' }
const { stop, promise } = whisperContext.transcribe(sampleFilePath, options)

const { result } = await promise
// result:(来自音频文件的推理文本结果)

语音活动检测 (VAD)

语音活动检测允许您使用 Silero VAD 模型检测音频数据中的语音片段。

初始化 VAD 上下文

import { initWhisperVad } from 'whisper.rn'

const vadContext = await initWhisperVad({
  filePath: require('./assets/ggml-silero-v6.2.0.bin'), // VAD 模型文件
  useGpu: true, // 使用 GPU 加速(仅限 iOS)
  nThreads: 4, // 处理线程数
})

检测语音片段

来自音频文件
// 检测音频文件中的语音(支持与转录相同的格式)
const segments = await vadContext.detectSpeech(require('./assets/audio.wav'), {
  threshold: 0.5, // 语音概率阈值(0.0-1.0)
  minSpeechDurationMs: 250, // 最小语音持续时间(毫秒)
  minSilenceDurationMs: 100, // 最小静音持续时间(毫秒)
  maxSpeechDurationS: 30, // 最大语音持续时间(秒)
  speechPadMs: 30, // 语音片段周围的填充时间(毫秒)
  samplesOverlap: 0.1, // 分析窗口之间的重叠比例
})

// 同样支持:
// - 文件路径:vadContext.detectSpeech('path/to/audio.wav', options)
// - HTTP URL:vadContext.detectSpeech('https://example.com/audio.wav', options)
// - Base64 WAV:vadContext.detectSpeech('data:audio/wav;base64,...', options)
// - 资源文件:vadContext.detectSpeech(require('./assets/audio.wav'), options)
来自原始音频数据
// 检测 base64 编码的 float32 PCM 数据中的语音
const segments = await vadContext.detectSpeechData(base64AudioData, {
  threshold: 0.5,
  minSpeechDurationMs: 250,
  minSilenceDurationMs: 100,
  maxSpeechDurationS: 30,
  speechPadMs: 30,
  samplesOverlap: 0.1,
})

处理结果

segments.forEach((segment, index) => {
  console.log(
    `第 ${index + 1} 段:${segment.t0.toFixed(2)} 秒 - ${segment.t1.toFixed(2)} 秒`,
  )
  console.log(`持续时间:${(segment.t1 - segment.t0).toFixed(2)} 秒`)
})

释放 VAD 上下文

await vadContext.release()
// 或者释放所有 VAD 上下文
await releaseAllWhisperVad()

实时转录

新的 RealtimeTranscriber 提供了增强的实时转录功能,包括语音活动检测 (VAD)、自动切片和内存管理等特性。

// 如果你的 RN 打包工具不支持 package exports,可以使用 whisper.rn/src/realtime-transcription
import { RealtimeTranscriber } from 'whisper.rn/realtime-transcription'
import { AudioPcmStreamAdapter } from 'whisper.rn/realtime-transcription/adapters'
import RNFS from 'react-native-fs' // 或任何兼容的文件系统

// 依赖项
const whisperContext = await initWhisper({
  /* ... */
})
const vadContext = await initWhisperVad({
  /* ... */
})
const audioStream = new AudioPcmStreamAdapter() // 需要 @fugood/react-native-audio-pcm-stream

// 创建转录器
const transcriber = new RealtimeTranscriber(
  { whisperContext, vadContext, audioStream, fs: RNFS },
  {
    audioSliceSec: 30,
    vadPreset: 'default',
    autoSliceOnSpeechEnd: true,
    transcribeOptions: { language: 'en' },
  },
  {
    onTranscribe: (event) => console.log('转录:', event.data?.result),
    onVad: (event) => console.log('VAD:', event.type, event.confidence),
    onStatusChange: (isActive) =>
      console.log('状态:', isActive ? 'ACTIVE' : 'INACTIVE'),
    onError: (error) => console.error('错误:', error),
  },
)

// 开始/停止转录
await transcriber.start()
await transcriber.stop()

依赖项:

  • @fugood/react-native-audio-pcm-stream 用于 AudioPcmStreamAdapter
  • 兼容的文件系统模块(例如 react-native-fs)。请参阅 文件系统接口 获取 TypeScript 定义。

自定义音频适配器: 你可以通过实现 AudioStreamInterface 来创建自定义音频流适配器。这允许与不同的音频源或自定义音频处理管道集成。

示例: 请参阅 完整示例 以获取包括文件模拟和 UI 的完整实现。

更多详细信息请访问 文档

使用资源文件

你也可以从资源文件中使用模型文件或音频文件:

import { initWhisper } from 'whisper.rn'

const whisperContext = await initWhisper({
  filePath: require('../assets/ggml-tiny.en.bin'),
})

const { stop, promise } = whisperContext.transcribe(
  require('../assets/sample.wav'),
  options,
)

// ...

这需要编辑 metro.config.js 以支持资源文件:

// ...
const defaultAssetExts = require('metro-config/src/defaults/defaults').assetExts

module.exports = {
  // ...
  resolver: {
    // ...
    assetExts: [
      ...defaultAssetExts,
      'bin', // whisper.rn:ggml 模型二进制文件
      'mil', // whisper.rn:CoreML 模型资源文件
    ],
  },
}

请注意:

  • 这会显著增加发布模式下的应用大小。
  • RN 打包工具不允许超过 2GB 的文件大小,因此无法使用原始 f16 large 模型(2.9GB),建议使用量化后的模型。

Core ML 支持

平台:iOS 15.0+,tvOS 15.0+

要在 iOS 上使用 Core ML,你需要 Core ML 模型文件。

.mlmodelc 模型文件的加载依赖于 ggml 模型文件路径。例如,如果你的 ggml 模型路径是 ggml-tiny.en.bin, 那么对应的 Core ML 模型路径将是 ggml-tiny.en-encoder.mlmodelc。请注意,ggml 模型仍然需要作为解码器或编码器的备用方案。

Core ML 模型托管在:https://huggingface.co/ggerganov/whisper.cpp/tree/main

如果你想在运行时下载模型,并且模型文件是压缩包形式,你需要先解压才能获得 .mlmodelc 目录。可以使用类似 react-native-zip-archive 的库,或者将这些单独的文件托管起来供自己下载。

.mlmodelc 是一个目录,通常包含 5 个文件(其中 3 个是必需的):

[
  'model.mil',
  'coremldata.bin',
  'weights/weight.bin',
  // 非必需:
  // 'metadata.json', 'analytics/coremldata.bin',
]

或者直接使用 require 将其打包到你的应用中,就像示例应用那样,但这会显著增加应用大小。

const whisperContext = await initWhisper({
  filePath: require('../assets/ggml-tiny.en.bin')
  coreMLModelAsset:
    Platform.OS === 'ios'
      ? {
          filename: 'ggml-tiny.en-encoder.mlmodelc',
          assets: [
            require('../assets/ggml-tiny.en-encoder.mlmodelc/weights/weight.bin'),
            require('../assets/ggml-tiny.en-encoder.mlmodelc/model.mil'),
            require('../assets/ggml-tiny.en-encoder.mlmodelc/coremldata.bin'),
          ],
        }
      : undefined,
})

在实际开发中,我们建议将资源导入拆分到另一个平台特定的文件中(例如 context-opts.ios.js),以避免这些未使用的文件被打包到 Android 应用中。

运行示例

示例应用提供了一个简单的界面来测试各项功能。

使用的 Whisper 模型:https://huggingface.co/ggerganov/whisper.cpp 中的 tiny.en
示例文件:https://github.com/ggerganov/whisper.cpp/tree/master/samples 中的 jfk.wav

请按照贡献指南中的开发流程部分来运行示例应用。

模拟 whisper.rn

我们提供了一个用于测试的 whisper.rn 模拟版本,可以在 Jest 中使用:

jest.mock('whisper.rn', () => require('whisper.rn/jest-mock'))

使用 whisper.rn 的应用

  • BRICKS:我们的产品,用于以简单方式构建交互式标牌。我们提供 LLM 功能作为生成式 LLM/助手。
  • ...(欢迎任何贡献)

Node.js 绑定

  • whisper.nodewhisper.cpp 的另一个 Node.js 绑定,但其 API 与 whisper.rn 相同。

贡献

请参阅 贡献指南 了解如何为仓库做出贡献以及开发流程。

故障排除

如果在使用 whisper.rn 时遇到任何问题,请参阅 故障排除

许可证

MIT


create-react-native-library 制作


BRICKS 构建并维护。

版本历史

v0.6.0-rc.32026/04/03
v0.6.0-rc.22026/04/02
v0.6.0-rc.12026/04/01
v0.6.0-rc.02026/02/11
v0.5.52026/01/26
v0.5.42025/12/08
v0.5.32025/12/04
v0.5.22025/10/29
v0.5.12025/10/11
v0.5.02025/09/14
v0.5.0-rc.102025/09/13
v0.5.0-rc.82025/08/25
v0.5.0-rc.72025/08/05
v0.5.0-rc.62025/07/16
v0.5.0-rc.42025/07/11
v0.5.0-rc.32025/07/11
v0.5.0-rc.22025/07/10
v0.5.0-rc.02025/07/07
v0.4.22025/06/30
v0.4.12025/06/27

常见问题

相似工具推荐

ML-For-Beginners

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

85.3k|★★☆☆☆|今天
图像数据工具视频

Real-Time-Voice-Cloning

Real-Time-Voice-Cloning 是一款开源的实时语音克隆工具,旨在通过短短 5 秒的音频样本,快速复刻说话人的声音特征,并即时生成任意文本的语音内容。它有效解决了传统语音合成需要大量训练数据且无法实时响应的痛点,让个性化语音生成变得轻量且高效。 该项目的核心技术基于 SV2TTS(从说话人验证到多说话人文本转语音的迁移学习)深度学习框架。其工作流程分为三个阶段:首先从少量音频中提取说话人的数字声纹表示,随后将其作为参考,结合 Tacotron 合成器与 WaveRNN 声码器,高质量地生成目标语音。这种架构不仅实现了端到端的语音合成,还保证了在普通硬件上的实时运行能力。 Real-Time-Voice-Cloning 非常适合开发者、人工智能研究人员以及对语音技术感兴趣的技术爱好者使用。开发者可以将其集成到互动应用中,研究人员可借此探索语音迁移学习的前沿进展,而具备一定动手能力的普通用户也能通过提供的图形界面工具箱,轻松体验“声音复制”的乐趣。尽管目前已有商业服务在音质上表现更佳,但作为一款免费开源项目,它依然是理解和学习实时语音合成技术的绝佳入门资源。

59.6k|★★★☆☆|2天前
音频开发框架

GPT-SoVITS

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

56.4k|★★★☆☆|1周前
音频

TTS

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

45k|★★★☆☆|2周前
音频开发框架图像

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|★★★☆☆|2周前
图像音频语言模型

bark

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

39.1k|★★★☆☆|2周前
音频