我正在接受麦克风输入并对其进行处理以对数据进行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文件。