【发布时间】:2023-04-09 09:10:01
【问题描述】:
我编写了一个全双工 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" }
请任何人帮助我解决这个问题。谢谢!!!
【问题讨论】:
-
您的硬件实际支持哪些格式/通道/速率?
-
它支持 16/24 位线性、单声道左/右或立体声通道以及 16kHz 和 48kHz 的采样宽度。
-
请同时显示
arecord -v -fdat -c1 -D primary something.wav和arecord -v -fdat -c1 -D rate0 something.wav的输出。
标签: c linux audio alsa libasound