2013-01-05 46 views
0

因此,我决定在我的程序中使用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>} 

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

+0

规格说明是什么? –

回答

1

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

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

ASIO API不提供检索渠道的路由信息​​的方法 - 例如名称标签或它们连接的位置。即使 - 正如往常一样 - 音频接口的控制面板软件确实有这个功能。
这是ASIO长期以来的赤字。

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

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

0

您可以编写一些代码,将音频输出到只有一个通道(比如通道1),并听取播放哪一边(假设您的钻机设置正确)。对每个通道做相同的处理(假设不止两个通道...如果只有两个通道,则可以停止测试一个通道)中心通道与您在问题中提及的“单声道”通道相同。 CHEERS

+0

当然,我可以。但是在不同的系统上可能会有所不同,对吧? –

+0

当然,如果有人认为正确的频道是他们硬件上的左侧,那么频道将是“不同的”。没有办法保证别人会做什么。所以我的建议与“了解”软件作者的想法一样好。但是,如果设置正确,并且软件的用户连接正确,则应该具有与预期相同的体验。干杯! –

相关问题