首页 > 解决方案 > Javascript语音识别API在移动设备上不连续

问题描述

所以我一直在开发一个关于反应的应用程序,它使用语音识别,我已经设置它并且在 PC 上运行良好,但是当我在我的手机上尝试它时它运行并且工作但它在转录后停止。

我已启用recognition.continuous = true;

调用语音识别的代码。

    voiceCommands() {
        recognition.onstart = () => {
            console.log('Voice is activated');
        }

        recognition.onresult = (e) => {
            const current = e.resultIndex;
            let transcript = e.results[current][0].transcript;
            let mobileRepeatBug = (current == 1 && transcript == e.results[0][0].transcript);

            if(!mobileRepeatBug) {
                if(transcript === 'next' || transcript === ' next') {
                    this.incrementStep();
                    e.reuslts = {};
                }

                if(transcript === 'back' || transcript === ' back') {
                    this.decrementStep();
                    e.reuslts = {};
                }
            }

        }

        recognition.onspeechend = () => {
            recognition.stop();
            console.log('voice stopped');
        }
    }

更改状态的按钮的代码

    handleVoice() {
        this.setState({
            voice: !this.state.voice
        }, () => {
            if(this.state.voice) {
                recognition.start();
                console.log("Voice started");
            } else {
                recognition.stop();
            }
        });

    }

我的目标是让它连续运行,直到我用按钮禁用它。我不确定这是否与 chrome 如何处理手机上的语音权限有关,以及这是否可能。

任何帮助表示赞赏

标签: javascriptreactjsmobilevoice-recognitioncontinuous

解决方案


您可以在一段时间后重新开始。

recognition.onresult = (e) => {
            const current = e.resultIndex;
            let transcript = e.results[current][0].transcript;
            let mobileRepeatBug = (current == 1 && transcript == e.results[0][0].transcript);

            if(!mobileRepeatBug) {
                if(transcript === 'next' || transcript === ' next') {
                    this.incrementStep();
                    e.results = {};
                }

                if(transcript === 'back' || transcript === ' back') {
                    this.decrementStep();
                    e.results = {};
                }
            }
          setTimeout(() => {
            recognition.start();
          }, 50);

        }


推荐阅读