alsa是啥意思啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alsa是啥意思啊相关的知识,希望对你有一定的参考价值。

参考技术A

ALSA是Advanced Linux Sound Architecture的缩写,高级Linux声音架构的简称。


它在Linux操作系统上提供了音频和MIDI的支持。在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS。

ALSA的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计, 支持对称多处理(SMP)和线程安全,对OSS的向后兼容,以及提供了用户空间的alsa-lib库来简化应用程序的开发。


ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是啥意思?

【中文标题】ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是啥意思?【英文标题】:What does DAPM routing in ALSA ASoC simple-audio-card driver mean?ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是什么意思? 【发布时间】:2020-05-21 20:39:02 【问题描述】:

内核文档doc/Documentation/devicetree/bindings/sound/simple-card.txt 给出了如何在设备树中使用它的示例:

sound 
    compatible = "simple-audio-card";
    ...
    simple-audio-card,widgets =
        "Microphone", "Microphone Jack",
        "Headphone", "Headphone Jack",
        "Speaker", "External Speaker";
    simple-audio-card,routing =
        "MIC_IN", "Microphone Jack",
        "Headphone Jack", "HP_OUT",
        "External Speaker", "LINE_OUT";
    ...

“麦克风”、“耳机”和“扬声器”只是标识符(允许的只有“麦克风”、“耳机”、“扬声器”、“线路”)。名称“MIC_IN”、“HP_OUT”和“LINE_OUT”是其驱动程序报告的硬件编解码器的真实内容。

“麦克风插孔”、“耳机插孔”和“外接扬声器”等别名是什么?它们出现在哪里以及它们有多重要(它们不会将 1 对 1 映射到用户空间 ALSA 设备,这些名称从未出现在用户空间中)?它们如何影响硬件编解码器?

【问题讨论】:

【参考方案1】:

简而言之,“simple-audio-card,routing”中使用的名称实际上就是您在“simple-audio-card,widgets”中定义并重命名的名称。

另一个重要说明是“简单的声卡,小部件”可能定义例如两个扬声器小部件:

"Speaker", "External Speaker";
"Speaker", "Internal Speaker";

第一个“Speaker”是模板名称,第二个是实例名称。

TL;DR:

我最近也遇到了这个问题。读了一些代码后,我的理解如下:

按照 DTS 定义做两件事:

simple-audio-card,widgets =
        "Microphone", "Microphone Jack",
        "Headphone", "Headphone Jack",
        "Speaker", "External Speaker";
    它定义/创建机器级别(声卡级别)小部件,例如“扬声器”、“麦克风”、“耳机”。 DTS 还允许将其重命名为自定义名称。所以“麦克风”被重命名为“麦克风插孔”等等。

这可以从如下所示的代码中读取。所以从“simple-audio-card,routing”引用的未来widget名称应该是重命名后的。

在文件 kernel/sound/soc/soc-core.c:

static const struct snd_soc_dapm_widget simple_widgets[] = 
    SND_SOC_DAPM_MIC("Microphone", NULL),
    SND_SOC_DAPM_LINE("Line", NULL),
    SND_SOC_DAPM_HP("Headphone", NULL),
    SND_SOC_DAPM_SPK("Speaker", NULL),
;

上面定义了一个小部件模板。

int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
                    const char *propname)

在上面的函数中,它会尝试通过名称将DT中显示的名称与模板匹配,然后将名称更改为第二列中的名称(在DTS中)

文档widget.txt其实也是重复的:

kernel/Documentation/devicetree/bindings/sound/widgets.txt

小部件:

这主要指定音频off-codec DAPM小部件。

每个条目是DT中的一对字符串:

"template-wname", "user-supplied-wname"

“template-wname”是模板小部件名称,当前 包括:“麦克风”、“线路”、“耳机”和“扬声器”。

“user-supplied-wname”是用户指定的小部件名称。

例如: 简单的音频小部件 = “麦克风”、“麦克风插孔”、 “线”,“杰克线”, “线路”,“线路输出插孔”, “耳机”、“耳机插孔”、 “扬声器”、“外部扬声器”;

我不是 ALSA 专家,很遗憾,我在阅读代码之前无法理解该文档。

【讨论】:

以上是关于alsa是啥意思啊的主要内容,如果未能解决你的问题,请参考以下文章

lvalue是啥意思啊?

webcam 是啥意思啊!

module file 是啥意思啊?

Unknown command是啥意思啊

bounds是啥意思啊

color 是啥意思啊