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

与ASIO的交互是通过AsioDriverListener接口(interface)的实例完成的。 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>}

这样我就可以知道每个 channel 的索引。问题是-如何确定哪个通道是真正的左,右,居中等等?。还是没有办法,我应该将其留给用户,谁会手动告诉他们位置?

最佳答案

ASIO的目的是为多通道音频接口(interface)提供高性能的抽象。

在它设计的 Realm (即专业音频应用程序)中,通道数通常远高于两个,并且任何一对通道是否为立体声总线-哪个通道是-真正取决于用户的连接方式接口(interface)的输入和输出。

ASIO API没有提供检索通道路由信息的方法,例如名称标签或它们的连接位置。甚至(通常是这样),音频接口(interface)的控制面板软件确实具有此功能。
这一直是ASIO的长期亏损。

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

如果您使用的是MacOSX,CoreAudio会同时提供名称通道和含义的音频路由数据。由于ASIO充当应用程序和CoreAudio API之间的薄薄包装,因此您可以获取此信息。

关于asio - 如何确定左,右等 channel ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14174968/

10-13 09:28