ALSA 简介

  ALSA 是 Advanced Linux Sound Architecture,高级 Linux 声音架构的简称,它在 Linux 操作系统上提供了音频和 MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA 已经成为默认的声音子系统,用来替换2.4系列内核中的 OSS(Open Sound System,开放声音系统)。
  ALSA 的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计, 支持对称多处理(SMP)和线程安全,对 OSS 的向后兼容,以及提供了用户空间的 alsa-lib 库来简化应用程序的开发。
  想了解更多的关于 ALSA 的这一开源项目的信息和知识,请查看:http://www.alsa-project.org/。


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.bz2

2、创建 alsa 安装目录(如 /home/rudy/alsa 目录),并在该目录下创建 install 目录,接着把压缩包拷到 alsa 目录下。

3、编译 alsa-lib 用户空间库。

# tar -xvf alsa-lib-1.0.27.2.tar.bz2
# cd alsa-lib-1.0.27.2
# CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux  --prefix=/home/rudy/alsa/install/
# make
# make install 

4、编译 alsa-utils 工具包。
alsa-utils 包含的工具有:alsactl, aconnect, alsamixer, amidi, amixer, aplay, aplaymidi, arecord, arecordmidi, aseqnet, iecset, speaker-test

# tar -xvf alsa-utils-1.0.27.2.tar.bz2
# cd alsa-utils-1.0.27.2
# CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/rudy/alsa/install/ --host=arm-linux --with-alsa-inc-prefix=/home/rudy/alsa/install/include --with-alsa-prefix=/home/rudy/alsa/install/lib --disable-alsamixer --disable-xmlto --disable-nls
# make  

5、简单说明
–prefix 指定了 alsa-lib 编译后的安装目录,包含库和头文件,编译 alsa-utils 时候要指明它的库 lib 和头文件 include 的目录。
alsamixer 是图形化的 amixer 工具,需要 ncurses 的支持,在 secure CRT 中乱码,怕麻烦加 –disable-alsamixer 禁用。

音频录制——arecord

# arecord -hUsage: arecord [OPTION]... [FILE]...  -h, --help              help
    --version           print current version
-l, --list-devices      list all soundcards and digital audio devices
-L, --list-pcms         list device names
-D, --device=NAME       select PCM by name
-q, --quiet             quiet mode
-t, --file-type TYPE    file type (voc, wav, raw or au)
-c, --channels=#        channels
-f, --format=FORMAT     sample format (case insensitive)
-r, --rate=#            sample rate
-d, --duration=#        interrupt after # seconds
-M, --mmap              mmap stream
-N, --nonblock          nonblocking mode
-F, --period-time=#     distance between interrupts is # microseconds
-B, --buffer-time=#     buffer duration is # microseconds
    --period-size=#     distance between interrupts is # frames
    --buffer-size=#     buffer duration is # frames
-A, --avail-min=#       min available space for wakeup is # microseconds
-R, --start-delay=#     delay for automatic PCM start is # microseconds
                        (relative to buffer size if <= 0)
-T, --stop-delay=#      delay for automatic PCM stop is # microseconds from xrun
-v, --verbose           show PCM structure and setup (accumulative)
-V, --vumeter=TYPE      enable VU meter (TYPE: mono or stereo)
-I, --separate-channels one file for each channel
    --disable-resample  disable automatic rate resample
    --disable-channels  disable automatic channel conversions
    --disable-format    disable automatic format conversions
    --disable-softvol   disable software volume control (softvol)
    --test-position     test ring buffer position
    --test-coef=#        test coeficient for ring buffer position (default 8)
                        expression for validation is: coef * (buffer_size / 2)  --test-nowait       do not wait for ring buffer - eats whole CPU
    --max-file-time=#   start another output file when the old file has recorded
                        for this many seconds  --process-id-file   write the process ID here
    --use-strftime      apply the strftime facility to the output file name
Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM SPECIAL S24_3LE S24_3BE U24_3LE U24_3BE S20_3LE S20_3BE U20_3LE U20_3BE S18_3LE S18_3BE U18_3LE
Some of these may not be available on selected hardware
The availabled format shortcuts are:
-f cd (16 bit little endian, 44100, stereo)
-f cdr (16 bit big endian, 44100, stereo)
-f dat (16 bit little endian, 48000, stereo)  

  用 # arecord -l 命令可以列出声卡和数字音频设备,如:

card 0: SOUND0 [TI81XX SOUND0], device 0: TVP-PCM tvp5158-hifi-0 []  Subdevices: 1/1  Subdevice #0: subdevice #0
card 0: SOUND0 [TI81XX SOUND0], device 1: AIC3X tlv320aic3x-hifi-1 []  Subdevices: 1/1  Subdevice #0: subdevice #0  

-D 参数用于指定音频设备 PCM,以 hwx,x 开头(前 x 表示声卡号,后 x 表示设备号)。根据上面 # arecord -l 列出的设备,如果选择 tvp5158 来录制声音的话,那么 pcm 设备就为 hw0,0,如果选择 tlv320aic3x,则 pcm 设备为 hw0,1。

-r 指定采样频率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000。

-f 指定采样格式:cd/cdr/dat。

用 arecord 录制音频的例子如下(录制完后在 /a 目录下可以找到 1.wmv 文件):

# arecord -Dhw:0,1 -r8000 -f cd /a/1.wmv  

音频播放——aplay

# aplay -hUsage: aplay [OPTION]... [FILE]...  -h, --help              help
    --version           print current version
-l, --list-devices      list all soundcards and digital audio devices
-L, --list-pcms         list device names
-D, --device=NAME       select PCM by name
-q, --quiet             quiet mode
-t, --file-type TYPE    file type (voc, wav, raw or au)
-c, --channels=#        channels
-f, --format=FORMAT     sample format (case insensitive)
-r, --rate=#            sample rate
-d, --duration=#        interrupt after # seconds
-M, --mmap              mmap stream
-N, --nonblock          nonblocking mode
-F, --period-time=#     distance between interrupts is # microseconds
-B, --buffer-time=#     buffer duration is # microseconds
    --period-size=#     distance between interrupts is # frames
    --buffer-size=#     buffer duration is # frames
-A, --avail-min=#       min available space for wakeup is # microseconds
-R, --start-delay=#     delay for automatic PCM start is # microseconds
                        (relative to buffer size if <= 0)
-T, --stop-delay=#      delay for automatic PCM stop is # microseconds from xrun
-v, --verbose           show PCM structure and setup (accumulative)
-V, --vumeter=TYPE      enable VU meter (TYPE: mono or stereo)
-I, --separate-channels one file for each channel
    --disable-resample  disable automatic rate resample
    --disable-channels  disable automatic channel conversions
    --disable-format    disable automatic format conversions
    --disable-softvol   disable software volume control (softvol)
    --test-position     test ring buffer position
    --test-coef=#        test coeficient for ring buffer position (default 8)
                        expression for validation is: coef * (buffer_size / 2)  --test-nowait       do not wait for ring buffer - eats whole CPU
    --max-file-time=#   start another output file when the old file has recorded
                        for this many seconds  --process-id-file   write the process ID here
    --use-strftime      apply the strftime facility to the output file name
Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM SPECIAL S24_3LE S24_3BE U24_3LE U24_3BE S20_3LE S20_3BE U20_3LE U20_3BE S18_3LE S18_3BE U18_3LE
Some of these may not be available on selected hardware
The availabled format shortcuts are:
-f cd (16 bit little endian, 44100, stereo)
-f cdr (16 bit big endian, 44100, stereo)
-f dat (16 bit little endian, 48000, stereo)  

  与 arecord 命令类似,用 # aplay -l 可以列出声卡和数字音频设备。
一个简单的播放例子如下:

# aplay -Dhw:0,1 -r8000 -f cd /a/1.wmv  

如果想要一边播放一边收听可以用下面利用管道的命令:

# arecord -Dhw:0,1 -r192000 -f cd|aplay -Dhw:0,1 -r192000  

音频配置——amixer

  alsamixer 是Linux 音频架构 ALSA 中的 Alsa 工具的其中一个,用于配置音频的各个参数。alsamixer 是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个 switch(开关)等等操作。
  amixer,是 alsamixer 的文本模式,即命令行模式,需要用 amixer 命令的形式去配置你的声卡的各个选项。对于 amixer 的使用,你首先需要搞懂你要设置的参数是哪些,然后才可能去了解,如何去配置对应的值,相对 alsamixer 来说,amixer 是有点繁琐。

amixer 用法说明:

# amixer -hUsage: amixer <options> [command]  Available options:  -h,--help       this help  -c,--card N     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 sID P      set contents for one mixer simple control  sget sID        get contents for one mixer simple control  controls        show all controls for given card  contents        show contents of all controls for given card  cset cID P      set control contents for one control  cget cID        get control contents for one control  

主要用到的命令参数有:
controls:列出控制项
contents:列出控制上下文(也就是控制项和值)
cset cID P:设置控制项值
cget cID:获取设置项值

使用方法:
1、用 # amixer controls 列出所有控制项。
2、如果对控制项不熟悉或者想查看当前的所有配置可以使用 # amixer contents 命令。
3、查看获取某个设置项的值用 # amixer cget + 控制参数 命令。
  这里控制参数直接复制 # amixer controls 打印出来的数据就行,如:

# amixer cget numid=94,iface=MIXER,name='Left PGA Mixer Line1R Switch'
numid=94,iface=MIXER,name='Left PGA Mixer Line1R Switch'  ; type=BOOLEAN,access=rw------,values=1  : values=off  

4、根据控制参数类型设置控制参数使用 # amixer cset + 控制参数 + 设置参数 命令。如:

# amixer cset numid=94,iface=MIXER,name='Left PGA Mixer Line1R Switch' on
numid=94,iface=MIXER,name='Left PGA Mixer Line1R Switch'  ; type=BOOLEAN,access=rw------,values=1  : values=on  

5、关于参数
values 表示数值对于 volume 之类的是具体的数字,在上下文菜单中有显示数值的范围,对于 switch 之类的表示开关一般是 on 或 off。

ALSA 音频工具 amixer、aplay、arecord相关推荐

  1. ALSA音频工具amixer,aplay,arecord

    ALSA音频工具amixer,aplay,arecord http://www.cnblogs.com/cslunatic/p/3227655.html ALSA音频工具编译安装 ========== ...

  2. amixer 如何切通道_ALSA音频工具amixer,aplay,arecord

    ALSA音频工具编译安装 ========================================================================1.官网http://www. ...

  3. linux 查看声卡设备并测试录音 (ALSA 音频工具)

    测试环境 ubuntu12 与其他linux 系统大同小异 高级Linux声音体系(英语:Advanced Linux Sound Architecture,缩写为ALSA)是Linux内核中,为声卡 ...

  4. Linux ALSA音频系统:platform,machine,codec

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_41965270/arti ...

  5. ALSA音频编程常用参数详细说明

    ALSA音频编程常用参数详细说明 ALSA简介 音频采样回放过程 音频采样过程 音频回放过程 PCM及其相关参数 PCM简介 参数说明 实例分析 PCM接口编程 WAV音频格式 WAV简介 WAV格式 ...

  6. linux下lamealsa进行音频流操作(三)alsa音频编程教程

    1. ALSA音频编程介绍   ALSA 代表高级 Linux 声音架构.它由一组内核驱动程序.一个应用程序编程接口 (API) 库和用于在 Linux 下支持声音的实用程序组成.在本文中,我简要概述 ...

  7. linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系

    转:https://blog.csdn.net/lugandong/article/details/72468831 一. 拿512fs说话: 看图知道采样的位深是32bit(位),左右声道各占了8* ...

  8. Linux ALSA音频子系统二

    From 本文以高通平台为例,介绍一下android下的音频结构.android使用的是tinyALSA作为音频系统,使用方法和基本框架与linux中常用的ALSA音频子系统是一致的. ALSA音频框 ...

  9. Linux ALSA 音频系统:物理链路篇

    原址 1. Overview 硬件平台及软件版本: Kernel - 3.4.5 SoC - Samsung exynos CODEC - WM8994 Machine - goni_wm8994 U ...

  10. C++常用的音频工具库

        由于C++这种语言改装于C语言,它在C语言的基础上加了继承.封装.多态,使编程风格更接近面向对象(OO:object-oriented),在游戏开发.服务器编程.音视频处理.网络通信等领域应用 ...

最新文章

  1. pjax 历史管理 jQuery.History.js
  2. 面试c语言考题,c语言面试最必考的十道试题,求职必看!!!
  3. Bishops Alliance—— 最大上升子序列
  4. 物联网技术周报第 143 期: Unity 3D 和 Arduino 打造虚拟现实飞行器
  5. 西华大学c语言期末成绩占比例,期末成绩开始录入!优秀率一般不得超过20%
  6. console.log打印值,颜色 - 解决篇
  7. Java基础---匿名对象的理解和使用
  8. 【BZOJ4458】GTY的OJ
  9. 广域网访问局域网路由器设置_交换机路由器如何连接 交换机路由器连接方法【详解】...
  10. 在Unity3D中实现安卓平台的本地通知推送
  11. hybrid环境下划分vlan一个实验 ————一故障分析
  12. WebX框架使用说明
  13. 用计算机画画内容,【经验】怎么用电脑绘画?
  14. 回文串----蘑菇街2016校园招聘
  15. Android 关于IPV6 DNS的问题
  16. 架构模式之 CS和BS的区别
  17. 保研浙大直博学姐亲身经验 浙大计算机夏令营 浙大计算机九推
  18. 万向集团要在区块链上构建智慧城市,这将如何实现?
  19. 【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图
  20. PDF怎么编辑文字?这个途径不妨一试

热门文章

  1. 中国高铁线路、列车、开通时间数据(2003-2020年)
  2. RocketMQ ConsumeQueue 消费队列文件
  3. 淘宝订单API接口参数详解
  4. 免费抖音视频解析网站_抖音规则解析:抖音视频为什么能火?推荐规则是什么?【揭秘】...
  5. android怎么备份镜像文件,如何备份手机系统镜像? - Android系统区 - 无忧启动论坛 - Powered by Discuz!...
  6. paypal java sdk_PayPal-Java SDK /信用卡付款问题
  7. NC气象文件转TIF影像小工具开发(PyQt5 开发)
  8. 算法快学笔记(一):算法入门
  9. stm32数据手册boot_stm32f103中文手册.pdf
  10. java实现代理服务器