如何使用MediaRecorder API处理音频?



我正在接受麦克风输入并对其进行处理以对数据进行FFT,但其细节与此问题无关。我当前代码的粗略概述:

const microphone = await navigator.mediaDevices.getUserMedia({video: false, audio: true});
const context = new AudioContext();
const stream = context.createMediaStreamSource(microphone);
const processor = context.createScriptProcessor(BUFFER_BYTES, 1, 1);
const analyser = context.createAnalyser();
// ...
stream.connect(analyser);
analyser.connect(processor);
processor.connect(context.destination);

我还想把这个音频记录到.wav文件中。我该怎么做呢?是否有可能复制我的麦克风输入流,以便我可以通过我目前使用的节点处理它,并通过MediaRecorder进行记录?或者我可以简单地添加一个MediaRecorder作为一个节点在我的音频管道?

您可以使用MediaStreamAudioDestinationNode再次获得作为MediaStream的处理音频。它可以这样创建:

const mediaStreamDestination = context.createMediaStreamDestination();

然后您可以将processor连接到mediaStreamDestination

processor.connect(mediaStreamDestination);

mediaStreamDestination提供的流可以用来创建MediaRecorder

const mediaRecorder = new MediaRecorder(mediaStreamDestination.stream);

遗憾的是没有浏览器支持录制wav文件开箱即用。但是我创建了一个可以用来扩展的包。自带自定义编解码器的原生MediaRecorder。它被称为可扩展媒体记录器。在自述文件中有一个例子,它展示了如何使用它来记录wav文件。

最新更新