我正在尝试在我的 Angular 项目中录制音频。为此,我使用 MediaStream Recording API (https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API)。
它确实记录了我的音频输入,我可以根据我提供的类型下载音频文件。为此,我正在使用这段代码。
navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(stream => {
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
this.translate(audioChunks);
};
this.stopRecording = setTimeout(async() => {
await mediaRecorder.stop();
}, 5000);
});
blob = new Blob(audio, { 'type' : 'audio/x-flac; rate=44100; codecs=opus' });
url = window.URL.createObjectURL(blob);
之后,我将数据作为 byteArray 发送到我的 REST API,并使用 (https://www.google.com/speech-api/v2/recognize?)
将其发送到 Google Speech API v2现在,当我自己创建音频文件时,这是有效的,但是当我使用 MediaRecorder 时,我得到的响应是空的。现在我检查了音频文件属性,发现缺少一些属性(音频长度和比特率)。除了属性之外,我确实听到了这些文件的音频。
有什么方法可以添加这些属性或者有更好的 API 我可以使用它吗?
正在处理类似的案例,并且语音 API 具有相同的空响应
您能否验证您创建的 blob 对象中是否有某些内容? 我使用
onstop
创建 blob,然后将其转换为 base64 并传递给请求。 (拆分并省略第一部分,即标题)
mediaRecorder.onstop = (e) => {
const blob = chunks[0];//new Blob(chunks, { 'type': 'audio/webm;codec=opus' });
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
const base64data = reader.result;
console.info('sending request to gcloud');
expect(base64data).to.exist;
gCloudRequest(base64data.split(',')[1])
我遇到了类似的问题。
首先,添加错误处理程序
mediaRecorder.onerror = console.warn.bind(console, 'mediaRecorder error');
当您收到实际错误时,可能与我的错误相同:“视频编码失败。”。
然后尝试通过任何你喜欢的
options.mimeType
。一种与默认不同的方法有望发挥作用。