Я работаю над проектом, и мне нужно перевести речь в текст, который я использовал Expo и React-native-voice - PullRequest
0 голосов
/ 21 сентября 2019

Я работаю над проектом, и мне нужно перевести речь в текст, который я использовал Expo и React-native-voice.** [Необработанное отклонение обещания: TypeError: null не является объектом (оценка 'Voice.onSpeechStart = null')] - node_modules \ реагировать-native-voice \ src \ index.js: 23: 10 в removeAllListeners - node_modules \ обещания \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 Ответ

0 голосов
/ 21 сентября 2019

К сожалению react-native-voice не совместимо с Expo.

Причина в том, что Expo абстрагирует от вас нативный код iOS и Android, что позволяет быстро и легко создавать и разрабатывать сборки, но недостатком является то, что вы не можете добавлять зависимости, требующие использования нативныхкод.

react-native-voice требует использования собственного кода.Вы можете убедиться в этом по тому, что в инструкциях по установке требуется указать собственный код.См. здесь для документации.

Если вы хотите использовать эту зависимость в своем проекте Expo, вам нужно будет ее удалить.Вы можете найти больше информации об извлечении, а также о плюсах и минусах этого на веб-сайте документации Expo здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...