Javascript 将blob MIME类型设置为wav仍然会导致webM
我按照(第6步之前的代码)制作了一个录音机,如下所示。制作Javascript 将blob MIME类型设置为wav仍然会导致webM,javascript,blob,Javascript,Blob,我按照(第6步之前的代码)制作了一个录音机,如下所示。制作audioBlob后,我调用一个自定义函数来上传blob。此函数适用于其他文件类型 我将{type:'audio/wav'}传递给Blob构造函数。生成的文件实际上是一个wave文件,在浏览器中可以正常播放,但在iOS上不能。我通过检查发现该文件实际上是WebM: 如何确保文件实际上是.wav文件 根据该文章编辑的代码: navigator.mediaDevices.getUserMedia({ audio: true }) .th
audioBlob
后,我调用一个自定义函数来上传blob。此函数适用于其他文件类型
我将{type:'audio/wav'}
传递给Blob
构造函数。生成的文件实际上是一个wave文件,在浏览器中可以正常播放,但在iOS上不能。我通过检查发现该文件实际上是WebM:
如何确保文件实际上是.wav
文件
根据该文章编辑的代码:
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
// Custom upload function
uploadFile(audioBlob);
});
setTimeout(() => {
mediaRecorder.stop();
}, 3000);
});
如何确保该文件实际上是一个.wav文件
非常简单,据我所知,没有浏览器支持本机导出到wav。因此,您可以确保您的文件不是wav文件
Blob构造函数的type
选项仅说明浏览器应如何设置MIME类型以满足进一步的需要(例如,何时将其发送到服务器)。
但它实际上并没有改变作为第一个参数传递的内容
因此,它不会神奇地将您的webm文件转换为其他格式
现在,您确实需要更改MediaRecorder将输出其内容的格式,但支持的格式/编解码器集取决于实现,我认为任何浏览器都不支持opus以外的任何东西,无论是在webm容器中还是在ogg*one(*仅限FF)中
[编辑]:现在实际使用Chrome。
多亏了这种方法,你可以很好地设置你的代码使用这种格式,如果它变得可用的话,但是我个人不会对这种格式抱有太多希望,如果需要输出wav文件,我也会这样做
是否有其他方法将音频/webm或音频/ogg内容转换为音频/wav格式?
const mime = ['audio/wav', 'audio/mpeg', 'audio/webm', 'audio/ogg']
.filter(MediaRecorder.isTypeSupported)[0];
const recorder = new MediaRecorder(stream, {
mimeType: mime
});