为我的嵌入式设备定义一个干净且有效的 asound.conf

Posted

技术标签:

【中文标题】为我的嵌入式设备定义一个干净且有效的 asound.conf【英文标题】:Define a clean and working asound.conf for my embedded device 【发布时间】:2019-07-14 00:06:38 【问题描述】:

我目前正在使用来自参考设计 BSP 的非常复杂的 asound.conf 文件。我想定义我自己的 asound.conf。

我目前对嵌入式设备的需求: 仅以 44100 Hz 速率播放单声道文件。在扬声器模式下,我只有一个输出扬声器。 当我插入一个插孔时,我必须能够听到两个耳机上的声音。 我还需要能够以 11500 Hz 的速率从麦克风录制声音。

我可用的声卡:

# aplay  -l
**** List of PLAYBACK Hardware Devices ****
card 0: wm8960audio [wm8960-audio], device 0: HiFi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: wm8960audio [wm8960-audio], device 1: HiFi-ASRC-FE (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
# 

我没有在输出和输入之间使用相同的速率。但是 ASRC 设备可以让我在不同的速率下保持良好的性能。这就是为什么我想使用设备 1 而不是设备 0。

我尝试将我的配置定义如下:

# cat /etc/asound.conf 
pcm_slave.out 
                pcm 
                        type hw
                        card 0
                        device 1
                
                channels 2
                period_time 0
                period_size 512
                buffer_size 1024
                rate 44100


pcm.out_mono 
        ipc_key 1042
        type dmix
        slave out
        bindings.0 0
        bindings.0 1


pcm_slave.in 
                pcm 
                        type hw
                        card 0
                        device 1
                
                channels 2
                rate 11025


pcm.in_mono 
        ipc_key 1043
        type dsnoop
        slave in
        bindings.0 1

它与扬声器配合得很好(所以只有一个扬声器),cpu 性能非常好。我使用 out_mono pcm 播放声音。 但是当我使用 in_mono pcm 时,我只能在插孔模式下听到一个耳机中的声音。在 asound.conf 中,我试图说我想重定向两个输出上的单声道声音,但它不起作用:

    bindings.0 0
    bindings.0 1

第二行绑定正在擦除第一行......所以我正在寻找一种能够在两个输出端听到声音的方法。当然,如果我使用 default pcm 而不是 out_mono,声音在两个输出端都可以正常工作。

我是否误解了合理的 conf 定义中的某些内容?

【问题讨论】:

【参考方案1】:

dmix 插件有自己的通道到从属通道的 1:1 映射。

要允许其他转换,请使用plug 插件。它的绑定可以用ttable配置,但默认应该没问题:

pcm.out_mono 
    type plug
    slave.pcm 
        ipc_key 1042
        type dmix
        slave out
    

【讨论】:

edit : 我之前的评论发布得太快了。一切都与您的答案完美配合。 没有办法提高cpu使用率?播放音频的原始 cpu 使用率:8.51% cpu。使用我的新 asound.conf,只有 dmix 类型:7.51%。使用插件类型修改后的 CPU 使用率:9.27% :( 显然,这是复制通道所需的 CPU。应用程序现在也可能认为它可以使用其他一些示例格式。

以上是关于为我的嵌入式设备定义一个干净且有效的 asound.conf的主要内容,如果未能解决你的问题,请参考以下文章

使用没有数组的嵌套文档为我的 JSON 定义有效的猫鼬模式?

Android Room Database:如何嵌入多个实体

扩展 C# .NET 应用程序 - 是不是构建自定义脚本语言?

Portaudio选择用于捕获的输入设备

建立高效且有效的开发流程

编写干净、灵活且易于维护的用户输入提示