javascript - 媒体记录器跨浏览器以 WAV 格式保存
问题描述
Media Recorder为我完成了一个相当复杂的过程以及 Mozilla 上记录的 Web Audio API 的其余部分工作得非常出色。然而。除非我能让它以波形格式一致地录制音频,否则它对我来说毫无用处。我试图在许多浏览器上设置 MimeType,这些浏览器似乎在 Mozilla 不知情的情况下已被弃用,任何设置 mimeType 的尝试,即使使用此处文档中的示例,在任何代码中都不起作用。
如果有人有任何方法可以使用前端处理(不使用服务器中介)将此文件保存为波形,我将非常感激听到它。
可能值得注意的是,只要文件编码是 wav,ogg 格式就对我有用。这个带有源代码的示例直到几天前才在我的浏览器(Brave/Chrome)上运行,之后它开始保存为 webm 格式。
另外,值得注意的是,只要我能够在录制后使用 WebAudioAPI 获取通道数据进行处理,我就不会在这个项目中使用 MediaRecorder 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 的工作人员。
推荐阅读
- python-3.x - 在 SIGINT 的多处理过程中避免管道损坏?
- ios14 - 调用allowSpecificHTTPSCertificateForHost时使用的nil主机 - ionic - ios14
- sql-server - 如何在 Microsoft SQL Server Management Studio 上进行远程调试?
- sql - MySQL 使用 MAX(datetime) 并希望返回一个附加列
- java - 在 Java 中将四元数角转换为欧拉角时出错
- c - 为什么即使标识符未解析,构建也会成功?
- c# - 将 Arduino 与 Unity 一起使用(Arduino Nano 33 IoT)?
- c++ - 库类型的析构函数是否定义良好?
- html - 在选择器中选择后更改按钮中的 href 值
- c++ - str[i] - 'a' 是什么意思?