我编写了一个全双工ALSA程序,并在基于Linux的嵌入式系统上运行它。其声音配置为:
对于实时应用程序,我需要每10ms捕获一次声音,因此将最小可用时间设置为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”的声音。
与“硬件类型”和“类型率”有什么不同?是由不同的中断频率引起的吗?
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" }
[请任何人帮助我解决此问题。谢谢!!!
我编写了一个全双工ALSA程序,并在基于Linux的嵌入式系统上运行它。其声音配置为:采样率:16Hz通道:1(单声道)格式:S16_LE最小可用:160(帧)对于实数]
对于CPU,声音捕获应该是一件非常琐碎的任务,因为大多数声音发生在芯片硬件中,有时它需要启动线程来处理输入音频。通常,如果您的周期或缓冲区非常小,则将需要更多的CPU注意,并且可能会发生超限。超限可能是信号丢失的地方。