【发布时间】:2017-09-15 18:33:28
【问题描述】:
我有一个视频元素,其中的数据是通过 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 做些什么来获得正确数量的通道吗?
【问题讨论】:
-
我认为在单声道上两个通道是一样的,对吧?
-
@KilianHertel 是的,但这并没有告诉我任何有关底层频道数的信息。我可以对音频进行采样,它可能是单声道的,然后是立体声的。即使在两个频道一直相同的情况下,如果有两个频道,我仍然想报告有两个频道。
-
那么你为什么不把每个频道的第一部分拿来相互比较呢?如果它们相同,则它们是单声道,否则它们是立体声。例如 myArrayBuffer.getChannelData(channel);换句话说,您必须自己制作一个不容易的方法,但这是可能的。
-
单声道总是在两个声道上运行,否则您将听不到两个扬声器上的音乐。
-
正如我所说,我想检测媒体数据中的实际频道数。比较它们并不能告诉我任何事情。我可以有两个相同的通道,比较会告诉我它是单声道的,但底层源实际上是立体声。
标签: javascript audio web-audio-api media-source