获取AudioTrack的音频通道数量

时间:2017-09-15 18:33:28

标签: javascript audio web-audio web-audio-api media-source

我有一个视频元素,通过MSE添加数据。我试图确定每个音轨中有多少音频通道。

AudioTrack对象本身没有包含此信息的属性。我知道的唯一方法是使用Web Audio API:

const v = document.querySelector('video');
const ctx = new OfflineAudioContext(32, 48000, 48000);
console.log(Array.from(v.audioTracks).map((track) => {
  return ctx.createBufferSource(track.sourceBuffer).channelCount;
}));

对于具有单个单声道音轨的视频,我希望获得[1]。对于具有单个立体声音轨的视频,我希望获得[2]。然而,每当我得到[2]时,无论原始来源中的频道数是多少。

问题:

  • 是否有正确的直接方式来获取AudioTrack中的频道数量?
  • 我是否还可以使用Web Audio API来获取正确数量的频道?

1 个答案:

答案 0 :(得分:0)

我偶然发现了一个似乎可行的答案。通过使用decodeAudioData,我们似乎可以获取有关文件的一些缓冲区数据。我构建了一个小函数,该函数返回带有缓冲区数据的Promise,缓冲区数据应返回音频文件的正确通道数:

function loadBuffer(path) {
  return fetch(path)
    .then(response => response.arrayBuffer())
    .then(
      buffer =>
        new Promise((resolve, reject) =>
          audioContext.decodeAudioData(
            buffer,
            data => resolve(data),
            err => reject(err)
          )
        )
    )
}

然后您可以像这样使用它:

loadBuffer(audioSource).then(data => console.log(data.numberOfChannels))

如果可以多次调用,最好存储和重用数据。