媒体录音机跨浏览器以 WAV 格式保存

Wor*_*ter 10 javascript audio wav mediarecorder-api web-audio-api

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

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

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

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

chr*_*din 18

我构建了一个包,它应该完全满足您的要求。它称为可扩展媒体记录器。它提供与本机相同的接口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' });
Run Code Online (Sandbox Code Playgroud)

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