Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将blob MIME类型设置为wav仍然会导致webM_Javascript_Blob - Fatal编程技术网

Javascript 将blob MIME类型设置为wav仍然会导致webM

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

我按照(第6步之前的代码)制作了一个录音机,如下所示。制作
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
});