AudioContext: createMediaStreamSource() 方法

基线 广泛可用

此功能已久经考验,可在许多设备和浏览器版本中使用。它自 2021 年 4 月.

报告反馈

createMediaStreamSource() 方法是 AudioContext 接口的方法,用于创建一个新的 MediaStreamAudioSourceNode 对象,该对象使用媒体流(例如来自 MediaDevices.getUserMedia 实例的媒体流),其音频可以播放和操作。

语法

有关媒体流音频源节点的更多详细信息,请查看 MediaStreamAudioSourceNode 参考页面。
createMediaStreamSource(stream)

js

参数

stream

一个 MediaStream,用作要馈送到音频处理图以供使用和操作的音频源。

返回值

示例

一个新的 MediaStreamAudioSourceNode 对象,表示从指定源流获取其媒体的音频节点。

在此示例中,我们从 navigator.getUserMedia 获取媒体流(音频+视频),将媒体馈送到 <video> 元素以播放,然后静音音频,但也将音频馈送到 MediaStreamAudioSourceNode。接下来,我们将此源音频馈送到低通 BiquadFilterNode(它实际上用作低音增强器),然后馈送到 AudioDestinationNode

<video> 元素下方的范围滑块控制低通滤波器的增益量 - 增加滑块的值,使音频声音更低沉!

有关媒体流音频源节点的更多详细信息,请查看 MediaStreamAudioSourceNode 参考页面。
const pre = document.querySelector("pre");
const video = document.querySelector("video");
const myScript = document.querySelector("script");
const range = document.querySelector("input");

// getUserMedia block - grab stream
// put it into a MediaStreamAudioSourceNode
// also output the visuals into a video element

if (navigator.mediaDevices) {
  console.log("getUserMedia supported.");
  navigator.mediaDevices
    .getUserMedia({ audio: true, video: true })
    .then((stream) => {
      video.srcObject = stream;
      video.onloadedmetadata = (e) => {
        video.play();
        video.muted = true;
      };

      // Create a MediaStreamAudioSourceNode
      // Feed the HTMLMediaElement into it
      const audioCtx = new AudioContext();
      const source = audioCtx.createMediaStreamSource(stream);

      // Create a biquadfilter
      const biquadFilter = audioCtx.createBiquadFilter();
      biquadFilter.type = "lowshelf";
      biquadFilter.frequency.value = 1000;
      biquadFilter.gain.value = range.value;

      // connect the AudioBufferSourceNode to the gainNode
      // and the gainNode to the destination, so we can play the
      // music and adjust the volume using the mouse cursor
      source.connect(biquadFilter);
      biquadFilter.connect(audioCtx.destination);

      // Get new mouse pointer coordinates when mouse is moved
      // then set new gain value

      range.oninput = () => {
        biquadFilter.gain.value = range.value;
      };
    })
    .catch((err) => {
      console.log(`The following gUM error occurred: ${err}`);
    });
} else {
  console.log("getUserMedia not supported on your browser!");
}

// dump script to pre element

pre.textContent = myScript.textContent;

注意:您可以 查看运行中的示例,或 查看源代码

规范

注意:调用 createMediaStreamSource() 的结果是,媒体流的音频播放将重新路由到 AudioContext 的处理图中。因此,仍可以通过媒体元素 API 和播放器控件播放/暂停流。
Web 音频 API
# 规范

浏览器兼容性

dom-audiocontext-createmediastreamsource

另请参阅