@dbkable/ react-native-speech-to-text (英语)
一个强大的,容易使用的 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.0isFinal(布尔语):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+上可对某些语言进行在线识别
- 机器人:取决于设备的语音识别提供者
确保设备能上网取得最佳效果.
捐款
我们欢迎捐款! 下面是怎样开始:
- 叉子存储器 关于 GitHub 的
- 砍断你的叉子 当地
- 创建分支 您的特性 :
git checkout -b my-feature - 做你的改变 并在适用的情况下添加测试
- 彻底测试 iOS 和Android两端
- 提交更改数字 :
git commit -am 'feat: add amazing feature'(接下来) 常规武器委员会(中文(简体) ) - 推到叉子边数字 :
git push origin my-feature - 打开拉请求 关于 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
详情见 捐款额。 。 。 .
许可证
麻省理工学院
承认
链接
为原住民社区制作