问题描述
我正在尝试创建一个应用程序来转录流式音频记录。这个想法是使用 RecordRTC 捕获用户的麦克风流,并使用 Socket.IO 将其分块发送到 gunicorn 服务器。然后服务器将为 Azure Speech to Text 创建一个输入流:
我正在尝试使用 RecordRTC 在 Azure Speech to Text 接受的 format 中每 x 秒捕获一次音频:
startRecording.onclick = function() {
startRecording.disabled = true;
navigator.getUserMedia({
audio: true
},function(stream) {
recordAudio = RecordRTC(stream,{
type: 'audio',mimeType: 'audio/wav',desiredSampRate: 16000,// accepted sample rate by Azure
timeSlice: 1000,ondataavailable: (blob) => {
socketio.emit('stream_audio',blob); // sends blob to server
console.log("sent blob")
},recorderType: StereoAudioRecorder,numberOfAudioChannels: 1
});
recordAudio.startRecording();
stopRecording.disabled = false;
},function(error) {
console.error(JSON.stringify(error));
});
};
ondataavailable 返回的 blob 似乎返回一个字节字符串。但是,对于 Azure Speech to Text,我更喜欢以波形格式接收块。可以使用 getBlob() 以 WAV 格式检索整个录音,但客户端仅在调用 stopRecording() 后生成文件。
RecordRTC 有没有办法每 x 秒以波形格式返回一个 blob?如果没有,还有哪些其他选项可以通过 Gunicorn 将音频流式传输到 Azure Speech to Text?
非常感谢所有帮助!
解决方法
Frank,您打算使用 Speech SDK 使用推或拉输入流转录音频吗?为此,您不需要 WAV 格式的音频块。您将原始 PCM 以 16khz、16 位/采样单声道的默认格式提供给输入流。见sample code on GitHub。
达伦