Azure Speech SDK: createPushStream из getUserMedia в javascript

#javascript #safari #audio-streaming #getusermedia #azure-speech

#javascript #safari #потоковое аудио #getusermedia #azure-речь

Вопрос:

Я пытаюсь найти примеры того, как использовать объект getUserMedia stream для создания pushstream с помощью Azure Speech SDK. Обратите внимание, что я намерен запускать код в Safari, поэтому использование MediaRecorder невозможно. Цель состоит в том, чтобы использовать getUserMedia stream для передачи обоих SpeechSDK.Распознаватель речи (SpeechSDK.AudioConfig.fromStreamInput) и сохранить поток в виде аудиофайла. SpeechSDK.AudioConfig.fromDefaultMicrophoneInput этого не позволяет.

Ответ №1:

Одним из способов сделать это было бы захватить аудиоданные, отправленные в службу через обратный вызов connection.messageSent. Создайте распознаватель обычным способом (вы должны иметь возможность использовать fromDefaultMicrophoneInput), затем добавьте этот обратный вызов:

     const con: sdk.Connection = sdk.Connection.fromRecognizer(r);

    let wavFragmentCount: number = 0;

    const wavFragments: { [id: number]: ArrayBuffer; } = {};

    con.messageSent = (args: sdk.ConnectionMessageEventArgs): void => {
        if (args.message.path === "audio" amp;amp; args.message.isBinaryMessage amp;amp; args.message.binaryMessage !== null) {
            wavFragments[wavFragmentCount  ] = args.message.binaryMessage;
        }
    };
  

После завершения распознавания wavFragments записывает аудиоданные, которые вы можете записать в файл.

(Этот пример кода был взят из ConnectionTest.ts )

Комментарии:

1. Спасибо! Однако я использую не node, а javascript в браузере. Итак, чтобы получить wav-файл, мне нужно преобразовать его в большой двоичный объект и создать ссылку для скачивания. Я попробовал const blob = new Blob([this.wavFragments]), но он не создает действительный файл wav. Есть идеи о том, как получить большой двоичный объект из этих wavFragments?

2. Теперь я могу ответить на свой собственный вопрос: const blob = new Blob([sentAudio]) создает действительный большой двоичный объект.