ALSA捕获导致CPU使用率高

问题描述 投票:1回答:1

我编写了一个全双工ALSA程序,并在基于Linux的嵌入式系统上运行它。其声音配置为:

  • 采样率:16Hz
  • 频道:1(单声道)
  • 格式:S16_LE
  • 最小可用:160(帧)

对于实时应用程序,我需要每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(帧)对于实数]

c linux audio alsa libasound
1个回答
0
投票

对于CPU,声音捕获应该是一件非常琐碎的任务,因为大多数声音发生在芯片硬件中,有时它需要启动线程来处理输入音频。通常,如果您的周期或缓冲区非常小,则将需要更多的CPU注意,并且可能会发生超限。超限可能是信号丢失的地方。

© www.soinside.com 2019 - 2024. All rights reserved.