Javascript 语音识别 API 在移动设备上不连续

Javascript Speech Recognition API not continuous on mobile device

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

我启用了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 如何处理 phone 上的语音权限有关,以及这是否可能。

感谢任何帮助

你可以间隔一段时间再开始。

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);

        }