Речь к тексту в React Native с реакции-native-community / voice - PullRequest
1 голос
/ 13 апреля 2020

Я хочу преобразовать голос в текст и получить текст в результате с помощью распознавания голоса.

Я использую реагировать-родной-сообщество / голос ( Пример )

После сборки проекта и установки apk на мой телефон и нажатия кнопки записи, я получаю следующая ошибка:

Ошибка: {"message": "5 / Ошибка на стороне клиента"}

ПРИМЕЧАНИЕ : я добавил следующее разрешение в AndroidManifest:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

это мой код ():

import React, { Component, useState, useEffect } from 'react';
import { StyleSheet, Text, View, Image, TouchableHighlight } from 'react-native';

import Voice from '@react-native-community/voice';

const App = (props) => {
  const [voiceState, setVoiceState] = useState({
    recognized: '',
    pitch: '',
    error: '',
    end: '',
    started: '',
    results: [],
    partialResults: [],
  })

  useEffect(() => {
    Voice.onSpeechStart = onSpeechStart;
    Voice.onSpeechRecognized = onSpeechRecognized;
    Voice.onSpeechEnd = onSpeechEnd;
    Voice.onSpeechError = onSpeechError;
    Voice.onSpeechResults = onSpeechResults;
    Voice.onSpeechPartialResults = onSpeechPartialResults;
    Voice.onSpeechVolumeChanged = onSpeechVolumeChanged;

    Voice.destroy().then(Voice.removeAllListeners);
  }, [])


  const onSpeechStart = (e) => {
    console.log('onSpeechStart: ', e);
    setVoiceState({ ...voiceState, started: '√', })
  };

  const onSpeechRecognized = (e) => {
    console.log('onSpeechRecognized: ', e);
    setVoiceState({
      ...voiceState, recognized: '√',
    })
  };

  const onSpeechEnd = (e) => {
    console.log('onSpeechEnd: ', e);
    setVoiceState({
      ...voiceState, end: '√',
    })
  };

  const onSpeechError = (e) => {
    console.log('onSpeechError: ', e);
    setVoiceState({
      ...voiceState, error: JSON.stringify(e.error)
    })
  };

  const onSpeechResults = (e) => {
    console.log('onSpeechResults: ', e);
    setVoiceState({
      ...voiceState, results: e.value,
    })
  };

  const onSpeechPartialResults = (e) => {
    console.log('onSpeechPartialResults: ', e);
    setVoiceState({
      ...voiceState, partialResults: e.value,
    })
  };

  const onSpeechVolumeChanged = (e) => {
    console.log('onSpeechVolumeChanged: ', e);
    setVoiceState({
      ...voiceState, pitch: e.value,
    })
  };

  const _startRecognizing = async () => {
    setVoiceState({
      ...voiceState,
      recognized: '',
      pitch: '',
      error: '',
      started: '',
      results: [],
      partialResults: [],
      end: '',
    })
    try {
      await Voice.start('en-US');
    } catch (e) {
      console.error(e);
    }
  };

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

  const _cancelRecognizing = async () => {
    try {
      await Voice.cancel();
    } catch (e) {
      console.error(e);
    }
  };

  const _destroyRecognizer = async () => {
    try {
      await Voice.destroy();
    } catch (e) {
      console.error(e);
    }
    setVoiceState({
      ...voiceState,
      recognized: '',
      pitch: '',
      error: '',
      started: '',
      results: [],
      partialResults: [],
      end: '',
    })
  };

  return (
    <View style={styles.container}>
      <Text style={styles.welcome}>Welcome to React Native Voice!</Text>
      <Text style={styles.instructions}>
        Press the button and start speaking.
    </Text>
      <Text style={styles.stat}>{`Started: ${voiceState.started}`}</Text>
      <Text style={styles.stat}>{`Recognized: ${
        voiceState.recognized
        }`}</Text>
      <Text style={styles.stat}>{`Pitch: ${voiceState.pitch}`}</Text>
      <Text style={styles.stat}>{`Error: ${voiceState.error}`}</Text>
      <Text style={styles.stat}>Results</Text>
      {voiceState.results.map((result, index) => {
        return (
          <Text key={`result-${index}`} style={styles.stat}>
            {result}
          </Text>
        );
      })}
      <Text style={styles.stat}>Partial Results</Text>
      {voiceState.partialResults.map((result, index) => {
        return (
          <Text key={`partial-result-${index}`} style={styles.stat}>
            {result}
          </Text>
        );
      })}
      <Text style={styles.stat}>{`End: ${voiceState.end}`}</Text>
      <TouchableHighlight onPress={_startRecognizing}>
        <Image style={styles.button} source={require('../assets/voice-recording.png')} />
      </TouchableHighlight>
      <TouchableHighlight onPress={_stopRecognizing}>
        <Text style={styles.action}>Stop Recognizing</Text>
      </TouchableHighlight>
      <TouchableHighlight onPress={_cancelRecognizing}>
        <Text style={styles.action}>Cancel</Text>
      </TouchableHighlight>
      <TouchableHighlight onPress={_destroyRecognizer}>
        <Text style={styles.action}>Destroy</Text>
      </TouchableHighlight>
    </View>
  );
}
...