amixer的应用

Linux ALSA音频工具aplay、arecord、amixer的实战应用与参数调优 本文深入探讨了Linux ALSA音频工具aplay、arecord和amixer的实战应用与参数调优技巧。通过详细解析设备选择、低延迟播放、多声道录音配置和自动化音量控制等核心功能,帮助开发者高效处理音频任务。文章还提供了构建低延迟音频管道的实战案例和常见问题排查指南,适用于嵌入式设备和语音交互系统开发。 阅读详情

上层使用amixer命令设置声卡,首先可以使用amixer contents 命令查看可供设置的选项,包括当前设置的值,通过amixer cset 命令修改设置。使用amixer命令设置声卡,用户可以直观的看到当前设置的功能,而不需要了解底层修改了哪些寄存器。

 

一、上层使用的amixer命令。

amixer命令示例如下:

amixer cset iface='MIXER',name='Mic A Source' 2 'Mic 2 B'

amixer cset iface='MIXER',name='Mic Sel' 2

amixer cset iface='MIXER',name='MPA Volume Control' 3

amixer.c文件的cset函数说明了该函数的使用方法。

流程图如下:

 

二、kernel层寄存器设置

         在Kernel层定义了供amixer命令设置的内容。Kernel层寄存器设置分多种类型。

         Wm9713设备初始化函数wm9713_soc_probe中包含

                   wm9713_add_controls(codec);

                   wm9713_add_widgets(codec);

控制接口control对于许多开关(switch)和调节器(slider)而言应用相当广泛,它能从用户空间被存取。control的最主要用途是mixer,所有的mixer 元素基于control 内核API 实现,在ALSA 中,control 用snd_kcontrol结构体描述。

创建一个control,调用snd_ctl_add()和snd_ctl_new1()这两个函数来完成,这两个函数的原型为:

int snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol);

 

struct snd_kcontrol *snd_ctl_new1(const struct snd_kcontrol_new *ncontrol,

void *private_data);

snd_ctl_new1()函数用于创建一个snd_kcontrol 并返回其指针,snd_ctl_add()函数用于将创建的snd_kcontrol 添加到对应的card 中。

wm9713创建一个control控制各通道静音开关和音量大小。

结构体snd_soc_dapm_widget中包含一个snd_kcontrol_new参数,当该参数的定义不为空时,其配置方法与control类似;当该参数定义为空时(暂时没有找到配置方法)。

创建一个新的control 至少需要实现snd_kcontrol_new 中的info()、get()和put()这3 个成员函数。数组wm9713_snd_ac97_controls[]内容单值元素SOC_SINGLE()和SOC_DOUBLE()的info()、get()、put()成员函数分别为:snd_soc_info_volsw ()、snd_soc_get_volsw ()和snd_soc_put_volsw ();(我还没弄清楚SOC_SINGLE()与SOC_DOUBLE()的区别。)

#define SOC_SINGLE(xname, reg, shift, max, invert) /

{   .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, /

    .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,/

    .put = snd_soc_put_volsw, /

    .private_value =  SOC_SINGLE_VALUE(reg, shift, max, invert) }

 

#define SOC_DOUBLE(xname, xreg, shift_left, shift_right, xmax, xinvert) /

{   .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),/

    .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, /

    .put = snd_soc_put_volsw, /

    .private_value = (unsigned long)&(struct soc_mixer_control) /

        {.reg = xreg, .shift = shift_left, .rshift = shift_right, /

         .max = xmax, .invert = xinvert} }

枚举元素SOC_ENUM()的info()、get()、put()成员函数分别为snd_soc_info_enum_double ()、snd_soc_get_enum_double ()和snd_soc_put_enum_double ()。

#define SOC_ENUM(xname, xenum) /

{   .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,/

    .info = snd_soc_info_enum_double, /

    .get = snd_soc_get_enum_double, .put = snd_soc_put_enum_double, /

    .private_value = (unsigned long)&xenum }

(1) iface 字段定义了control 的类型,形式为SNDRV_CTL_ELEM_IFACE_XXX,通常是MIXER,对于不属于mixer的全局控制,使用CARD。如果关联于某类设备,则使用HWDEP、 PCM、RAWMIDI、TIMER 或SEQUENCER。

(2) name 是名称标识字符串,control 的名称非常重要,因为control 的作用由名称来区分。对于名称相同的control,则使用index 区分。name 定义的标准是“SOURCE DIRECTION FUNCTION”即“源、方向、功能”:

SOURCE 定义了control 的源,如“Master”、“PCM”、“CD”和“Line”等

DIRECTION方向则为“Playback”、“Capture”、“Bypass Playback”或“Bypass Capture”,如果方向省略,意味着playback 和capture双向。

FUNCTION可以是“Switch”、“Volume”和“Route”等

iface 和 name 可以通过上层输入amixer命令获取,如下:

# # amixer controls

 

numid=100,iface=CARD,name='BB'

numid=30,iface=MIXER,name='Headphone Playback ZC Switch'

numid=6,iface=MIXER,name='PCM Playback Volume'

(3) info()函数用于获得该control 的详细信息,该函数必须填充传递给它的第二个参数。

(4) get()函数用于得到control 的目前值并返回用户空间。

(5) put()函数用于从用户空间写入值,如果值被改变,该函数返回1,否则返回0;如果发生错误,该函数返回错误码。

get()和put()的第二个参数的类型为snd_ctl_elem_value。snd_ctl_elem_value结构体的内部也包含一个由integer、integer64、enumerated 等组成的值联合体,它的具体类型依赖于control 的类型和info()函数。

对于get()和put()函数而言,如果control 有多于一个元素,即count>1,则每个元素都需要被返回或写入。在使用amixer命令配置声卡时都会调用到get()和put()函数。get()和put()函数中讲判断设置值与原有值,判断是否配置寄存器。

Jetson Orin音频开发避坑指南:从设备树配置到amixer命令实战 本文详细解析了Jetson Orin音频开发的常见问题与解决方案,从设备树配置到amixer命令实战,帮助开发者避开音频设置中的各种陷阱。重点介绍了AHUB架构、I2S时钟配置、编解码器节点设置等关键环节,并提供完整的诊断流程和调试技巧,助力开发者快速解决Orin平台的音频开发难题。 阅读详情

相关推荐

Linux音频音量太小?别急着改代码,试试amixer这个终端神器

本文详细介绍了如何使用amixer这一Linux终端神器解决音频音量过小的问题,无需修改代码即可高效调整ALSA音频系统的硬件参数。通过实战案例和核心功能解析,帮助开发者快速掌握命令行音频控制技巧,提升工作效率和音质表现。

weixin_30664051的博客 405

Linux 音频路由适配 (amixer)

Alsa是Advanced Linux Sound Architecture的缩写,即高级Linux声音架构,在Linux操作系统上提供了对音频和MIDI的支持。Alsat提供的调试命令有基于文本下的图形界面的alsamixer和文本模式的 amixer,amixer也可以称作命令行模式。 Ubuntu Debian 等常见 Linux 终端文件系统音频开发过程,没有显示器但又需要查看音频设备信息,amixer 则是不错的选择。以 rk3568 芯片的 rk809(rk817) codec 为例讲解amix

weixin_35723192的博客 4981

别再只会用aplay了!手把手带你玩转ALSA-utils全家桶(amixer/alsamixer/arecord实战)

本文深入解析ALSA-utils工具链(amixer/alsamixer/arecord)在Linux音频处理中的高级应用,从命令行控制到可视化调试,再到专业录音调优,帮助开发者突破基础使用,实现音频设备的精准控制与高效管理。

weixin_30756499的博客 351

Linux---ALSA音频工具arecord、aplay、amixer使用

Linux---ALSA音频工具arecord、aplay、amixer使用

lihuan680680的博客 1万+

在 Linux 系统中,常用的音频命令alsamixer、amixer、aplay、arecord

alsamixer是一个交互式的音频混音控制台程序,它提供了对音量、通道、增益等设置的直观界面。amixer命令用于管理音频设置,可以显示和调整音量、切换通道、静音等。您可以使用amixer来获取和设置音频设备的状态和参数。aplay命令用于播放音频文件,您可以使用它来播放 WAV、MP3 等格式的音频文件。aplay支持不同的音频设备,并提供一些选项以调整播放参数。arecord命令用于录制音频,您可以使用它从麦克风、线路输入等音频输入设备中录制声音,并将录制的音频保存为文件。arecord。

小灰灰的博客 5307

RK3568开发笔记-amixer开机设置音量异常

在 RK3568 开发板上,使用amixer命令设置开机音量时,发现直接设置系统音量报错。即使在启动脚本或系统服务中添加了设置音量的命令,实际开机后音量仍保持默认值。且当使用aplay播放一个音频文件之后再去设置系统音量时就可以生效,本文根据该现象提出解决方法提示:以下是本篇文章正文内容,下面案例可供参考amixer是用于控制音频设备音量和其他参数的命令行工具。它通常与 ALSA(Advanced Linux Sound Architecture)音频驱动一起使用。以下是amixer。

flypig has a dream! 1629

Linux ALSA音频工具aplay、arecord、amixer的使用方法

ALSA 是Advanced Linux Sound Architecture的缩写,先进的Linux音频架构,为Linux操作系统提供音频和MIDI功能。aplay命令aplay是播放命令。-t, 指定输出数据格式,默认是wave格式,还支持raw,voc,au,后两种格式不懂。-D,指定播放设备,设备名的格式为hw:0,0,表示0号card的0号device。-c,指定channel数。-f, 指定语音数据格式,有很多格式可以选择。

beetleinv的博客 2万+

python爬虫自动下载网页链接

需求分析 今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的: Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的pytho...

da_kao_la的博客 1万+

音频或扬声器命令解释_amixer应用

本文介绍了三类音频控制命令:PCM音量设置、耳机/喇叭音量调节及WAV文件播放。关键点包括: 使用amixer工具时需注意cset和sset的参数格式差异,cset需加name=前缀 音量百分比设置要避免直接使用范围说明(如0~100%) 设备选择(-c0/-c1)需与实际硬件对应 PCM音量必须使用底层控件名称设置 播放WAV时hw设备不支持格式转换,plughw可自动转换格式 文章还纠正了常见错误用法,并提供了已验证的正确命令格式。

yuhuasheng1997的博客 229

非root用户如何在CentOS7集群上编译安装OpenFOAM6

本文详细介绍了在CentOS7集群上以非root用户身份编译安装OpenFOAM6的完整流程。通过环境准备、依赖包离线获取、源码编译安装等步骤,解决了集群环境下权限和依赖问题,特别针对OpenMPI和Boost库提供了优化配置建议,帮助用户高效完成安装并优化性能。

weixin_28826961的博客 681

NVIDIA A100驱动及CUDA安装指南

NVIDIA A100驱动及CUDA安装指南:详细介绍了在Ubuntu系统下安装A100显卡驱动和CUDA工具包的完整流程,包括环境准备、驱动安装、CUDA配置及性能优化建议。特别推荐猿界算力平台提供开箱即用的A100算力租赁服务,具备专业团队支持、灵活租期和实惠价格等优势。文末通过PyTorch测试验证了A100设备的可用性,展示了80GB显存的强大计算能力。

2401_89353317的博客 1510

ALSA架构应用程序aplay及amixer调用关系(应用层到内核驱动)

ALSA架构应用程序aplay及amixer调用关系(应用层到内核驱动)

lihuan680680的博客 1502

无人机导航中的坐标系统详解与转换实现

本文系统介绍了无人机导航中常用的坐标系及其转换方法。主要内容包括:1) 四种关键坐标系(大地坐标系ECEF、经纬度LLA、北东天坐标系NED、机体坐标系)的定义和特点;2) 坐标系间的转换原理与实现,重点讲解LLA与ECEF的互转公式及ECEF与NED的转换方法;3) 提供可直接使用的C++实现代码,包括基于WGS84椭球模型的精确转换算法。这些内容为无人机导航系统开发提供了实用的坐标系处理方案,能够有效解决多源数据在不同坐标系下的统一表示问题。

电脑管家 373

amixer的用法

amixer的用法 转自http://hi.baidu.com/serial_story/blog/item/c4e826d82a562f3f32fa1c31.html   最近接触到amixer,大概明白了其意思和具体用法,简述如下。 alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。 alsamixer是基于文本下的图形界面的,可以通

Emyard博客 1253

elevation mapping算法3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

本文主要学习使用D435i相机发出的点云作为高程图的点云输入,如何离线输入点云生成高程图,进一步学习如何在线订阅点云生成高程图。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 3488

迟滞比较器原理及计算

为什么要用迟滞比较器 在讲迟滞比较器之前,我们先看一个案例。 在产品设计中常常需要用到电机,而电机在从运转到停止过程中需要泄放能量,这种能量大部分以电压的形式反馈回电源母线(Vbus)导致Vbus母线电压升高,特别是功率大又转速快的电机需要急刹时,产生的反馈电压更高,严重时可能导致母线上其他器件的损坏。 为了防止将电机反馈的能量泄放掉,我们需要设计一个电路来检测母线电压,当母线电压高于某一安全阈值时,打开MOSFET Q1将母线上的能量通过电阻R5以热的形式消耗掉。 假如用一般的比较器,设计如下: Vbu

sinat_15677011的博客 2万+

【全志T113-S3_100ask】音频子系统实战:从amixer配置到aplay/arecord应用

本文详细介绍了全志T113-S3开发板的音频子系统实战,从amixer配置到aplay/arecord应用。通过ALSA架构的硬件编解码器、amixer工具和aplay/arecord命令,实现音频输入与输出的高效配置与操作,适用于嵌入式系统开发。

weixin_38168786的博客 280

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷1:文末附答案)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷1:文末附答案)

王老师青少年编程 1610

linux录制声卡声音_Linux下ALSA音频工具amixer,aplay,arecord

ALSA音频工具编译安全1.官网http://www.alsa-project.org下载alsa-lib和alsa-utils我的版本:alsa-lib-1.0.27.2.tar.bz2 和alsa-uTIls-1.0.27.2.tar.bz22.创建/home/m/3rd/alsa目录,并在目录下创建install目录,接着把压缩包拷到alsa目录下3.编译alsa-lib步骤tar -xvf...

weixin_34681072的博客 1001

OpenCASCADE:Direct3D CSharp 示例

OpenCASCADE:Direct3D CSharp 示例OpenCASCADE:Direct3D CSharp 示例 OpenCASCADE:Direct3D CSharp 示例 此示例演示了如何在使用CSharp和Windows Presentation Foundation (WPF)编写的.Net应用程序中使用 OCCT 和 DirectX 库。 .Net、OCCT (C++) 和 DirectX 级别之间的连接由用 C++/CLI 编写的代理库OCCProxy和D3DProxy提供。代理库OCC

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1824

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux音频控制神器:amixer完全指南

amixer是Linux中ALSA音频系统的命令行混音控制工具。摘要如下: 基本功能:查看声卡信息、控制音量(设置/增减百分比或分贝值)、静音切换,支持多通道独立控制。 核心原理:通过ALSA库与内核驱动交互,操作声卡、混音器和控制器(音量/开关/路由)。 高级应用: 脚本自动化控制 音频设备切换(如耳机/扬声器) 录音参数配置 支持事件监听和配置文件 相关工具:alsamixer(图形界面)、aplay/arecord(播放录制)、speaker-test等。 调试:可通过/proc/asound/查看系

weixin_44932366的博客 796

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python pcm 静音_理解和使用alsa配置-默认静音,必须先用amixer解除主音量和pcm音量的静音 | 学步园...

ALSA声卡驱动程序的配置对于声卡驱动程序,除了内核自带的驱动程序之外,您还可以使用Advanced Linux Sound Architecture(ALSA,http://www.alsa-project.org/)提供的驱动程序。它支持一系列主流声卡,同时它和内核 的声音结构互相兼容,在某种程度上,可以说是内核的声卡驱动模块的补充。ALSA的声卡驱动程序的一般命名规则是snd-card-。s...

weixin_39926016的博客 351

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

树莓派设置音频输出音量

首先查看声卡 amixer scontrols 我是在手机上用JuiceSSH敲的命令,这里就不展示截图了 上述命令显示如下: Simple mixer control 'PCM', 0 然后在输入: amixer set PCM 80% 即可设置音量 转载于:https://www.cnblogs.com/yuan-zhou/p/11438462...

weixin_30271335的博客 976

都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法

前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路。 0.先查看系统支持哪几个alsa cmd:    ll /system/bin/asla*    经查,我的android4.4.2+linux3.10  的系统支持如下 alsa cmd -rwxr-xr-x root     shel

liuxd3000的专栏 1万+

Linux音频调校进阶:用amixer命令行精准控制音量、声道与录音源

本文深入探讨了Linux下使用amixer命令行工具进行高级音频调校的方法,包括精准控制音量、管理多声道和切换录音源。通过ALSA音频系统的详细解析和实战技巧,帮助开发者在嵌入式设备、语音识别系统等场景中实现专业级音频配置。

weixin_30904593的博客 207

Linux---ALSA音频工具arecord、aplay、amixer实战指南

本文详细介绍了Linux系统中ALSA音频工具arecord、aplay和amixer的实战应用指南。从基础录音、播放到高级音量控制,涵盖了硬件设备探测、专业级音频录制技巧以及真实项目中的经典组合,帮助开发者高效处理音频任务。特别适合在嵌入式设备和树莓派上进行音频开发。

weixin_30522183的博客 268
上一篇: WM9713音频处理介绍
下一篇: 调试WM9714音频通道切换
willand1981
博客等级 码龄18年 136粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值