首页 > 解决方案 > 媒体记录器跨浏览器以 WAV 格式保存

问题描述

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

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

可能值得注意的是,只要文件编码是 wav,ogg 格式就对我有用。这个带有源代码的示例直到几天前才在我的浏览器(Brave/Chrome)上运行,之后它开始保存为 webm 格式。

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

标签: javascriptaudiowavweb-audio-apimediarecorder-api

解决方案


我构建了一个包,它应该完全符合您的要求。它被称为可扩展媒体记录器。它提供与本机相同的界面,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 的工作人员。


推荐阅读