AudioContext.createMediaStreamTrackSource()

AudioContext インターフェイスの createMediaStreamTrackSource() メソッドは、指定の MediaStreamTrack からデータを受け取る音源を表す MediaStreamTrackAudioSourceNode (en-US) を作成して返します。

このメソッドは、指定の MediaStream の中の id が辞書順 (アルファベット順) で最初である音声トラックからデータを受け取る MediaStreamAudioSourceNode を作成する createMediaStreamSource() とは異なります。

構文

createMediaStreamTrackSource(track)

引数

track

新しいノードのすべての音声データの取得元として使用する MediaStreamTrack です。

返値

指定の音声トラックから得られる音声データの取得元として働く MediaStreamTrackAudioSourceNode (en-US) オブジェクトを返します。

この例では、ユーザーのマイクへのアクセスを要求するために getUserMedia() を使います。アクセスができるようになると、音声コンテキストを作成し、getUserMedia() が返したストリームの最初の音声トラックから音声を取得する MediaStreamTrackAudioSourceNode (en-US)createMediaStreamTrackSource() により作成します。

そして、createBiquadFilter() により BiquadFilterNode (en-US) を作成し、音源から流れてくる音声にローシェルフフィルターを適用するように意図通り設定します。すると、マイクからの出力が新しい双 2 次フィルターに流れ、フィルターの出力が音声コンテキストの出力先に順に流れるようになります。

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) => {
    // getUserMedia() のエラーを処理する
  });

仕様書

Specification
Web Audio API
# dom-audiocontext-createmediastreamtracksource

ブラウザーの互換性

BCD tables only load in the browser

関連情報