React Native -无法同时使用声转文和文转声

nvbavucw  于 2023-01-14  发布在  React
关注(0)|答案(1)|浏览(179)

我同时使用react-native-voice和expo-speech库来转录我的声音,并将文本转换为语音。问题是,当我结束注册我的声音并使用expo-voice开始一个语音时,没有声音。似乎当语音录制结束时,react-native-voice完全静音。但我必须按下麦克风按钮(激活语音识别)才能听到它。
我发现让所有东西一起工作的唯一方法是在文本到语音转换结束后**停止语音录制。下面是代码的一部分:

const startRecognizing = async () => {
    setButtonColor('#38b000');
    // Starts listening for speech for a specific locale
    try {
      await Voice.start('en-EN');
    } catch (e) {
      console.error(e);
    }
  };

  const destroyRecognizer = async () => {
    //Destroys the current SpeechRecognizer instance
    try {
      await Voice.destroy();
    } catch (e) {
      console.error(e);
    }
  };

  const stopRecognizing = async () => {
    setButtonColor('#344E41');
    setTimeout(() => {
      Speech.speak("I did not understand, can you repeat please ?", {
        language: 'en-EN',
        onDone: () => {
          setTimeout(
            async() => {
              await destroyRecognizer();
            }, 1000);
        },
      });
    }, 1000);
  };
return (
    <View style={styles.microphoneButtonContainer}>
        <TouchableOpacity
        onPressIn={startRecognizing}
        onPressOut={stopRecognizing}>
        <Image
            style={styles.microphoneButton}
            source={require('../img/microphone-icon.png')}
            />
        </TouchableOpacity>
    </View>
    );

这个解决方案带来了很多问题,所以我不能用它。没有一个方法来停止记录解决这个问题。我没有找到任何帮助,在图书馆的文档。有解决这个问题的方法吗?谢谢你的帮助!

8oomwypt

8oomwypt1#

因为react-native-voice方法无法解决这个问题,所以我想如果可以修改原生代码,就直接在库中搜索。对于ios,代码在ios/voice/Voice. m中。

- (void) teardown {
    self.isTearingDown = YES;
    [self.recognitionTask cancel];
    self.recognitionTask = nil;
    
    // Set back audio session category
    [self resetAudioSession];

所以我试着注解掉[self resetAudioSession];,然后用npx-pod-install(我用cocoapod)重建包,结果成功了!
这样做可能会导致edgecases,我还没有完全测试的方法,我也没有尝试为android。

相关问题