Beagle Bone Black Audio Cape转B同步问题

时间:2014-09-13 20:05:54

标签: beagleboneblack

基本上音响斗篷正在发挥作用。除了一个让我误解的奇怪现象。我会尝试解释。

当我播放.wav文件时,例如speaker-test -t vaw - >如果幸运的话我会听到前左 - 前方正如人们期望的那样。但是,在十分之九的时候,我听到白噪声,前面左前方的音频在背景中非常微弱,或者在另一时间声音被扭曲。当我使用aplay或mplayer播放文件时也会发生同样的情况。

所以,当我很幸运,或者系统时钟的时间同步时,我会清楚地听到音频,如果不同步则可能是白噪声或播放失真。

我有广泛的谷歌,并没有找到任何解决方案。所以我希望你们其中一个人知道这里发生了什么。它必须是低级别的。

我在这件事上相当不错,但根据这个:Troubleshooting Linux Sound所有接缝都能正常工作。

这些是我的系统参数和设置:root @beaglebone:〜#lsb_release -a分销商ID:Angstrom描述:Angstrom GNU / Linux v2012.12(核心版)发布:v2012.12代号:核心版

root@beaglebone:~# cat /sys/devices/bone_capemgr*/slots 0: 54:PF---

1: 55:PF--- 
2: 56:P---L CBB-Relay,00A0,Logic_Supply,CBB-Relay
3: 57:PF--- 
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-L Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-BONE-AUDI-02
root@beaglebone:~# speaker-test -t wav

speaker-test 1.0.25

播放设备是默认的流参数是480​​00Hz,S16_LE,1个频道WAV文件速率设置为48000Hz(请求48000Hz)缓冲区大小范围从128到32768周期大小范围从8到2048使用最大缓冲区大小32768周期=设置了4个period_size = 2048,设置了buffer_size = 32768

0 - 左前方 每期的时间= 0.641097

0 - 左前方 root @ beaglebone:〜#mplayer AxelF.wav MPlayer2 2.0-379-ge3f5043(C)2000-2011 MPlayer Team 162 audio& 361视频编解码器

播放AxelF.wav。检测到的文件格式:WAV格式(libavformat)[wav @ 0xb6082780] max_analyze_duration达到[lavf] stream 0:audio(pcm_s16le), - aid 0加载字幕。

=============================================== =============== [编辑] 强制音频编解码器:疯狂打开音频解码器:[pcm]未压缩PCM音频解码器AUDIO:44100 Hz,2 ch,s16le,1411.2 kbit / 100.00%(比率:176400-> 176400)所选音频编解码器:[pcm] afm:pcm (未压缩的PCM)

=============================================== =============== [编辑] AO:[alsa] 44100Hz 2ch s16le(每个样本2个字节)视频:无视频开始播放... A:1.6(01.6)的15.9(15.8)0.3%

MPlayer被模块中的信号2中断:未知

退出......(退出)

1 个答案:

答案 0 :(得分:1)

我可以了解导致您遇到的文物的原因。对不起,我还没有对策 - 我正在努力解决同样的问题。您可以非常准确地描述可察觉的后果。

声音数据使用I2S总线从ARM系统芯片传输到音频披肩上的音频编解码器。 I2S是一种串行协议,它一次发送一位,以最高有效位开始每个采样,然后将所有位向下发送到最低有效位。在发送一个样本的最低有效位之后,发送下一个音频通道上的样本的最高有效位。为了能够解释比特流,接收音频编解码器需要知道新的声音样本何时以其最高有效位开始,以及每个声音样本属于哪个通道。为此,“单词选择”(WS)信号是I2S的一部分,并更改其值以指示声音样本的开始并且还标识通道,请参阅this I2S timing diagram以更好地理解该概念。

音频编解码器无法解释的比特流可以完全解释你和我在不太工作的音频角上所看到的内容:

当你在背景中听到很大的噪音和目标信号软时,前一个样本的一个或多个最低有效位被解释为当前样本的最高有效位。移位的位越多,目标信号就越软,直到您可能只感知噪声(这是猜测!)大约4位被移位。

当移位在另一个方向时,即当前样本的最高有效位被解释为前一个样本的最低有效位,那么您听到的信号对于信号的软部分来说是正确的,即最大实际上没有使用有效位(这是一种简化,见下文)。对于信号的较大部分,例如鼓声,你会发现丢失的最重要的位是失真。当然,随着更多位向这个方向移动,失真会变得更糟,并从更柔和的级别开始。

在上一段中,最重要的将随着数据的符号而改变,因此实际上未使用的语句仅在最高有效位与下一个最高有效位具有相同值时才有效。柔和的声音。有关如何在计算机中表示负整数的介绍,请参阅Two's Complement

我不确定腐败发生的地方。可能是由于斗篷上的音频编解码器没有正确解释WS信号,或者ARM系统级芯片没有正确发送WS信号,或者在ARM CPU内部可能发生位移,例如,在Alsa司机。