snd_kcontrol_new名称中的SOURCE字段

alsa音频架构4-声卡控制 第十五部分 声卡控制接口 前面第一篇中讲到了每注册一个声卡都会创建注册一个对应的声卡控制设备,并给出了其操作函数集snd_ctl_f_ops, 在"amixer,aplay,arecord的使用"一文中提及了amixer如何设置获取声卡的控制选项 接着在第二篇中讲到Asoc声卡驱动编写的步骤,步骤中没牵扯到控制设备的控制选项,这里要补充第5个步骤 第5个步骤就是在设备驱动中要调用snd_ 阅读详情

前些日子写了一篇snd_kcontrol探究,该文主要从内核源码出发简单讲述一下kcontrol接口的始末。这几天因为要在Android里面添加一些音频控制接口,配合alsa_amixer scontents分析,对此有了更深的体会,记录于此。因为这方面的资料实在太少,很多东西都是自我理解的,如有错误请见谅并指出。

 

name字段是名称标识,这个字段非常重要,因为kcontrol的作用由名称来区分,对于名称相同的kcontrol,则使用index区分。name定义的标准是“SOURCE DIRECTION FUNCTION”即“源 方向 功能”,SOURCE定义了kcontrol的源,如“Master”、“PCM”等;DIRECTION 则为“Playback”、“Capture”等,如果DIRECTION忽略,意味着Playback和capture双向;FUNCTION则可以是“Switch”、“Volume”和“Route”等。

以上的说法比较简略,下面会较详细补充一下。

先内核源码中的文档ControlNames.txt:

[c-sharp]  view plain copy
  1. This document describes standard names of mixer controls.  
  2.   
  3. Syntax: SOURCE [DIRECTION] FUNCTION  
  4.   
  5. DIRECTION:  
  6.   <nothing>   (both directions)  
  7.   Playback  
  8.   Capture  
  9.   Bypass Playback  
  10.   Bypass Capture  
  11.   
  12. FUNCTION:  
  13.   Switch    (on/off switch)  
  14.   Volume  
  15.   Route     (route control, hardware specific)  
  16.   
  17. SOURCE:  
  18.   Master  
  19.   Master Mono  
  20.   Hardware Master  
  21.   Headphone  
  22.   PC Speaker  
  23.   Phone  
  24.   Phone Input  
  25.   Phone Output  
  26.   Synth  
  27.   FM  
  28.   Mic  
  29.   Line  
  30.   CD  
  31.   Video  
  32.   Zoom Video  
  33.   Aux  
  34.   PCM  
  35.   PCM Front  
  36.   PCM Rear  
  37.   PCM Pan  
  38.   Loopback  
  39.   Analog Loopback   (D/A -> A/D loopback)  
  40.   Digital Loopback  (playback -> capture loopback - without analog path)  
  41.   Mono  
  42.   Mono Output  
  43.   Multi  
  44.   ADC  
  45.   Wave  
  46.   Music  
  47.   I2S  
  48.   IEC958  
  49.   
  50. Exceptions:  
  51.   [Digital] Capture Source  
  52.   [Digital] Capture Switch  (aka input gain switch)  
  53.   [Digital] Capture Volume  (aka input gain volume)  
  54.   [Digital] Playback Switch (aka output gain switch)  
  55.   [Digital] Playback Volume (aka output gain volume)  
  56.   Tone Control - Switch  
  57.   Tone Control - Bass  
  58.   Tone Control - Treble  
  59.   3D Control - Switch  
  60.   3D Control - Center  
  61.   3D Control - Depth  
  62.   3D Control - Wide  
  63.   3D Control - Space  
  64.   3D Control - Level  
  65.   Mic Boost [(?dB)]  
  66.   
  67. PCM interface:  
  68.   
  69.   Sample Clock Source   { "Word", "Internal", "AutoSync" }  
  70.   Clock Sync Status { "Lock", "Sync", "No Lock" }  
  71.   External Rate     /* external capture rate */  
  72.   Capture Rate      /* capture rate taken from external source */  
  73.   
  74. IEC958 (S/PDIF) interface:  
  75.   
  76.   IEC958 [...] [Playback|Capture] Switch    /* turn on/off the IEC958 interface */  
  77.   IEC958 [...] [Playback|Capture] Volume    /* digital volume control */  
  78.   IEC958 [...] [Playback|Capture] Default   /* default or global value - read/write */  
  79.   IEC958 [...] [Playback|Capture] Mask      /* consumer and professional mask */  
  80.   IEC958 [...] [Playback|Capture] Con Mask  /* consumer mask */  
  81.   IEC958 [...] [Playback|Capture] Pro Mask  /* professional mask */  
  82.   IEC958 [...] [Playback|Capture] PCM Stream    /* the settings assigned to a PCM stream */  
  83.   IEC958 Q-subcode [Playback|Capture] Default   /* Q-subcode bits */  
  84.   IEC958 Preamble [Playback|Capture] Default    /* burst preamble words (4*16bits) */  
  

可以看到表示方向DIRECTION有五种,其中DIRECTION为空时则表示Playback、Capture双向。

一个标准的kcontrol如:SOC_DOUBLE("PCM Playback Volume", AC97_PHONE, 8, 0, 31, 1),其中“PCM”为源SOURCE、“Playback”为方向DIRECTION、“Volume”为功能FUNCTION--音量调节,这个kcontrol是调节放音PCM的Volume的。

又如:SOC_SINGLE("Mic Switch", AC97_CD, 15, 1, 1),其中“Mic”为源SOURCE、方向DIRECTION为空表示Playback和Capture双向、“Switch”为功能FUNCTION--开关切换,这个kcontrol是用于切换Mic开关的。

实际应用中,并不是所有的kcontrol命名都符合ControlNames.txt规则。如:SOC_SINGLE("ALC Hold Time", AC97_CODEC_CLASS_REV, 8, 15, 0),这个kcontrol的name只有名为“ALC Hold Time”的SOURCE字段,DIRECTION和FUNCTION都欠缺。

 

alsa_amixer命令可以输出这些kcontrol的名称、numid和当前值等信息。而选项sconctols/controls、scontents/contents、sset/cset、sget/cget有所不同,前者是mixer simple control信息,后者是control信息;前者的handle通过snd_mixer_open取得,后者的handle通过snd_ctl_open取得。

两个kcontrol:1、SOC_SINGLE("Capture Switch", AC97_CD, 15, 1, 1), 2、SOC_DOUBLE("Capture Volume", AC97_CD, 8, 0, 31, 0):

在alsa_amixer scontrols来看,显示一个名称为“Capture”的mixer simple control,根据我的结果,一般这个mixer simple control对应的是后者。【猜测:之所以有这样的结果,是因为两个kcontrol的SOURCE名称相同,而mixer simple control是匹配kcontrol的SOURCE字段的;因此SOURCE字段区别体现在mixer simple control上,而name区别体现在control上,待验证。】

在alsa_amixer controls来看,列表会显示所有的kcontrol,因此会显示“Capture Switch”和“Capture Volume”这两个kcontrol。这不难理解,在snd_kcontrol探究中就提到,上层是根据name来找到底层的kcontrol的,这个name包含了SOURCE、DIRECTION和FUNCTION这三个字段。

【建议:编写snd_kcontrol时,尽量使用标准的ControlName,留意SOURCE字段是否有重复。在上层应用中,很多都是使用snd_mixer_open得到的mixer simple control,一个典型的例子就是Android2.2的AlsaMixer.cpp。之前我在为Android添加mic mute接口时,发现无论如何都找不到“Capture Switch”的kcontrol,因为它与“Capture Volume”的kcontrol的SOURCE字段重名了。将其改名为“Mic Switch”就行了。】


4/16 2011

找到一个alsa基本架构图

ALSA声卡驱动中的DAPM详解之一:kcontrol DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/c... 阅读详情

相关推荐

ALSA声卡驱动中的DAPM详解之三:如何定义各种widget

1.定义widget   codec域widget的定义   platform域widget的定义   音频路径path域widget的定义   音频数据流stream域widget的定义 2.定义dapm kcontrol 3.建立widget和route DAPM框架中几个重要的数据结构:snd_soc_dapm_widget,snd_soc_dapm_path,snd_soc_dapm_r...

sinat_37817094的博客 4498

Linux ALSA 之十二:ALSA ASOC Kcontrol

ALSA ASOC Kcontrol

年少生而为人 1731

升降机SEW MOVIDRIVE变频器设置

选择PO1 第2,3,9,13 位,点击“SendPA”Start reference,编码器反馈值为0(PI2/3 Actual position=0)提示:传送参考位置前请断开变频器安全24V电源,否则会弹出禁止修改提示框;提示:做这一步时,如果出现电机不能转动,或产生报警不能通过编码器匹配。下载配置的参数,提示:下载参数需要断开变频器的安全24V电源。编码器匹配通过后点击下一步,进入下图画面传送参考位置。1电机不能转动:a可能是由于变频器的安全24V未给。点击2.SEW总线扩展定位,定位块设置。

xdpcxq的专栏 5395

ALSA学习(8)——DAPM详解之一:kcontrol

参考博客:https://blog.youkuaiyun.com/DroidPhone/article/details/12793293

永不秃头的程序员的博客 2231

如何在Jetson Nano上快速搭建Pytorch环境(含torchvision安装教程)

本文详细介绍了在Jetson Nano上快速搭建PyTorch环境的完整步骤,包括系统准备、PyTorch安装优化、torchvision编译安装及环境测试。通过本指南,开发者可以高效部署深度学习开发环境,充分利用Jetson Nano的GPU加速能力进行计算机视觉项目开发。

weixin_42628941的博客 340

从零开始:在Unity中使用Dynamic Bone实现角色骨骼自然抖动(以女性角色胸部为例)

本文详细介绍了在Unity中使用Dynamic Bone插件实现角色骨骼自然抖动的完整流程,特别以女性角色胸部为例。从插件导入、骨骼系统基础到Dynamic Bone组件配置和参数调优,提供了全面的技术指导。文章还包含性能优化技巧和常见问题解决方案,帮助开发者快速掌握这一物理效果实现方法。

weixin_28728495的博客 453

ALSA之 snd_kcontrol_new名称中的SOURCE字段

前些日子写了一篇snd_kcontrol探究,该文主要从内核源码出发简单讲述一下kcontrol接口的始末。这几天因为要在Android里面添加一些音频控制接口,配合alsa_amixer scontents分析,对此有了更深的体会,记录于此。因为这方面的资料实在太少,很多东西都是自我理解的,如有错误请见谅并指出。   name字段是名称标识,这个字段非常重要,因为kcontrol的作

linuxyant的专栏 811

Qi标准下的充电协议及其记忆技巧

记忆无线充电协议中的。

m0_73991989的博客 1319

snd_kcontrol探究

control控制接口 控制接口对于许多开关(switch)和调节器(slider)应用广泛,它能被用户空间存取,从而读写CODEC相关寄存器。control的主要用于mixer。它用snd_kcontrol_new结构体描述。 snd_kcontrol_new struct snd_kcontrol_new { snd_ctl_elem_ifac

AZURE 1万+

华为OD机试双机位C卷-分披萨 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【分披萨】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 分披萨。

qq_45776114的博客 1396

uniapp(全端兼容) - 超详细接入百度统计功能,给uniapp全平台各端项目引入添加百度统计的插件统计流量详细的步骤教程(提供最新的百度统计源代码,详细的示例代码复制粘贴即可快速搞定!)

uniapp h5 app 使用加入接入百度统计,uniapp百度统计,uniapp详细引入百度统计的教程,uniapp接入百度统计,uniapp如何实现加入百度的统计代码,uniapp怎么植入百度统计详细教程,uniapp如何对接百度统计,uniapp百度统计不生效怎么办,uniapp使用百度统计不生效常见问题,uniapp引入百度统计后没有生效,uniapp h5网页接入百度统计代码后没有统计无效,uniapp最新接入使用百度统计功能,uniapp增加百度统计代码,uniapp app如何接入百度统计,

✅ 精选推荐文章 1万+

snd_kcontrol的分析

 snd_kcontrol的分析 2011-06-24  19:54:45 本文参考了:AZURE的文章《snd_kcontrol探究》http://blog.youkuaiyun.com/sepnic/archive/2011/01/18/6150723.aspx   用snd_kcontrol_new结构体了codec可供控制的部分,包括:通道切换(switch/mix

colorado 5910

【传感器模块项目实战】机器人/无人驾驶常用传感器模型、选型与安装

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!无人车&无人机导航合集本文先对机器人/无人驾驶常用传感器模型、选型与安装做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容分为位置式绝对型编码器增量式编码器打比赛的时候用过欧姆龙的增量式编码器,也用过待编码器的步进电机。【防盗标记–盒子君hzj】增量式编码器正交编码输出信号,用于识别正转和反转,通过微控制器(单片机)的片内外设硬件/软件解码(1)惯性器件-机械陀螺。

qq_35635374的博客 446
上一篇: ALSA SOC架构关键点
下一篇: alsa asound.conf
flymachine
博客等级 码龄23年 253粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值