AudioContext:createMediaStreamTrackSource() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

createMediaStreamTrackSource() 方法是 AudioContext 接口的一部分,它会创建一个并返回一个 MediaStreamTrackAudioSourceNode,该节点代表一个音频源,其数据来自指定的 MediaStreamTrack

这与 createMediaStreamSource() 不同,后者会创建一个 MediaStreamAudioSourceNode,其音频来自指定 MediaStream 中的音频轨道,该轨道具有按字典顺序(字母顺序)排在第一位的 id

语法

js
createMediaStreamTrackSource(track)

参数

track

用于作为新节点所有音频数据源的 MediaStreamTrack

返回值

一个 MediaStreamTrackAudioSourceNode 对象,它充当指定音频轨道中找到的音频数据的源。

示例

在此示例中,getUserMedia() 用于请求访问用户的麦克风。一旦获得该访问权限,就会建立一个音频上下文,并使用 createMediaStreamTrackSource() 创建一个 MediaStreamTrackAudioSourceNode,其音频来自 getUserMedia() 返回的流中的第一个音频轨道。

然后使用 createBiquadFilter() 创建一个 BiquadFilterNode,并根据需要对其进行配置,以对来自源的音频执行低架滤波器。然后,麦克风的输出被路由到新的双二阶滤波器,而滤波器的输出又被路由到音频上下文的 destination

js
navigator.mediaDevices
  .getUserMedia({ audio: true, video: false })
  .then((stream) => {
    audio.srcObject = stream;
    audio.onloadedmetadata = (e) => {
      audio.play();
      audio.muted = true;
    };

    const audioCtx = new AudioContext();
    const audioTracks = stream.getAudioTracks();
    const source = audioCtx.createMediaStreamTrackSource(audioTracks[0]);

    const biquadFilter = audioCtx.createBiquadFilter();
    biquadFilter.type = "lowshelf";
    biquadFilter.frequency.value = 3000;
    biquadFilter.gain.value = 20;

    source.connect(biquadFilter);
    biquadFilter.connect(audioCtx.destination);
  })
  .catch((err) => {
    // Handle getUserMedia() error
  });

规范

规范
Web Audio API
# dom-audiocontext-createmediastreamtracksource

浏览器兼容性

另见