可以使用 JavaScript 记录浏览器音频元素的播放吗?

Posted

技术标签:

【中文标题】可以使用 JavaScript 记录浏览器音频元素的播放吗?【英文标题】:Possibility to record playback of browser audio element using JavaScript? 【发布时间】:2021-04-15 21:21:07 【问题描述】:

我目前正在开发一个简单的音频项目,它使用 html / JS 音频元素通过按钮播放音频。

是否可以录制正在播放的音频而不是录制麦克风(通过使用 MediaRecorder API)?

【问题讨论】:

这可以通过 Web 音频 API 实现,而不是音频元素。首先,您将通过音频上下文 convert the audio to an AudioBuffer,然后是 set that buffer on a BufferSource,其中 connects to a MediaStreamDestination,然后您可以最终将其传递给 MediaRecorder。然后,您可以通过 BufferSource 控制音频,而不是 HTML/JS 元素。 好的,我会调查的,谢谢。是否也可以使用多个流并一起录制? 【参考方案1】:

按照lawrence-witt提供的步骤,我想通了。这里是每个试图实现相同目标的示例:

const audioContext = new AudioContext();
const destination = audioContext.createMediaStreamDestination();
const mediaRecorder = new MediaRecorder(destination.stream);

// array of 'new Audio()' elements
audioArray.forEach(audio => 
    let stream = audioContext.createMediaStreamSource(audio.captureStream());
    stream.connect(destination);
)

mediaRecorder.start();

【讨论】:

以上是关于可以使用 JavaScript 记录浏览器音频元素的播放吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android 浏览器在每次 play() 后卸载 HTML5 音频元素,导致延迟

使用 Javascript 播放音频元素 (html5)

使用Javascript播放数组序列音频文件[重复]

仅使用 javascript 和 html 以具有跨浏览器功能的 html 音频录制

通过网络将系统音频流式传输到 Web 浏览器 (javascript)

是否可以将使用 javascript 生成的 html 音频录制到后端的音频文件中?