如何在已处理的音频上使用 MediaRecorder API?
How do I use the MediaRecorder API on processed audio?
我正在获取麦克风输入并对其进行处理以对数据进行 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
。它被称为 extendable-media-recorder. There is an example in the readme,展示了如何使用它来录制 wav 文件。
我正在获取麦克风输入并对其进行处理以对数据进行 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
。它被称为 extendable-media-recorder. There is an example in the readme,展示了如何使用它来录制 wav 文件。