#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]) создает действительный большой двоичный объект.