【问题标题】:What are the defaults for ALSA's .asoundrc?ALSA 的 .asoundrc 的默认值是什么?
【发布时间】:2021-04-30 19:03:01
【问题描述】:

我在基于 Yocto 的嵌入式 Linux 机器上使用 Qt 5.13.2,特别是 QSoundEffect。 Qt 已配置为使用 ALSA 而不是 PulseAudio。 ALSA 的 aplay 能够流畅地播放 WAV 文件。 QSoundEffect 播放明显断断续续。我一直在尝试调整 .asoundrc 中 ALSA 的配置以使事情顺利进行。例如:

pcm.!default {
    type hw
    card 0
    rate 44100
}

ctl.!default {
    type hw
    card 0
    periods 100
    period_size 4410
    buffer_size 35280
}

这确实解决了播放的断断续续/断断续续的问题,但它也具有阻止同时 QSoundEffect 播放的不良副作用。如果我不使用 .asoundrc 文件,我可以同时播放。但当然,口吃是存在的。

所以,问题是:各种设置的默认值是什么(没有充分记录,顺便说一句)?或者更好的是,我应该查看什么设置?顺便说一句,如果我通过没有 .asoundrc 文件来使用默认值,我会在播放 QSoundEffect 时看到“(snd_pcm_recover) underrun occurred”消息。

【问题讨论】:

  • Qt 代码可能不会过于高效。您需要查看 Qt 源代码,看看是否有一些 QObjects 实现了所有这些可以移动到专用的实时优先级线程。
  • 如果你想要混合音频 - 使用脉冲

标签: qt alsa


【解决方案1】:

我弄清楚了事情的最初部分。首先,无论缓冲区或周期设置是否存在,都存在任何.asoundrc 文件会覆盖/etc/asound.conf 中存在的任何设置。就文档而言,这至少是有道理的。

它需要一些挖掘,但显然我需要的是所谓的混合,默认情况下不会发生混合。幸运的是,ALSA 文档有一个工作示例。

来自alsa-project.org

pcm.!default {
        type plug
        slave.pcm "dmixer"
}

pcm.dmixer  {
        type dmix
        ipc_key 1024
        slave {
                pcm "hw:1,0"
                period_time 0
                period_size 1024
                buffer_size 4096
                rate 44100
        }
        bindings {
                0 0
                1 1
        }
}

ctl.dmixer {
        type hw
        card 0
}

我将它放入.asoundrc 文件并将hw:1,0 更改为hw:0,0,因为我的默认声卡是0。瞧!我现在可以同时播放多个QSoundEffects。

我仍然收到缓冲区不足通知,因此可能需要做一些工作来确定周期大小和缓冲区大小的设置。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2021-10-16
    相关资源
    最近更新 更多