0

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

与 ASIO 的交互是通过AsioDriverListener接口实例完成的。void bufferSwitch(long sampleTime, long samplePosition, Set<AsioChannel> activeChannels)每次想要播放新样本时,ASIO 主机都会调用它的方法。如果我想输出单声道声音,我只需在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>}

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

4

2 回答 2

1

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

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

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

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

如果您使用的是 MacOSX,CoreAudio 确实提供了名称通道和含义音频路由数据。由于 ASIO 作为应用程序和 CoreAudio API 之间的薄包装器,您可以获得它。

于 2013-01-05T19:38:39.900 回答
0

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

于 2013-01-05T18:55:08.330 回答