ALSA - 首先采样哪个通道

时间:2014-08-18 07:23:44

标签: audio buffer alsa

我有两个模拟音频通道(左和右)连接到ALSA设备,我让声卡进行采样。

结果是一个交错音频的数字流。当我尝试播放它时,我的问题就出现了。一旦这些渠道被交换,一旦没有。看起来这取决于首先采样的频道,或者在比赛开始时按时采样。

澄清我的情况:

我有三张声卡:卡A和B正在采样模拟音频,然后我从卡中通过LAN发送一个数字化音频通道。例如,我只从卡A向卡C发送左声道,同时我从卡B向卡C发送右声道。

在卡C上,我将这些数据包重新组合为交错流。所以我采取第一个样本(来自卡A)然后从卡B采样。这样我可以像交错音频一样播放这个缓冲区。然后,卡C从该缓冲区播放数据。鉴于声卡开始播放样本到左声道,那我应该没有问题。但有时它会交换频道,我无法弄清楚原因。

我用ARM处理器控制这一切。

有没有办法可以访问ALSA的内部帧缓冲区,或者如何说先播放流中的内容?

它引出了另一个问题,例如wav格式的播放器如何知道左边的数据部分是什么,右边的频道是什么?

1 个答案:

答案 0 :(得分:0)

WAV相当简单:通道以LSB顺序存储,它们出现在dwChannelMask中(列出任何扬声器的位掩码)。因此,如果位掩码为0x3,则设置位0和1,并且您在WAV中有两个音频流:第一个是左(位掩码0x1),第二个是右(位掩码0x2)。如果位掩码是0xB,则会有第三个音频流,一个低音通道(0x8)。

ALSA是Linux Audio,而且设计不合理。没有 内部ALSA streambuffer这样的东西。