我想将来自麦克风的Blob
格式的数据音频转换成另一种(占用空间少)格式。
我在GitHub上发现了this project,它的功能与我想要的非常接近,但问题是我通过以下方式获取音频数据:
navigator.mediaDevices.getUserMedia
then
rec = new MediaRecorder(stream);
rec.ondataavailable = e => {
.......
audioChunks.push(e.data);
if (rec.state == "inactive") {
let blob = new Blob(audioChunks,{type:'audio/x-mpeg-3'});
.....
我发现的项目以不同的方式处理数据音频:
navigator.getUserMedia({audio: true}, function(stream) {
callback(new RecorderObject(audio_context.createMediaStreamSource(stream), cfg));
}, function(e) {
console.log("An error occurred"); //Null if something goes wrong
callback(null);
});
因此,将我在GitHub项目中看到的内容用于自己的项目似乎很复杂。 如果有人精通该主题并且可能知道我所指的项目,我会很高兴能告诉我,是否有某种方法可以使该项目完成的工作适应我自己的需求。
答案 0 :(得分:1)
第一个示例已经在执行您想要的操作。 MediaRecorder包括编解码器支持。
该行:
let blob = new Blob(audioChunks, {type: 'audio/x-mpeg-3'});
应为:
let blob = new Blob(audioChunks, {type: rec.mimeType});
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/mimeType
还要注意,对于较旧的浏览器,mimeType
属性可能不存在。对于这些,只需使用相同的类型初始化MediaRecorder。
new MediaRecorder(stream, {mimeType: 'audio/webm'})
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/MediaRecorder
第二个示例是使用Web Audio API记录PCM数据……一种不再需要的技术,尤其是MediaRecorder现在在WebM中支持PCM。