【问题标题】:Media Recorder Save in WAV format across browsers媒体记录器跨浏览器以 WAV 格式保存
【发布时间】:2020-12-07 23:58:02
【问题描述】:

Media Recorder 为我完成了一个相当复杂的过程以及 Mozilla 上记录的 Web Audio API 的其余部分工作得非常出色。然而。除非我能让它以波形格式一致地录制音频,否则它对我来说毫无用处。我试图在许多浏览器上设置 MimeType,但在 Mozilla 不知情的情况下,这些浏览器似乎已被弃用,即使使用文档 here 中的示例来设置 mimeType 的任何尝试在任何代码中都不起作用。

如果有人可以使用前端处理(不使用服务器中介)将此文件保存为波形,我将非常感激。

可能值得注意的是,只要文件编码是 wav,ogg 格式就对我有用。 This examplesource code 直到几天前在我的浏览器(Brave/Chrome)上工作,之后它开始保存为 webm 格式。

另外,值得注意的是,只要我能够在录制后使用 WebAudioAPI 获取通道数据以进行处理,我就不会在此项目中使用 MediaRecorder API。

【问题讨论】:

    标签: javascript audio wav web-audio-api mediarecorder-api


    【解决方案1】:

    我构建了一个包,它应该完全符合您的要求。它被称为extendable-media-recorder。它提供与原生MediaRecorder 相同的界面,但允许使用自定义编解码器“扩展”它。示例编解码器是 wav。

    您可以使用它来记录来自getUserMedia() 的流:

    import { MediaRecorder, register } from 'extendable-media-recorder';
    import { connect } from 'extendable-media-recorder-wav-encoder';
    
    await register(await connect());
    
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    const mediaRecoder = new MediaRecorder(stream, { mimeType: 'audio/wav' });
    

    它将使用内置的MediaRecorder在Chrome中记录pcm数据。在 Firefox 和 Safari 中,Web Audio API 用于获取 pcm 数据。一旦数据被检索到,它就会被发送给一个将其解码为 wav 的工作人员。

    【讨论】:

    • 哇,拿着那个 Chris 摇滚,你是我最喜欢的 Chris。我只是在测试,如果一切顺利,我会标记为正确的。
    • 你打算写import {MediaRecorder, register} from 'extendable-media-recorder';吗?我现在有它并且它正在工作。我已经确认没有这个添加它不起作用。编辑队列已满,否则我会自己更改您的答案。
    • 非常感谢您让我意识到这个错误。我刚刚修复了示例代码。我直接从readme 复制了它。你想在那里修还是我应该修?
    • 我遇到了一个问题,我想将其报告为库中的一个问题,看来本机 MediaRecorder 也在运行,我收到“未处理的拒绝(错误):没有实例使用给定 ID 存储的编码器。”错误
    • 能否请您在 GitHub (github.com/chrisguttandin/extendable-media-recorder/issues/new) 上打开一个问题,并最好添加一些我可以运行的步骤来重现问题?谢谢。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多