如何确定哪个频道是左,右等?

时间:2013-01-05 18:33:29

标签: asio audio jvm-languages

所以,我决定使用JAsioHost(https://github.com/mhroth/jasiohost)在我的程序中通过ASIO输出音频。

与ASIO的交互是通过AsioDriverListener接口的实例完成的。每次想要播放新样本时,ASIO主机都会调用其void bufferSwitch(long sampleTime, long samplePosition, Set<AsioChannel> activeChannels)方法。如果我想输出单声道声音,我只需在activeChannels的所有通道中写入相同的数据。但是如果我想制作更复杂的东西并因此需要知道确切的通道配置呢?

在简单测试存根程序(http://pastebin.com/sC870VJR)中,activeChannels集打印如下:

#{#<AsioChannel Output Channel 0: HD Audio output 1, ASIOSTInt32LSB, group 0, inactive>
  #<AsioChannel Output Channel 1: HD Audio output 2, ASIOSTInt32LSB, group 0, inactive>}

所以我可以知道每个频道的索引。问题是 - 如何确定哪个频道真的是左,右,中等等?或者没有办法,我应该把它留给用户,谁会手动告诉他们的位置?

2 个答案:

答案 0 :(得分:1)

ASIO的目的是为多声道音频接口提供高性能抽象。

在它设计的领域 - 也就是专业音频应用 - 通道数通常远高于2,并且任何一对通道是否是立体声总线 - 哪个通道是哪个 - 实际上取决于如何用户已连接其接口的输入和输出。

ASIO API不提供检索通道路由信息的方法 - 例如名称标签或它们所连接的位置。甚至 - 通常情况下 - 音频接口的控制面板软件确实具有这种功能 这是ASIO长期存在的不足之处。

使用一组通道(例如立体声或5.1总线)纯粹是惯例。至少在立体声应用中,左声道通常是顺序对的较低编号的声道。

如果您使用的是MacOSX,CoreAudio确实提供了名称频道和音频路由数据。由于ASIO是应用程序和CoreAudio API之间的瘦包装器,因此您可以获得此功能。

答案 1 :(得分:0)

您可以编写一些代码,仅将音频输出到一个通道(比如通道1),然后聆听播放哪一侧(假设您的装备设置正确)。对每个通道执行相同操作(假设只有两个通道...如果只有两个通道,则可以停止测试一个通道)中心通道与您在问题中引用的“单声道”通道相同。 CHEERS