目录

  • 版本获取
  • 前言
  • 常用命令介绍
    1. amixer
    2. aplay
    3. arecord

前言

我们在audio启动调试的时候,经常会遇到这样一个问题,就是我们调试时间很紧迫,并且所有的组件都在开机调试,有可能这个版本安卓都没启动,只启动到了kernel阶段;又或者安卓启动正常了,但是显示组件还没调试好;这个时候,对于我们验证和调试audio功能就有一些阻碍,然而我们调试过audio开机的同学都知道,只要版本能正常启动到kernel阶段,我们就有办法验证,这个就是使用的是alsa-util的命令来完成的。

alsa-utils:包含各种通用的 ALSA 命令行工具,如 amixer、aplay、arecord、alsaconf 等。

alsa-utils是应用程序,这些amixer、aplay、arecord常用命令的也是调用alsa-lib的函数。本节我们主要介绍一下alsa-util常用命令。

常用命令

前面我们提到,我们经常会在调试audio启动的时候用到alsa-utils的命令,下面我们就常用的命令(amixer,aplay,arecord)做个简单介绍。

  1. amixer
    amixer命令对应alsa-utils-1.2.5.1\amixer\amixer.c文件,amixer可用于配置音频的各个参数,amixer可以携带的参数如下:
static const struct option long_option[] =
{{"help", 0, NULL, 'h'},{"card", 1, NULL, 'c'},{"device", 1, NULL, 'D'},{"quiet", 0, NULL, 'q'},{"inactive", 0, NULL, 'i'},{"debug", 0, NULL, 'd'},{"nocheck", 0, NULL, 'n'},{"version", 0, NULL, 'v'},{"abstract", 1, NULL, 'a'},{"stdin", 0, NULL, 's'},{"raw-volume", 0, NULL, 'R'},{"mapped-volume", 0, NULL, 'M'},{NULL, 0, NULL, 0},
};

简单简绍一下struct option结构体,需要和getopt_long()函数搭配使用,来解析命令行参数

#define no_argument        0
#define required_argument  1
#define optional_argument  2struct option {const char *name;   //name表示前面不对“-”的选项名int has_arg;   //has_arg有3个值// no_argument(或者是0),表示该参数后面不跟参数值// required_argument(或者是1),表示该参数后面一定要跟个参数值// optional_argument(或者是2),表示该参数后面可以跟,也可以不跟参数值int *flag;  //用来决定getopt_long()的返回值到底是什么//如果flag是null则函数会返回与该项option匹配的val值;int val; //和flag联合决定返回值
}

可以看到我们amixer命令的-c、-D、-a后面是一定要跟参数的具体使用如下:

static int help(void)
{printf("Usage: amixer <options> [command]\n");printf("\nAvailable options:\n");printf("  -h,--help       this help\n");printf("  -c,--card N     select the card\n");printf("  -D,--device N   select the device, default '%s'\n", card);printf("  -d,--debug      debug mode\n");printf("  -n,--nocheck    do not perform range checking\n");printf("  -v,--version    print version of this program\n");printf("  -q,--quiet      be quiet\n");printf("  -i,--inactive   show also inactive controls\n");printf("  -a,--abstract L select abstraction level (none or basic)\n");printf("  -s,--stdin      Read and execute commands from stdin sequentially\n");printf("  -R,--raw-volume Use the raw value (default)\n");printf("  -M,--mapped-volume Use the mapped volume\n");printf("\nAvailable commands:\n");printf("  scontrols       show all mixer simple controls\n");printf("  scontents          show contents of all mixer simple controls (default command)\n");printf("  sset sID P      set contents for one mixer simple control\n");printf("  sget sID        get contents for one mixer simple control\n");printf("  controls        show all controls for given card\n");printf("  contents        show contents of all controls for given card\n");printf("  cset cID P      set control contents for one control\n");printf("  cget cID        get control contents for one control\n");return 0;
}

amixer controls //显示接口函数

amixer contents //查看配置参数

amixer cget + 接口函数

amixer cset + 接口函数 + 设置参数参数

alsactl store //保存修改的数据

  1. aplay
    aplay命令对应alsa-utils-1.2.5.1\aplay\aplay.c文件,调试时我们不需要通过hal配置通路,可以使用amixer打开通路,并给设备上电后,即可用aplay命令进行播放。
static const struct option long_options[] = {{"help", 0, 0, 'h'},{"version", 0, 0, OPT_VERSION},{"list-devnames", 0, 0, 'n'},{"list-devices", 0, 0, 'l'},{"list-pcms", 0, 0, 'L'},{"device", 1, 0, 'D'},{"quiet", 0, 0, 'q'},{"file-type", 1, 0, 't'},{"channels", 1, 0, 'c'},{"format", 1, 0, 'f'},{"rate", 1, 0, 'r'},{"duration", 1, 0 ,'d'},{"samples", 1, 0, 's'},{"mmap", 0, 0, 'M'},{"nonblock", 0, 0, 'N'},{"period-time", 1, 0, 'F'},{"period-size", 1, 0, OPT_PERIOD_SIZE},{"avail-min", 1, 0, 'A'},{"start-delay", 1, 0, 'R'},{"stop-delay", 1, 0, 'T'},{"buffer-time", 1, 0, 'B'},{"buffer-size", 1, 0, OPT_BUFFER_SIZE},{"verbose", 0, 0, 'v'},{"vumeter", 1, 0, 'V'},{"separate-channels", 0, 0, 'I'},{"playback", 0, 0, 'P'},{"capture", 0, 0, 'C'},{"disable-resample", 0, 0, OPT_DISABLE_RESAMPLE},{"disable-channels", 0, 0, OPT_DISABLE_CHANNELS},{"disable-format", 0, 0, OPT_DISABLE_FORMAT},{"disable-softvol", 0, 0, OPT_DISABLE_SOFTVOL},{"test-position", 0, 0, OPT_TEST_POSITION},{"test-coef", 1, 0, OPT_TEST_COEF},{"test-nowait", 0, 0, OPT_TEST_NOWAIT},{"max-file-time", 1, 0, OPT_MAX_FILE_TIME},{"process-id-file", 1, 0, OPT_PROCESS_ID_FILE},{"use-strftime", 0, 0, OPT_USE_STRFTIME},{"interactive", 0, 0, 'i'},{"dump-hw-params", 0, 0, OPT_DUMP_HWPARAMS},{"fatal-errors", 0, 0, OPT_FATAL_ERRORS},
#ifdef CONFIG_SUPPORT_CHMAP{"chmap", 1, 0, 'm'},
#endif{0, 0, 0, 0}
};
  1. arecord
    arecord参数和aplay可携带参数一致,如上,

arecord -D hw:0,10 -r 48000 -c 2 -f S16_LE -d 10 -t wav mdg_test.wav

-D 指定了录音设备,0,10 是card 0 device 10

-r 指定了采样率,单位时Hz

-c 指定通道数

-f 指定录音格式,通过上面的信息知道只支持 cd cdr dat

-d 指定录音的时长,单位时秒(如果不加,可以使用Ctrl + C结束录音)

-t 指定生成的文件格式

alsa-util常用命令介绍相关推荐

  1. Linux中sysstat服务,Linux sysstat常用命令介绍

    一.sysstat 软件安装 下载sysstat软件包,解压 tar zxvf *.tar.gz ./configure make make install 二.sar 命令介绍 sar -h 用法: ...

  2. linux系统防火墙相关问题及常用命令介绍

    今天介绍关于linux系统防火墙:centos5.centos6.redhat6系统自带的是iptables防火墙,centos7.redhat7自带firewall防火墙,ubuntu系统使用的是u ...

  3. Hadoop生态圈-zookeeper本地搭建以及常用命令介绍

    Hadoop生态圈-zookeeper本地搭建以及常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载zookeeper软件 下载地址:https://www.ap ...

  4. Hadoop常用命令介绍

    下面分享一篇 常用的Hadoop命令介绍,希望对Hadoop初学者的朋友有所帮助~ Hadoop常用命令介绍

  5. php基础命令,PHP命令行下的11个常用命令介绍

    本文整理了PHP命令行下的11个常用命令,下面介绍给大家,它们分别是php -m.php -v.php --ini.php -h.php --info.php --rf .php --rc .php ...

  6. 数字证书管理工具keytool常用命令介绍

    需要给一个apk加签名,用到了keytool这个工具,下面转载一篇介绍keytool的文章 http://blog.chinaunix.net/uid-17102734-id-2830223.html ...

  7. Linux常用命令介绍

    Linux命令查询网址:https://ipcmen.com/ 命令简介 命令分为内部命令和外部命令 内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由s ...

  8. Docker安装及镜像配置(常用命令介绍)

    一.安装Docker 官网 https://docs.docker.com/engine/install/centos/ # 1.卸载旧的版本 yum remove docker \docker-cl ...

  9. LaTex常用命令介绍

    LaTex常用命令 LaTex介绍 LaTex下载与安装 LaTex中常用宏包 LaTeX文件的框架 LaTex中简单的规则 LaTex中字号转换命令表 LaTex中常见数学公式排版命令 LaTex中 ...

最新文章

  1. cancase lin管脚_汽车里有什么信号是传送到总线(CAN/LIN)上?
  2. Git之签署工具GPG的安装和使用
  3. 字符串匹配算法(三):KMP(KnuthMorrisPratt)算法
  4. Tomcat 发布项目 conf/Catalina/localhost 配置 及数据源配置
  5. 如何动态的生成某种类型的集合呢_知乎画报」的移动端动态化工程实践
  6. 也说春运网络购票:12306的码农没有你想的那么弱 [转]
  7. 长春理工大学计算机学院转专业,长春理工大学优秀本科学生转专业面试考核方案.PDF...
  8. 深入浅出Hyper-V网络虚拟化(序)
  9. Linux下Tomcat性能优化--文件句柄数增大
  10. python 连接数据库 pymysql模块的使用
  11. SQL Server2005 表分区三步曲(zz)
  12. 【计算广告】基本概念及RTB/RTA投放策略介绍
  13. Gesture-Recognition
  14. jeecg ajax验证,jeecg权限模块学习
  15. (python爬虫)拉勾网招聘信息爬取
  16. python封装举例_卷1:第14章 Python打包工具
  17. 傅里叶Fourier变换fft-python-scipy-幅值-辐角-相位(一)
  18. 图书条码mysql数据库_中琅条码软件如何连接MySQL批量生成128码
  19. 数据库-[mysql]--详细笔记+教程
  20. 计算机科学权威年会,2017年全国理论计算机科学学术年会在我校召开

热门文章

  1. DGA:域名生成算法
  2. 密码学-侧信道论文梳理-A Highly Efficient Correlation Power Analysis on PRINT cipher
  3. myeclipse下载git插件
  4. 中西谚语对照1000句
  5. Lync 2010 升级到2013 之部署外部企业联盟!
  6. Android 加密算法
  7. 轻松判断放大电路的负反馈类型(电压反馈,电流反馈等有实例)
  8. MBA英文面试常用句式
  9. Atlassian In Action-Jira之推荐插件(四)
  10. oracle查询远程视图进行insert语句报错:ORA-00600: 错误 [qerrmOFBu1], [24347], []