@dbkable/react-native-speech-to-text

中文文档
1.2.2发布于 2026/09/07MITTypeScriptCommonJS零依赖构建来源已验证近 30 天下载 4406

使用本地 API( Speech Framework & Speech Recognizer) 为 React Natural 创建的跨平台语音识别库

中文使用文档
文档目录29 节
  1. * 特性
  2. 德莫语
  3. * 安装
  4. 用于展览项目
  5. 对于裸体反应原生项目
  6. QQ 快速启动
  7. API 参考
  8. 方法
  9. 活动听众
  10. 类型
  11. QQ 博览会插件配置
  12. 基本用途
  13. 带有自定义权限信件
  14. 插件选项
  15. 插件会做什么
  16. QQ 支持的语言
  17. * 解决问题
  18. “ 被拒绝” 错误
  19. "语音识别不可用"
  20. 未显示部分结果
  21. 自动识别停止
  22. 低信任分数
  23. 网络错误
  24. 捐款
  25. 开发设置
  26. 代码样式
  27. 许可证
  28. 承认
  29. 链接

@dbkable/ react-native-speech-to-text (英语)

npm version npm downloads license

一个强大的,容易使用的 React End 库,用于实时的语音到文本转换. 与"新建筑"(Turbo Modules)相建,以在iOS和Android上实现最佳性能.

* 特性

  • 🎤 实时抄录 在你说话的时候有部分结果
  • 📱 跨平台 对iOS和Android的支持
  • 🎯 信心分数 准确性
  • 🌍 多语种 支助
  • ⚡ 事件驱动 带有听众的架构
  • 🔒 内置许可处理
  • 🏗️ 新建筑 准备(图尔博模块)
  • 📝 类型脚本 包括定义
  • ⚙️ 曝光配置插件 用于自动设置

德莫语

iOS系统机器人

* 安装

npm install @dbkable/react-native-speech-to-text

或者说

yarn add @dbkable/react-native-speech-to-text

用于展览项目

将插件添加到您的 app.json 或者说 app.config.js数字 :

{
  "expo": {
    "plugins": ["@dbkable/react-native-speech-to-text"]
  }
}

就这样! 插件会自动配置iOS和Android的权限. 运行 npx expo prebuild 以应用更改.

自定义权限信件( 可选)

您可以自定义 iOS 权限消息 :

{
  "expo": {
    "plugins": [
      [
        "@dbkable/react-native-speech-to-text",
        {
          "microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone",
          "speechRecognitionPermission": "Allow $(PRODUCT_NAME) to recognize your speech"
        }
      ]
    ]
  }
}

对于裸体反应原生项目

iOS 设置

安装吊舱 :

cd ios && pod install

在您的 Info.plist数字 :

<key>NSSpeechRecognitionUsageDescription</key>
<string>This app needs speech recognition to convert your voice to text</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app needs microphone access to record your voice</string>

Android 设置

向您添加以下权限 AndroidManifest.xml数字 :

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
</manifest>

软件包自动处理运行时间权限请求.

QQ 快速启动

import { useState, useEffect } from 'react';
import {
  start,
  stop,
  requestPermissions,
  isAvailable,
  addSpeechResultListener,
  addSpeechErrorListener,
  addSpeechEndListener,
  type SpeechResult,
} from '@dbkable/react-native-speech-to-text';

export default function App() {
  const [transcript, setTranscript] = useState('');
  const [isListening, setIsListening] = useState(false);

  useEffect(() => {
    // Listen for results
    const resultListener = addSpeechResultListener((result: SpeechResult) => {
      setTranscript(result.transcript);
      console.log('Confidence:', result.confidence);
    });

    // Listen for errors
    const errorListener = addSpeechErrorListener((error) => {
      console.error('Speech error:', error);
      setIsListening(false);
    });

    // Listen for end of speech
    const endListener = addSpeechEndListener(() => {
      setIsListening(false);
    });

    // Cleanup
    return () => {
      resultListener.remove();
      errorListener.remove();
      endListener.remove();
    };
  }, []);

  const handleStart = async () => {
    try {
      const available = await isAvailable();
      if (!available) {
        alert('Speech recognition not available');
        return;
      }

      const hasPermission = await requestPermissions();
      if (!hasPermission) {
        alert('Permission denied');
        return;
      }

      await start({ language: 'en-US' });
      setIsListening(true);
    } catch (error) {
      console.error(error);
    }
  };

  const handleStop = async () => {
    try {
      await stop();
    } catch (error) {
      console.error(error);
    }
  };

  return (
    <View>
      <Text>{transcript || 'Press start to begin'}</Text>
      <Button
        title={isListening ? 'Stop' : 'Start'}
        onPress={isListening ? handleStop : handleStart}
      />
    </View>
  );
}

API 参考

方法

start(options: SpeechToTextOptions): Promise<void>

开始语音识别.

await start({ language: 'en-US' });

选项 :

  • language (字符串,需要):语言代码(如"en-US","fr-FR","es-ES","de-DE")

掷出 :

  • PERMISSION_DENIED用户拒绝权限
  • NOT_AVAILABLE: 语音识别不可用
  • START_FAILED: 启动识别失败

stop(): Promise<void>

停止语音识别,并发送最终记录.

await stop();

requestPermissions(options?: PermissionOptions): Promise<boolean>

申请必要的语音识别许可.

const granted = await requestPermissions({
  title: 'Microphone Permission',
  message: 'This app needs access to your microphone for speech recognition',
  buttonPositive: 'OK',
});

选项( 只有Android ) :

  • title (弦,可选): 对话框标题
  • message (弦,可选): 对话框消息
  • buttonNeutral (弦,可选): 中性按钮文本
  • buttonNegative (弦,可选): 负按钮文本
  • buttonPositive (弦,可选): 正按钮文本

回返情况: boolean - 说吧 true 如果得到许可, false 否则


isAvailable(): Promise<boolean>

检查设备上是否有语音识别功能 .

const available = await isAvailable();
if (!available) {
  console.log('Speech recognition not supported');
}

回返情况: boolean


活动听众

addSpeechResultListener(callback: (result: SpeechResult) => void): EmitterSubscription

听取记录(部分和最终)结果.

const listener = addSpeechResultListener((result) => {
  console.log('Transcript:', result.transcript);
  console.log('Confidence:', result.confidence);
  console.log('Is final:', result.isFinal);
});

// Don't forget to remove the listener
listener.remove();

演讲结果 :

  • transcript (字符串):公认文本
  • confidence (数目):信心分从0.0到1.0
  • isFinal (布尔语): true 最后结果, false 用于部分

addSpeechErrorListener(callback: (error: SpeechError) => void): EmitterSubscription

听取出错事件.

const listener = addSpeechErrorListener((error) => {
  console.error('Error code:', error.code);
  console.error('Error message:', error.message);
});

listener.remove();

语音错误 :

  • code (字符串):出错代码(参见 错误代码(中文(简体) )
  • message (字符串):人可读出的错误消息

addSpeechEndListener(callback: () => void): EmitterSubscription

当语音识别结束时调用.

const listener = addSpeechEndListener(() => {
  console.log('Speech recognition ended');
});

listener.remove();

类型

interface SpeechToTextOptions {
  language: string; // e.g., "en-US", "fr-FR", "es-ES"
}

interface PermissionOptions {
  title?: string;
  message?: string;
  buttonNeutral?: string;
  buttonNegative?: string;
  buttonPositive?: string;
}

interface SpeechResult {
  transcript: string;
  confidence: number;
  isFinal: boolean;
}

interface SpeechError {
  code: SpeechErrorCode | string;
  message: string;
}

enum SpeechErrorCode {
  PERMISSION_DENIED = 'PERMISSION_DENIED',
  NOT_AVAILABLE = 'NOT_AVAILABLE',
  REQUEST_FAILED = 'REQUEST_FAILED',
  START_FAILED = 'START_FAILED',
  STOP_FAILED = 'STOP_FAILED',
  AUDIO_ERROR = 'AUDIO_ERROR',
  CLIENT_ERROR = 'CLIENT_ERROR',
  NETWORK_ERROR = 'NETWORK_ERROR',
  NETWORK_TIMEOUT = 'NETWORK_TIMEOUT',
  RECOGNIZER_BUSY = 'RECOGNIZER_BUSY',
  SERVER_ERROR = 'SERVER_ERROR',
  UNKNOWN_ERROR = 'UNKNOWN_ERROR',
}

QQ 博览会插件配置

如果您正在使用 Expo, 插件会自动配置本地权限 .

基本用途

{
  "expo": {
    "plugins": ["@dbkable/react-native-speech-to-text"]
  }
}

带有自定义权限信件

{
  "expo": {
    "plugins": [
      [
        "@dbkable/react-native-speech-to-text",
        {
          "microphonePermission": "Custom message for microphone access",
          "speechRecognitionPermission": "Custom message for speech recognition"
        }
      ]
    ]
  }
}

插件选项

选项类型默认说明
microphonePermission字符串"Allow $(PRODUCT_NAME) to access your microphone to record audio for speech recognition"只使用 iOS: 自定义信件 NSMicrophoneUsageDescription
speechRecognitionPermission字符串"Allow $(PRODUCT_NAME) to use speech recognition to convert your voice to text"只使用 iOS: 自定义信件 NSSpeechRecognitionUsageDescription

插件会做什么

展览配置插件自动 :

  • iOS系统页:1 NSMicrophoneUsageDescription 财务报告和审定财务报表 NSSpeechRecognitionUsageDescription 改为 Info.plist
  • 机器人页:1 RECORD_AUDIO 权限 AndroidManifest.xml

添加或修改插件配置后, 运行 :

npx expo prebuild

QQ 支持的语言

您可以使用任何标准的地方标识符 。 以下是一些例子:

  • 英语 : en-US, (中文(简体) ), en-GB, (中文(简体) ), en-AU
  • 法语: fr-FR, (中文(简体) ), fr-CA
  • 西班牙语: es-ES, (中文(简体) ), es-MX
  • 德语: de-DE
  • 意大利语: it-IT
  • 葡萄牙语: pt-BR, (中文(简体) ), pt-PT
  • 日语: ja-JP
  • 中国: zh-CN, (中文(简体) ), zh-TW
  • 韩语: ko-KR
  • 阿拉伯语: ar-SA

可用性取决于设备和平台。 使用 isAvailable() 检查.

* 解决问题

“ 被拒绝” 错误

博览会用户: 如果您将插件添加到您的 app.json,应当自动配置权限。 确保运行 npx expo prebuild 在添加插件后.

裸体反应原生 - iOS:

  • 确定你已经添加了 NSSpeechRecognitionUsageDescription 财务报告和审定财务报表 NSMicrophoneUsageDescription 给您的 Info.plist
  • 检查用户是否在设置中授予权限 > 您的应用程序

裸体反应原生- Android:

  • 保证 RECORD_AUDIO 权限在 AndroidManifest.xml
  • 打电话 requestPermissions() 在此之前 start()

"语音识别不可用"

  • iOS系统:语音识别需要iOS 10+,一些iOS版本在模拟器中不可用. 测试一个真正的设备.
  • 机器人:确保Google应用或语音识别服务安装并更新.
  • 一些更老的设备可能不支持语音识别.

未显示部分结果

  • 两个平台默认启用部分结果
  • 在Android上,部分结果在短暂延迟后出现
  • 如果你只看到最后的结果, 请检查你正在处理 isFinal 旗帜正确

自动识别停止

  • iOS系统: 检测到沉默后可自动停止
  • 机器人: 配置有2秒暂停检测和10秒最小记录
  • 打电话 start() 再次重新启动识别

低信任分数

  • 说清楚,在安静的环境中
  • 确保设备麦克风不受阻碍
  • 尝试不同语言/ 本地语言, 更符合扬声器的口音

网络错误

有些语音识别服务需要互联网连接:

  • iOS系统: iOS 13+上可对某些语言进行在线识别
  • 机器人:取决于设备的语音识别提供者

确保设备能上网取得最佳效果.

捐款

我们欢迎捐款! 下面是怎样开始:

  1. 叉子存储器 关于 GitHub 的
  2. 砍断你的叉子 当地
  3. 创建分支 您的特性 : git checkout -b my-feature
  4. 做你的改变 并在适用的情况下添加测试
  5. 彻底测试 iOS 和Android两端
  6. 提交更改数字 : git commit -am 'feat: add amazing feature' (接下来) 常规武器委员会(中文(简体) )
  7. 推到叉子边数字 : git push origin my-feature
  8. 打开拉请求 关于 GitHub 的

开发设置

# Clone the repo
git clone https://github.com/adelbeke/react-native-speech-to-text.git
cd react-native-speech-to-text

# Install dependencies
yarn install

# Run the example app
yarn example ios
# or
yarn example android

代码样式

这个项目使用ESLint和Prettier. 运行 :

yarn lint
yarn typescript

详情见 捐款额。 。 。 .

许可证

麻省理工学院

承认

与 创建- 反应- 本土- 图书馆


为原住民社区制作

版本与发布记录

@dbkable/react-native-speech-to-text 共发布 5 个版本,首次发布于 2025/11/07;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.2latest2026/09/072 个月前
1.2.12026/09/032 个月前
1.2.02026/08/312 个月前
1.0.1next2025/11/071 年前
1.0.02025/11/071 年前

关于 @dbkable/react-native-speech-to-text 的常见问题

@dbkable/react-native-speech-to-text 是什么?

使用本地 API( Speech Framework & Speech Recognizer) 为 React Natural 创建的跨平台语音识别库

如何安装 @dbkable/react-native-speech-to-text?

在项目目录运行 npm install @dbkable/react-native-speech-to-text,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(*)、react-native(*)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@dbkable/react-native-speech-to-text 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dbkable/react-native-speech-to-text 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dbkable/react-native-speech-to-text 可以商用吗?

@dbkable/react-native-speech-to-text 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dbkable/react-native-speech-to-text 的下载量有多少?

根据 npm 官方下载统计,@dbkable/react-native-speech-to-text 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,406 次,日均约 147 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dbkable/react-native-speech-to-text 还在维护吗?

最新版本 1.2.2 发布于 2026/09/07(2 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 3 个;首次发布于 2025/11/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。