【问题标题】:MediaRecorder No Metadata on DownloadMediaRecorder 没有下载元数据
【发布时间】:2021-03-12 20:43:26
【问题描述】:

我正在使用 MediaRecorder(连同 Web Audio API)来录制和处理音频并下载它生成的 blob。录制和下载效果很好,但是下载文件时没有元数据(长度、采样率、通道等)

我正在使用它来创建 blob,并且我也尝试过 mimetype,但没有成功:

  const blob = new Blob(chunks, {
   'type' : 'audio/wav'
  });
  chunks = [];
  const audioURL = window.URL.createObjectURL(blob);
  audio.src = audioURL;
  console.log("recorder stopped");

  var new_file = document.getElementById('downloadblob').src
  var download_link = document.getElementById("download_link");
  download_link.href = new_file;
  var name = generateFileName();
  download_link.download = name;

如何确保下载中包含录音的长度、采样率和其他元数据?

【问题讨论】:

  • 你用的是什么浏览器?我用 Chrome 尝试过类似的东西,我认为它只支持 webm。 Firefox 说它正在保存一个 wav 文件,但它似乎实际上是一个 Ogg 文件。 webm 文件没有持续时间,但有采样率并且是立体声的。 Firefox 生成一个包含持续时间、比特率、采样率和通道数的文件。
  • 我在 Chrome 中。即使我必须计算长度和通道也可以。不过,我不确定如何将该信息传递给 blob 或下载链接。

标签: web-audio-api mediarecorder


【解决方案1】:

我不知道有任何浏览器允许您将某些内容记录为audio/wav。您可以从 MediaRecorder 的实例中获取录制的 mimeType。

const blob = new Blob(chunks, {
    'type': mediaRecorder.mimeType
});

请注意,只有在调用mediaRecorder.start() 时省略timeslice 参数,长度才会正确。否则浏览器在生成元数据时不知道文件的最终长度。

【讨论】:

  • 感谢您的回复!我尝试将类型更改为 mediaRecorder.mimeType 但现在我正在获取 .weba 文件。当我在类型部分有“音频/wav”时,它会下载文件并播放,但在我的 DAW(专业工具)中没有可使用的元数据。
  • 疯狂的是我可以获取文件,将其上传到另一个页面上,在该页面上我使用网络音频 API 处理数据,然后我可以将其下载为带有元数据的编码 wav 文件.只有在尝试使用 MediaRecorder 时我才会遇到这种情况。
  • 如何对 wav 文件进行编码?你自己?
  • 是的,我试图模仿这个过程,但它是围绕读取上传的文件(从输入标签)构建的。
  • 如果您在创建 MediaRecorder 时未指定 mimeType,它将立即在 Chrome 中为音频流生成一个 webm 文件。你以后不能改变它。我只能假设使用 Web Audio API 处理数据的其他站点做了什么,但我猜它会重新编码数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2016-08-30
  • 2023-03-21
  • 2019-12-10
  • 2012-03-13
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多