当使用MediaRecorder API录制音频时,有时会遇到“Blob大小与MediaRecorder的采样率不匹配”的错误。这通常是由于将Blob转换为Buffer之前未正确设置采样率所致。以下是一个示例代码,展示如何设置正确的采样率:
// 创建一个MediaRecorder对象
const mediaRecorder = new MediaRecorder(mediaStream);
const chunks = [];
// 监听dataavailable事件,在Blob可用时将其添加到数组中
mediaRecorder.addEventListener('dataavailable', function(event) {
chunks.push(event.data);
});
// 监听stop事件,在录制停止后将录制的音频整合成一个完整的Blob
mediaRecorder.addEventListener('stop', function() {
const audioBlob = new Blob(chunks, { 'type' : 'audio/wav' });
// 使用FileReader API将Blob转换为Uint8Array数组
const reader = new FileReader();
reader.addEventListener('loadend', function() {
const audioBytes = new Uint8Array(reader.result);
// 设置16kHz的采样率
const audioConfig = {
sampleRateHertz: 16000,
audioChannelCount: 1,
encoding: 'LINEAR16'
};
// 将Uint8Array数组作为参数传递给Speech-to-Text API
const request = {
audio: {
content: audioBytes
},
config: audioConfig
};
// 调用Speech-to-Text API并进行语音识别
const response = await speechToText.recognize(request);
});
reader.readAsArrayBuffer(audioBlob);
});
// 开始录制
mediaRecorder.start();
在上面的示例代码中,我们设置了一个16kHz的采样率,这通常是Speech-to-Text API接受的采样率范围。在使用类似的API时,应在将Blob转换为Buffer之前设置正确的采样率。