嵌入式 amixer的用法(音频编码音量控制)

2024-01-05 13:08

本文主要是介绍嵌入式 amixer的用法(音频编码音量控制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


最近接触到amixer,大概明白了其意思和具体用法,简述如下。

alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。

alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。

amixer,是alsamixer的文本模式,即命令行模式,需要用amixer命令的形式去配置你的声卡的各个选项。

对于amixer的使用,你首先需要搞懂你要设置的参数是哪些,然后才可能去了解,如何去配置对应的值,整体来说,相对alsamixer来说,是有点繁琐,下面简要介绍其具体用法:

1.先看看amixer支持哪些命令,大概有哪些功能

# amixer --help
Usage: amixer[command]

Available options:
-h,--help      this help
-c,--cardN    select the card
-D,--device N  select the device, default 'default'
-d,--debug     debug mode
-n,--nocheck   do not perform range checking
-v,--version   print version of this program
-q,--quiet     be quiet
-i,--inactive  show also inactive controls
-a,--abstract L select abstraction level (none or basic)
-s,--stdin     Read and execute commands from stdin sequentially

Available commands:
scontrols      show all mixer simple controls
scontents      show contents of all mixer simple controls (default command)
sset sIDP     set contents for one mixer simple control
sgetsID       get contents for one mixer simple control
controls       show all controls for given card
contents       show contents of all controls for given card
cset cIDP     set control contents for one control
cgetcID       get control contents for one control

2.再看看当前你的音频系统(不同的音频驱动对应不同的内容和操作接口)提供了那些供你使用的接口去操作

关于驱动里面已经提供了多少接口可以去操作,可以用命令:

amixercontents

查看,比如:

# amixercontrols
numid=3,iface=MIXER,name='Master ModeSwitch'
numid=29,iface=MIXER,name='Master Mux'
numid=4,iface=MIXER,name='Master Quality Switch'
numid=2,iface=MIXER,name='Master Switch'
numid=1,iface=MIXER,name='Master Volume'
numid=7,iface=MIXER,name='PCM Mode Switch'
numid=6,iface=MIXER,name='PCM Switch'
numid=5,iface=MIXER,name='PCM Volume'
numid=21,iface=MIXER,name='Line Input Switch'
numid=16,iface=MIXER,name='Line Mode Switch'
numid=27,iface=MIXER,name='Line Mux'
。。。。。
numid=9,iface=MIXER,name='Mic Switch'
numid=8,iface=MIXER,name='Mic Volume'
numid=19,iface=MIXER,name='ADC Mode Switch'
numid=28,iface=MIXER,name='ADC Mux'
。。。。。。。。

去查看,当然你的Linux内核支持哪些配置参数,如上,一共有20多个参数可供你配置。

而对于所有的当然的配置的值,可以通过这个查看:

# amixer contents
numid=3,iface=MIXER,name='Master Mode Switch'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Common Buffer Off'
; Item #1 'Common Buffer On'
: values=0
。。。。。。。。。。

numid=5,iface=MIXER,name='PCMVolume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
numid=24,iface=MIXER,name='Mixer ADC Mix Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=26,iface=MIXER,name='Mixer DAC Mix Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=25,iface=MIXER,name='Mixer Line Mix Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=23,iface=MIXER,name='Mixer Mic Mix Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on

3.搞懂如何去设置某个参数

总结起来就是,先要用get系列命令去看懂有哪些接口,然后再去用set系列的命令,去设置对应你所要设置的值。

想要针对某项设置,比如想要设置上面的的主音量,master volume,即controls中显示的:

numid=5,iface=MIXER,name='PCM Volume'
那么,可以先看看当前的值:

# amixer cget numid=5,iface=MIXER,name='PCMVolume'
numid=5,iface=MIXER,name='PCM Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0

显示的是最大的27,假设想要设置为25,那么就用cset去设置:

# amixer cset numid=5,iface=MIXER,name='PCMVolume' 25
numid=5,iface=MIXER,name='PCM Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=27,step=0
: values=25,25
| dBscale-min=-40.50dB,step=1.50dB,mute=0

再比如,去将'Mic Supply 的switch关闭:

# amixer cset numid=12,iface=MIXER,name='MicSupply Switch' Off
numid=12,iface=MIXER,name='MicSupply Switch'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'On'
; Item #1 'Off'
: values=1

总结一下用法,就是:

amixercget   controls中所输出的某个参数

amixercset   controls中所输出的某个参数     具体的值(比如,0,1,On,Off等)

【提示】

同上面介绍的的cget/cset系列命令:

controls       show all controls for given card
contents       show contents of all controls for given card
cset cIDP     set control contents for one control
cgetcID       get control contents for one control

类似的,还有另外一套sget/sset系列的命令:

scontrols      show all mixer simple controls
scontents      show contents of all mixer simple controls (default command)
sset sIDP     set contents for one mixer simple control
sgetsID       get contents for one mixer simple control

也是同样做法,比如:

通过查看当然有哪些选择可以控制:

# amixer scontrols
Simple mixercontrol 'Master',0
Simple mixer control 'Master Mode',0
Simple mixer control 'Master Mux',0
Simple mixer control 'Master Quality',0
。。。

同理,amixerscontents,可以查看当前所有的值,具体就不在这列举了。

另外,去查看或者配置用sget,比如:

# amixer sget 'MicrophoneInput',0
Simple mixer control 'Microphone Input',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]

如果想要修改对应设置,用amixer sset ,具体用法是:

amixer sset sID(控制字符串)P(支持的某个值)

其中sID,就是上面的Simple mixer control后面的那个字符串,比如'Master Mux',0

而对其设置就是,先看看其提供了哪些供你设置的值:

# amixersget 'Master Mux',0
Simple mixercontrol 'Master Mux',0
Capabilities: enum
Items: 'Sum' 'DAC' 'Line' 'Mic'
Item0: 'DAC'

然后比如要设置成Line的,就可以这样:

# amixer sset 'Master Mux',0 Line
Simple mixer control'Master Mux',0
Capabilities: enum
Items: 'Sum' 'DAC' 'Line' 'Mic'
Item0: 'Line'

这篇关于嵌入式 amixer的用法(音频编码音量控制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572960

相关文章

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的