MediaStreamから音声ストリームを取り出して左右に振り分けたストリームを作成する

1 min read読了の目安(約800字

WebRTCなどで利用するMediaStreamから音声ストリームを取り出して左右(LR)に振り分けたストリームを作成するコード(スニペット)。

function getAudioStream(stream, channel){
  const audioCtx = new AudioContext();
  const dest = audioCtx.createMediaStreamDestination();
  const merger = audioCtx.createChannelMerger(2);
  stream.getAudioTracks().forEach((track, index) => {
    const stream = new MediaStream([track]);
    const mutedAudio = new Audio();
    mutedAudio.muted = true;
    mutedAudio.srcObject = stream;
    mutedAudio.play();
    const source = audioCtx.createMediaStreamSource(stream);
    source.connect(merger, 0, channel);
  })
  merger.connect(dest);
  return dest.stream;
}

channel = 0 で左(Left)に振る

getAudioStream(stream, 0)

channel = 1 で右(Right)に振る

getAudioStream(stream, 1)

もっとスマートな方法があるかも?

参考

以下のサイトを参考にしました。

https://knowledge.sakura.ad.jp/26572/