我有一个视频元素,通过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]
时,无论原始来源中的频道数是多少。
问题:
答案 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))
如果可以多次调用,最好存储和重用数据。