Angular — проблема с интеграцией собственного API веб-речи

Я пытаюсь интегрировать собственный API веб-речи без любая сторонняя библиотека ngx.

Я смог успешно интегрировать API в свой сервис. Распознавание голоса также работает и может генерировать текст из распознанного голоса. Но единственная проблема, с которой я столкнулся в терминале, есть ошибка -

TypeError: speechRecognition не является конструктором

Вот мой интерфейс для доступа к window -

    export interface IWindow extends Window {
      webkitSpeechRecognition: any;
      webkitSpeechGrammarList: any;
      webkitSpeechRecognitionEvent: any;
      SpeechRecognition: any;
      SpeechGrammarList: any;
      SpeechRecognitionEvent: any;
    }

Вот моя служебная функция, которая запускается в конструкторе служб:

        initializeNativeVoiceRecognition(){
            let speechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;

            this.recognition = new speechRecognition();
            this.recognition.lang = 'en-US';
            this.recognition.interimResults = false;
            this.recognition.maxAlternatives = 1;
        }

Я получаю сообщение об ошибке терминала в следующей строке -

this.recognition = new speechRecognition();

Просто для справки, вот обратные вызовы API веб-речи, которые работают нормально -

        initializeVoiceRecognitionCallback(){
            this.recognition.onresult = (event) => {
                var last = event.results.length - 1;
                var queryText = event.results[last][0].transcript;

                this.voiceText$.next(queryText);
            }

            this.recognition.onspeechend = () => {
                this.voiceActiveSectionStatus$.next(true);
            }

            this.recognition.onnomatch = (event) => {
                this.voiceActiveSectionStatus$.next(true);
                this.voiceText$.next('Voice does not match');
            }

            this.recognition.onerror = (event) => {
                this.voiceActiveSectionStatus$.next(true);
                this.voiceText$.next('Error when recognizing voice');
            }
        }

person user3384985    schedule 21.10.2019    source источник


Ответы (1)


Вам нужно убедиться, что вы сохраняете правильную заглавную букву: это SpeechRecognition() с заглавной S.

Это должно быть правильное утверждение:

let recognition = new window.SpeechRecognition();
person Stak    schedule 21.10.2019
comment
вы можете сказать, какой браузер вы используете? - person Stak; 21.10.2019
comment
Я использую Хром. Ваш обновленный ответ тоже не работает. Кроме того, пробовал с new window.webkitSpeechRecognition() в соответствии с другой проблемой git. Но все еще не работает. - person user3384985; 21.10.2019