我正在做一个项目,我需要将语音翻译成我使用 Expo 和 React-native-voice 的文本
Posted
技术标签:
【中文标题】我正在做一个项目,我需要将语音翻译成我使用 Expo 和 React-native-voice 的文本【英文标题】:I am working on a project and I need to translate speech into text I used Expo and React-native-voice 【发布时间】:2020-01-22 05:38:59 【问题描述】:。 **[未处理的承诺拒绝:TypeError:null 不是对象(评估'Voice.onSpeechStart = null')] - removeAllListeners 中的 node_modules\react-native-voice\src\index.js:23:10 - node_modules\promise\setimmediate\core.js:37:14 在 tryCallOne - ... 9 个堆栈帧
import React from "react";
import StyleSheet, Text, View, TouchableOpacity from "react-native";
import Voice from "react-native-voice";
import * as Permissions from "expo-permissions";
export default class App extends React.Component
constructor()
super();
this.state =
results: [],
;
Voice.onSpeechStart = this.onSpeechStart;
Voice.onSpeechRecognized = this.onSpeechRecognized;
Voice.onSpeechEnd = this.onSpeechEnd;
Voice.onSpeechError = this.onSpeechError;
Voice.onSpeechResults = this.onSpeechResults;
Voice.onSpeechPartialResults = this.onSpeechPartialResults;
Voice.onSpeechVolumeChanged = this.onSpeechVolumeChanged;
async componentDidMount()
const status = await Permissions.askAsync(
Permissions.AUDIO_RECORDING
);
componentWillMount()
Voice.destroy().then(Voice.removeAllListeners)
onSpeechStart = (e)=>
console.log('onSpeechStart',e);
;
onSpeechRecognized =(e)=>
console.log('onSpeechRecognized',e);
onSpeechEnd = (e)=>
console.log('onSpeechEnd'+e);
onSpeechError =(e)=>
console.log('onSpeechError');
onSpeechResults = e =>
console.log('onSpeechResults'+e);
this.setState(
results: e.value,
);
onSpeechPartialResults = e =>
console.log('onSpeechPartialResults' + e.value);
onSpeechVolumeChanged = e =>
console.log('onSpeechVolumeChanged');
_startRecognizing=async()=>
try
await Voice.start('en-US')
catch(e)
console.error(e);
_stopRecognizing = async()=>
try
await Voice.stop()
catch(e)
console.error(e);
render()
return (
<View style=styles.container>
<TouchableOpacity
onPress=this._startRecognizing
style=
backgroundColor: "green",
height: 40,
width: 100,
marginBottom: 10,
>
<Text style=
fontSize: 20,
alignSelf: "center"
>
Starts
</Text>
</TouchableOpacity>
<TouchableOpacity
onPress=this._stopRecognizing
style=
backgroundColor: "red",
height: 40,
width: 100
>
<Text style=
fontSize: 20,
alignSelf: "center"
>
Stop
</Text>
</TouchableOpacity>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
,
);
来自框架内部**
【问题讨论】:
【参考方案1】:41+ 世博会更新
随着 Expo SDK 41 的发布,添加了 config plugins。 3.2.0 release 的 react-native-voice/voice
增加了对配置插件的支持。
像往常一样安装依赖项
yarn add @react-native-voice/voice
然后你必须更新你的app.json
"expo":
"plugins": [
[
"@react-native-voice/voice",
"microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone",
"speechRecogntionPermission": "Allow $(PRODUCT_NAME) to securely recognize user speech"
]
]
您可能需要创建一个新的构建,因为您可能会遇到不变的违规。
您现在应该阅读usage 的文档
——
世博会 40 岁及以上
很遗憾react-native-voice
与 Expo 不兼容。
这样做的原因是 Expo 将原生 ios 和 android 代码从你手中抽象出来,这使得构建和开发变得快速和容易,但缺点是你不能添加需要你使用原生代码的依赖项。
react-native-voice
需要使用本机代码。您可以通过安装说明要求您链接本机代码这一事实来了解这一点。有关文档,请参阅 here。
如果您希望在 Expo 项目中使用此依赖项,则需要将其弹出。您可以在 Expo 文档网站here
上找到有关弹出的更多信息以及这样做的利弊【讨论】:
【参考方案2】:借助 Expo SDK42,您可以使用 react-native-voice
插件,这是他们在文档 here 中提供的内容
【讨论】:
以上是关于我正在做一个项目,我需要将语音翻译成我使用 Expo 和 React-native-voice 的文本的主要内容,如果未能解决你的问题,请参考以下文章