我编写了一个全双工 ALSA 程序并在基于 linux 的嵌入式系统上运行它。它的声音配置是:
- 采样率:16Hz
- 频道:1(单声道)
- 格式:S16_LE
- 最小可用性:160(帧)
对于实时应用,我需要每 10 毫秒捕获一次声音,所以我将最小可用性设置为 160。
我的问题是:程序运行时,CPU 使用率非常高,可能为 99.9%(通过 top 命令)。有时 CPU 负载很低,但一旦达到 99.9%,就无法回到低 CPU 使用率。
我发现这可能是配置问题。在 asound.conf 文件中(参见后面的代码),我创建了一个名为“asym0”的 asym 类型卡,用于选择两个不同的从卡进行播放和捕获。
最初,我使用“主要”作为捕获设备,但它会导致 CPU 使用率很高。然后我创建了一个名为“rate0”的费率类型卡,并将其设置为捕获设备。CPU 使用率变低,在 20%~60% 之间浮动,但捕获的声音听起来很糟糕。如果我测试麦克风(捕获),我会在我的声音中听到一些“po po po”。
所以...
- 如果我选择“primary”,CPU使用率很高,但没有“po po po”的声音。
- 如果我选择“rate0”,CPU使用率较低,但有“po po po”的声音。
与“type hw”和“type rate”有什么不同?
是中断频率不同造成的影响吗?
asound.conf 文件:
pcm.primary { type hw card mycard } pcm.rate0 { type rate slave { pcm "primary" rate 16000 } } pcm.asym0 { type asym playback.pcm "primary" capture.pcm "primary" or "rate0" }
请任何人帮助我解决这个问题。谢谢!!!