使用alsa-utils调试ALSA驱动
alsa-utils工具包的使用
alsa-utils工具包的使用一.alsa-utils介绍ALSA是kernel中的一个声音驱动程序.它包括alsa核心和其他声卡的驱动. alsa-utils是alsa的一个工具包,里面包含有声卡测试和音频编辑的工具.二.alsa-utils的安装1.RPM包方式Turbolinux 10.5,11版本已经包含有alsa-utils的rpm包,你可以直接安装: # rpm -ivh alsa-utils-xxx.rpm2.源码包方式下载地址:/main/index.php/Download源码包安装方法:# tar zxvf alsa-utils-1.0.6.tar.gz# cd alsa-utils-1.0.6# ./configure# make install三.alsa-utils工具的使用alsa-utils包含的工具有:alsactl, aconnect, alsamixer, amidi, amixer, aplay, aplaymidi, arecord, arecordmidi,aseqnet, iecset, speaker-test1.alsactl的使用alsactl用来对alsa声卡驱动进行一些高级的设置.系统中装有多个声卡,它也可以支持.有时在音量控制面板无法调整的选项,可以使用alsactl来实现.alsactl可以将指定声卡的驱动程序设置信息保存到配置文件.或从配置文件中恢复指定声卡的驱动程序的设置信息.alsactl格式:alsactl [options] [store|restore] <card # or id>选项:-h, --help打印帮助信息-f, --file指定使用的配置文件,默认为/etc/asound.state.Select the configuration file to use. The default is/etc/asound.state-F, --force与恢复命令一起使用.表示最大限度的恢复设置值.-d, --debug调试模式,输出更多细节信息.-v, --version打印alsactl版本号.文件:/etc/asound.state(或使用-f指定的文件)保存有声卡所有混合器的设置信息.示例:# rm /etc/asound.state -f# alsactl store2.aconnect的使用aconnect是ALSA音序器的连接管理器.用来连接或断开ALSA音序器上的端口.端口是可以随意定义的.如,使用aconnect可以连接到任何由aseqview建立的设备端口.命令格式:aconnect [-d] [-options] sender receiveraconnect -i|-o [-options]aconnect -x选项:连接管理-d, --disconnect断开连接.-e, --exclusive使用独占模式连接端口.发送和接收端口将不能再与其他端口相连.-r, --real queue将时间包的时间戳,转换为真实时间队列的当前值.显示端口-i, --input显示存在的输入端口.-o, --output显示存在的输出端口.-l, --list显示当前的连接状态.删除连接-x, --removeall删除所有连接.示例:连接端口64:0到65:0:% aconnect 64:0 65:0这个连接是单向的,所有到发送端口64:0的数据,将被重定向到接收65:0端口.如果有另一个端口65:1,也使用64:0作为发送端口,则数据会同时发送到2个接收端口.端口连接时,使用:% aconnect -d 64:0 65:0地址也可以使用客户端的名字来代替:% aconnect External:0 Emu8000:1使用-i打印出输入端口信息.-o打印出输出端口信息.% aconnect -iclient 0: ’System’ [type=kernel]0 ’Timer ’1 ’Announce ’client 64: ’External MIDI-0’ [typ e=kernel]0 ’MIDI 0-0 ’可以使用-x选项来清除所有的连接.% aconnect -x3.alsamixer的使用alsamixer是一个终端界面的声卡音量调节器.如图:命令格式:alsamixer [options]选项:-h, -help显示帮助信息.-c <card number or idenfication>指定需要设置的声卡.默认为0.-D <device identification>选择需要控制的调节器.-g设置界面颜色.-s最小化界面窗口.快捷键:进入alsamixer界面后,可以使用下面快捷键进行控制:常规控制:左右箭头或n,p 用来选择通道.上下箭头或+,- 同时调整选定通道的左右声道的音量.B,= 设置左右声道音量相同.M 静音当前通道.<,>分别对左,右声道静音.空格选择录音源.在选定的通道上按"空格",可以标记此通道为录音源.此操作仅限输入设备.插入键或";",删除键或"'"分别选定左右通道.L 刷新屏幕.快捷设置PageUp 增大5格音量.PageDown 减小5格音量.End 设置音量为0.分别调整左,右或整个通道的音量.Q,W,E 增大左,右,通道的音量.Z,X,C 减小左,右,通道的音量.alt-q,ESC 退出.4.amidi的使用amidi的作用是对ALSA的RawMIDI端口进行读写.amidi是一个命令行工具,允许你以独占模式向MIDI设备读/写数据. 命令格式:amidi options选项:-h,-V,-l,-L 用于显示信息.-s,-r,-S,-d 用于发送/接收数据.-h, --help打印帮助信息.-V, --version打印版本号.-l, --list-devices打印所有硬件MIDI端口的列表.-L, --list-rawmidis打印所有RawMIDI定义.-p, --port=name设置要使用的ALSA RawMIDI端口.若不指定,则使用声卡0的端口0.-s, --send=filename发送指定文件的内容到MIDI端口.文件中必须包含raw MIDI 命令(.syx,.mid文件).-r, --receive=filename将MIDI端口接收的数据写入指定文件.-S, --send-hex="..."发送十六进制字节到MIDI端口.-d, --dump从MIDI端口接收数据,然后以十六进制形式打印出来.-t, --timeout=秒指定超时,当端口无数据输出达到超时时长时,将停止接收数据.示例:amidi -p hw:0 -s my_settings.syx发送my_settings.syx终端MIDI命令到端口 hw:0.amidi -S ’发送XG复位到默认端口.amidi -p virtual -d建立一个虚拟RawMIDI端口,然后发送所有数据到这个端口.5.amixer的使用amixer是命令行的ALSA声卡驱动调节器工具.amixer用来在命令行控制ALSA的调节器,并且支持多声卡.amixer不加参数时,将打印默认声卡的设置信息.命令格式:amixer [-c card] [cmd]命令:help 显示语法帮助.info 显示调节器设备的信息.scontrols 显示调节器器的完整列表 .scontents 显示包含详细信息的调节器的完整列表.set or sset <SCONTROL> <PARAMETER> ...设置调节器信息.get or sget <SCONTROL>显示调节器的信息.controls 显示声卡控制器的信息.contents 显示完整的声卡控制器信息.cset <CONTROL> <PARAMETER> ...设置声卡控制器信息.cget <CONTROL> 显示声卡控制器的信息.选项:[-c card]选择指定的声卡.[-D device]选择需要控制的设备名.默认是 default.-h Help显示帮助信息.-q安静模式.不输出设置结果.示例:# amixer -c 1 sset Line,0 80%,40% unmute cap设置第2块声卡的"line"的左声道音量为80%,右声道为40%,取消静音,并设置它为声音源.# amixer -c 2 cset numid=34 40%设置第34个声卡元素为40%.6.arecord,aplay的使用arecord,aplay是命令行的ALSA声卡驱动的录音和播放工具.arecord是命令行ALSA声卡驱动的录音程序.支持多种文件格式和多个声卡. aplay是命令行播放工具,支持多种文件格式.命令格式:arecord [flags] [filename]aplay [flags] [filename [filename]] ...选项:-h, --help帮助.--version打印版本信息.-l, --list-devices列出全部声卡和数字音频设备.-L, --list-pcms列出全部PCM定义.-D, --device=NAME指定PCM设备名称.-q --quiet安静模式.-t, --file-type TYPE文件类型(voc,wav,raw或au).-c, --channels=#设置通道号.-f --format=FORMAT设置格式.格式包括:S8 U8 S16_LE S16_BE U16_LEU16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BEFLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BEIEC958_SUBFRAME_LEIEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM-r, --rate=#<Hz>设置频率.-d, --duration=#设置持续时间,单位为秒.-s, --sleep-min=#设置最小休眠时间.-M, --mmapmmap流.-N, --nonblock设置为非块模式.-B, --buffer-time=#缓冲持续时长.单位为微妙.-v, --verbose显示PCM结构和设置.-I, --separate-channels设置为每个通道一个单独文件.示例:aplay -c 1 -t raw -r 22050 -f mu_law foobar播放raw文件foobar.以22050Hz,单声道,8位,mu_law格式.arecord -d 10 -f cd -t wav -D copy foobar.wav以CD质量录制foobar.wav文件10秒钟.使用PCM的"copy".7.aplaymidi的使用aplaymidi用来播放标准的MIDI文件.aplaymidi是一个命令行工具,可以在一个或多个ALSA端口上播放MIDI 文件.命令格式:aplaymidi -p client:port[,...] [-d delay] midifile ...选项:-h, --help输出帮助信息.-V, --version输出版本信息.-l, --list输出可以使用的输出端口列表.-p, --port=client:port,...设置端口.-d, --delay=seconds设置MIDI文件结束后,等待时长.8.arecordmidi的使用arecordmidi用于录制标准的MIDI文件.arecordmidi可以从一个或多个ALSA端口上,录制一个标准MIDI文件. 命令格式:arecordmidi -p client:port[,...] [options] midifile选项:-h,--help打印帮助信息.-V,--version打印版本号.-l,--list打印可以使用的输入端口.-p,--port=client:port,...设置端口.-b,--bpm=beats设置MIDI文件的速率,默认为120 BPM.-f,--fps=frames设置帧率.-s,--split-channels设置每个通道将录制成一个单独的MIDI文件.-d,--dump在标准输出上,以文本形式显示接受到的事件信息9.aseqnet的使用aseqnet是ALSA调节器的网络连接工具.aseqnet是ALSA调节器的客户端程序,可以从网络上发送和接收事件数据包. 网络上有主机A,主机B.A为服务器端,B为客户端.ALSA调节器系统必须同事运行在两个服务器上.然后建立服务器端口:hostA% aseqnetsequencer opened: 128:0在HostB上执行:hostB% aseqnet hostAsequencer opened: 132:0现在所有发送到HostA:128:0的数据将被传送到HostB:132:0上,反之亦然. 命令格式:aseqnet [remotehost]选项:-p port指定TCP端口号或服务名.-s addr设置指定地址用于读操作.-d addr设置指定地址用于写操作.-v详细输出模式.10.iecset的使用设置或输出IEC958状态位.iecset是个小工具,通过ALSA的API,设置或输出IEC958(或称S/PDIF)状态位信息.直接运行iecset将输出当前IEC958的状态信息. 命令格式:iecset [options] [cmd arg...]选项:-D device设置需要打开的设备名.-c card设置需要打开的网卡名.-x输出AESx字节格式的状态信息.-i从标准输入读取命令信息,每行一个命令.命令:professional <bool>专业模式(true)或用户模式(false).audio <bool>音频模式(true).rate <int>采样频率,单位Hz.emphasis <int>设置加强值.0 = none, 1 = 50/15us, 2 = CCITT.lock <bool>速率锁.sbits <int>采样位:2 = 20bit, 4 = 24bit, 6 = undefined.wordlength <int>设置字长:0 = No, 2 = 22-18 bit, 4 = 23-19 bit, 5 = 24-20bit, 6 = 20-16 bit.category <int>分类:值从0到0x7f.copyright <bool>设置是否包含版权.original <boo>原始标记:示例:输出当前IEC958信息.$ iecsetMode: consumerData: audioRate: 44100 HzCopyright: permittedEmphasis: noneCategory: generalOriginal: 1st generationClock: 1000 ppm显示当前第1块声卡的IEC958状态位.$ iecset -Dhw:0Mode: consumerData: non-audioRate: 44100 HzCopyright: permittedEmphasis: noneCategory: generalOriginal: 1st generationClock: 1000 ppm设置当前为用户模式,并打开"非音频"位.$ iecset pro off audio offMode: consumerData: non-audioRate: 44100 HzCopyright: permittedEmphasis: noneCategory: generalOriginal: 1st generationClock: 1000 ppm11.speaker-test的使用speaker-test是一个针对 ALSA驱动的声音测试工具. speaker-test可以分别对左右声道进行单独的测试. 命令格式:speaker-test [-options]选项:-c | --channels NUM设置通道数目.-D | --device NAME设置使用的PCM设备名.-f | --frequency FREQ设置声音频率.--help输出帮助信息.-b | --buffer TIME设置缓冲区时长.0为使用最大的缓冲区大小.-p | --period TIME设置节拍为多少微秒.-r | --rate RATE设置音频率.-t | --test pink|sine|wav-t pink 表示测试时使用噪声.-t sine 表示测试时使用音频信号声.-t wav 表示测试时使用WAV文件.-l | --nloops COUNT设置测试循环的次数.-w | --wavfile设置测试时播放的wav文件.-W | --wavdir设置一个包含wav文件的目录.默认为/usr/share/sounds/alsa.示例:在一个音频接口上进行立体声测试# speaker-test -Dplug:front -c2在两个音频接口上进行4声道测试.# speaker-test -Dplug:surround40 -c4在立体声接口上进行5.1声道测试.# speaker-test -Dplug:surround51 -c6测试低音扬声器.# speaker-test -Dplug:surround51 -c6 -s1 -f75。
alsa plugins用法dshare
alsa plugins用法dshareALSA Plugins的使用方法ALSA(Advanced Linux Sound Architecture)是Linux操作系统中用于提供音频和声音功能的一个软件框架。
它包含了一系列的驱动程序、库和工具,可以实现音频的录制、回放和处理等功能。
而ALSA Plugins则是ALSA框架中的一个组件,它提供了一些附加的音频处理功能,使得我们能够在Linux系统中进行更高级的音频处理操作。
在本文中,我们将介绍如何使用ALSA Plugins进行音频处理。
下面是一些常见的ALSA Plugins用法:1. ALSA插件的安装在使用ALSA Plugins之前,首先需要确保已经安装了ALSA框架。
可以使用以下命令进行安装:```sudo apt-get updatesudo apt-get install alsa-base alsa-utils```2. 插件的列表ALSA Plugins提供了多种不同的插件,可以通过`aplay -L`命令列出所有可用的插件。
例如,可以看到如下输出:```surround40:CARD=Device,DEV=0HDA Intel Device, ALC887-VD Analog4.0 Surround output to Front and Rear speakerssurround41:CARD=Device,DEV=0HDA Intel Device, ALC887-VD Analog4.1 Surround output to Front, Rear and Subwoofer speakers...```3. 插件的配置插件的配置可以通过修改ALSA的配置文件来实现。
配置文件通常位于`/etc/asound.conf`或者`~/.asoundrc`。
可以在其中添加以下内容,指定所需要的插件: ```pcm.custom {type plugslave.pcm "hw:Device"slave.channels 2ttable {0.0 11.1 1}}```4. 插件的使用使用插件进行音频处理可以通过将插件名称作为参数传递给`aplay`或者`arecord`命令来实现。
Linux系统中用ALSA驱动声卡流程详解
Linux系统中用ALSA驱动声卡流程详解一、什么是ALSAAdvanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是 Linux 高级声音体系(这是我直译的,可能译的不对)。
一谈到体系就有点范围就太大了,所以ALSA不仅仅是包括对声卡的支持和驱动。
ALSA具有如下特征:1、对所有音频接口的高效支持,从普通用户的声卡到专业级别多路音频设备。
2、声卡驱动完全模块化设计。
3、SMP and thread-safe design。
4、开发库(alsa-lib)为程序设计提供了简单、方便,并且拥有有高级的效果和功能。
5、支持旧版本的OSS API 结口,能为大多数的OSS应用程序提供兼容。
OSS是一个商业性的驱动,OSS有一个简装本的代码已经移入内核和ALSA,其中alsa-oss就是。
OSS公司据说目前已经并不存在了。
我们没有必要用OSS 公司提供的商业版本。
用ALSA和OSS简装版足够。
二、关于硬件驱动驱动的必备基础1、如何查看硬件芯片在Linux操作系统中,所有的硬件都是以芯片组来区分的,品牌并不是最重要的。
硬件最重要的标识是芯片组。
所以您在讨论区求助的时候,只说硬件品牌,而不提供芯片组,大家是帮助不了您的,切记。
我们查看硬件的芯片组是的命令是 lspci -v 或者是dmesg,由于dmesg输出的信息不太多,不够直观。
所以经常用的还是lspci -v 。
也可以用lshal 获取。
最方便的还是lspci -v。
初学者还是用 lspci -v 更好一点。
我们运行lspci -v 后,如果查看声卡芯片组,发会现有类似下面的一段:2、系统内核版本[root@localhost beinan]# uname -r -m -p -i2.6.11-1.1369_FC4 i686 i686 i386上面的表示的是系统的内核版本,处理器架构等。
提示:如果您自己编译内核,还要安装kernel-devel (或 kernel-source),这个是在系统光盘或者映像文件中有带。
ALSALib和ALSAutils移植
ALSALib和ALSAutils移植ALSA 是目前 Linux 系统上大量采用的音频设备库,通过 Alsa 架构能分离驱动和应用的开发。
Alsa 为上层提供API 的同时,也为下层提供了接口,在内核配置的时候指定“支持Alsa”就能得到内核支持,具体位置为:Menuconfig -> Device Drivers -> Sound card support -> Advanced Linux Sound Architecture ,驱动层所添加的音频设备应该也会在这里出现有了 Alsa 内核驱动,我们还需要 Alsa Lib 和 Alsa Util 的支持,这 3 者的关系如下图所示:Alsa Util-------------Alsa lib-------------Alsa DriverAlsa Util 是纯应用层的软件,相当于 Alsa 设备的测试程序, Alsa Lib 则是支持应用 API 的中间层程序。
移植Alsa 程序的顺序就是先后移植 Driver,Lib,Util 。
下载ALSA Lib和ALSA utils的地址:注意:首先设置ubuntu的环境变量vim /etc/profile在文件末尾加上以下命令行exportPATH="$PATH:/home/zhhao/x6818_linux_160719/buildroot/out put/host/opt/ext-toolchain/bin"重启ubuntu系统后在任意位置输入arm-会有以下提示:arm-cortex_a9-linux-gnueabi-arm-cortex_a9-linux-gnueabi-addr2linearm-cortex_a9-linux-gnueabi-ararm-cortex_a9-linux-gnueabi-asarm-cortex_a9-linux-gnueabi-c++arm-cortex_a9-linux-gnueabi-ccarm-cortex_a9-linux-gnueabi-c++filtarm-cortex_a9-linux-gnueabi-cpparm-cortex_a9-linux-gnueabi-ct-ng.configarm-cortex_a9-linux-gnueabi-elfeditarm-cortex_a9-linux-gnueabi-g++arm-cortex_a9-linux-gnueabi-gccarm-cortex_a9-linux-gnueabi-gcc-4.7.4arm-cortex_a9-linux-gnueabi-gcc-ararm-cortex_a9-linux-gnueabi-gcc-nmarm-cortex_a9-linux-gnueabi-gcc-ranlibarm-cortex_a9-linux-gnueabi-gcovarm-cortex_a9-linux-gnueabi-gdbarm-cortex_a9-linux-gnueabi-gfortranarm-cortex_a9-linux-gnueabi-gprofarm-cortex_a9-linux-gnueabi-ldarm-cortex_a9-linux-gnueabi-ld.bfdarm-cortex_a9-linux-gnueabi-lddarm-cortex_a9-linux-gnueabi-ld.gold表示环境变量设置成功Alsa Lib 移植Lib 移植不需要修改一丁点儿的源码,只需要重新编译 lib 以支持自己的平台。
Linux_ALSA声卡驱动原理分析
11/12/2011
三、准备工作
4. 流程图结构说明 (1) 图示为函数的调用关系,向下为同一级调用,向右为函数内部的子函数调用。 (2) 绿色文字函数名(如function2)表示该函数是调用流程中比较关键的点。 (3) 红底白字的函数名(如function…)表示和其它层(如app和lib、lib和driver、alsa-driver和device-driver)的接口 函数或kernel的回调函数。 (4) 蓝色双虚线为函数实参等形式的输出值或函数返回值(如sun_function…有输出值到function1)。
11/12/2011
目录
一、导读 二、ALSA架构简介 三、准备工作 四、设备打开过程和数据流程 i. 整体分析 ii. 设备驱动程序insmod流程图 iii. 应用程序主流程图 iv. 声卡打开流程图 v. 数据写入流程图 五、ALSA其它形式的数据写入方法流程图
11/12/2011
三、准备工作
11/12/2011
目录
一、导读 二、ALSA架构简介 三、准备工作 四、设备打开过程和数据流程 i. 整体分析 ii. 设备驱动程序insmod流程图 iii. 应用程序主流程图 iv. 声卡打开流程图 v. 数据写入流程图 五、ALSA其它形式的数据写入方法流程图
11/12/2011
一、导 读
主函数()
function1()
sub_function1() function2() ......() sun_functionnction...()
function...()
11/12/2011
目录
一、导读 二、ALSA架构简介 三、准备工作 四、设备打开过程和数据流程 i. 整体分析 ii. 设备驱动程序insmod流程图 iii. 应用程序主流程图 iv. 声卡打开流程图 v. 数据写入流程图 五、ALSA其它形式的数据写入方法流程图
LinuxALSA音频库(一)交叉编译详细说明
LinuxALSA⾳频库(⼀)交叉编译详细说明ALSA应⽤库是核⼼功能,⽽alsa-utils是⼀些⼯具功能集合库。
单纯地播放⼀个wav⽂件,使⽤alsa-utils即可,如果还需要合成⾳频、调试⾳频质量,那么就需要ALSA应⽤库。
1.
alsa-utils安装后,可以执⾏⼀下aplay -h,测试是否输出,如果有信息打印输出,说明已经安装成功了:
aplay的使⽤:
2.
欲安装使⽤ALSA应⽤库,先执⾏下⾯指令,会看到相应设备:
执⾏:cat /proc/asound/devices
正常情况下,在你的/dev/snd会看到⼀些设备结点(有例外,就是内核驱动调整了结点位置)
这就说明驱动⽀持了。
我下载的版本:
****reference BLOGS:
该alsa库安装⽅法:
root权限下:
./configure --host=mips-linux-gnu --prefix=/usr/local/open_lib
make ARCH=mips
make install
交叉编译后,挪到linux板⼦上去:
开发板上需要ubuntu主机安装路径下的lib⽂件夹内的所有⽂件,存到板⼦上的/usr/lib内,或者/lib内。
还要把⼀些⽂件(ubuntu主机安装路径下的share⽂件夹,这整个⽂件夹)传到板上的同名路径/usr/local/open_lib内(./configure时,由prefix指定的路径)。
是挪动整个share⽂件夹,对于这点,上⾯介绍的参考博客写得都不清晰,见下图:
.。
Linux--ALSA
Linux ALSA 声卡驱动的分析一、ALSA && OSS在linux系统中,先后出现了音频设备的两种主要框架:OSS和ALSA.针对不同的数字音频子系统,出现了几种微处理器或DSP与音频器件间用于数字转换的接口。
1.1 音频设备的硬件接口:(1)PCM接口。
(2)IIS(I2S)接口。
(3)AC97接口。
在CD,MD,MP3随身听多采用IIS接口,移动电话会采用PCM接口,具有音频功能的PDA则多使用和PC一样的AC97编码格式。
1.2 linux OSS音频设备驱动OSS标准中有两个最基本的音频设备:mixer(混音器)和dsp(数字信号处理器)。
在声卡的硬件电路中,mixer是一个很重要的组成部分,它的作用是将多个信号组合或者叠加在一起,对于不同的声卡来说,其混音器的作用可能各不相同。
在OSS驱动中,/dev/mixer设备文件时应用程序对mixer进行操作的软件接口。
1.2.1 OSS用户空间编程(dsp编程)对OSS驱动声卡的编程使用linux文件接口函数,dsp接口的操作一般包括如下几个步骤(1)打开设备文件/dev/dsp。
(2)如果有需要,设置缓冲区大小。
(3)设置声道(channel)数量。
根据硬件设备和驱动程序的具体情况,可以设置为单声道或者立体声。
(4)设置采样格式和采样频率。
(5)读写/dev/dsp实现播放和录音。
1.3 linux ALSA音频设备驱动1.3.1 ALSA的主要特点.(1)支持多种声卡设备。
(2)模块化的内核驱动程序。
(3)支持SMP和多线程。
(4)提供应用开发函数库(alsa-lib)以简化应用程序开发。
(5)支持OSS API,兼容OSS应用程序。
ALSA系统包括驱动包alsa-driver,开发包alsa-libs,开发板插件alsa-libplugins,设置管理工具包alsa-utils,其他声音相关处理小程序包alsa-tools,特殊音频固件支持包alsa-firmware,OSS接口兼容模拟层工具alsa-oss,其中只有驱动包是必需的。
Linux ALSA声卡驱动详细分析
1.Linux ALSA声卡驱动之一:ALSA架构简介一. 概述ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:/。
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。
图 1.1 alsa的软件体系结构由图1.1可以看出,用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。
内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能。
本系列博文仅对嵌入式系统中的alsa-driver和alsa-soc进行讨论。
二. ALSA设备文件结构我们从alsa在linux中的设备文件结构开始我们的alsa之旅. 看看我的电脑中的alsa驱动的设备文件结构:$ cd /dev/snd$ ls -lcrw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0ccrw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0pcrw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D1ccrw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1pcrw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seqcrw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer$我们可以看到以下设备文件:∙controlC0 --> 用于声卡的控制,例如通道选择,混音,麦克风的控制等∙midiC0D0 --> 用于播放midi音频∙pcmC0D0c --〉用于录音的pcm设备∙pcmC0D0p --〉用于播放的pcm设备∙seq --〉音序器∙timer --〉定时器其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。
Linux ALSA声卡驱动原理分析- 设备打开过程和数据流程
pci_enable_device()
snd_ensoniq_1371_mixer() snd_ac97_bus() snd_ac97_mixer()
snd_ensoniq_pcm()
pci_request_regions() pci_resource_start() request_irq() pci_set_master()
※红色文字表示shell中输入的命令,具体命令要根据具体环境自己修改。
alsa-utils-1.0.16和alsa-lib-1.0.16从网上下,也可以在光盘debian-506-source-DVD-1.iso中的pool/main/a/文件夹下找到。
(2). 复制音频文件,如复制test_files文件夹到/opt下,
(6). 通过gdb可以对alsa-utils的aplay和alsa-lib的libsound.so进行本地调试。
#gdb aplay
(gdb)set args /opt/test_files/pcm.wav
(gdb)b main
(gdb)r
1/5/2020
… … ... …
2. ALSA-lib调试方法示例。
i. 整体分析
四、设备打开过程和数据流程
ALSA应用程序
app 1
……
app n
ALSA-lib
control
timer
… pcm
dmix
ALSA-driver hardware
内核API 设备驱动
ens1371
user space kernel space
1. 声卡芯片的硬件驱动程序实际上是alsa-driver的 一部分,但是在本文档中,为了明示层次关系, 将这两个分开对待。将硬件驱动程序叫做 device-driver(设备驱动), alsa-driver的其它部 分叫做alsa-driver(alsa驱动)。
alsa plugins用法dshare
alsa plugins用法dshare一、简介alsa plugins是一种用于音频处理的插件,可用于增强Linux系统中的音频播放和录音功能。
dshare是一种常用的alsa plugins之一,它提供了多种音频共享功能,如音频流分享、音频播放控制等。
二、安装要使用dshare插件,您需要先安装alsa和相关依赖包。
在大多数Linux发行版中,可以使用包管理器进行安装。
例如,在Ubuntu上,可以使用以下命令安装alsa和相关依赖包:```sqlsudo apt-get updatesudo apt-get install alsa-utils libasound2-plugins```安装完成后,您需要确保dshare插件已加载到alsa中。
您可以使用以下命令检查已加载的插件:```bashaplay -l | grep dshare```如果输出中包含“dshare”,则表示插件已成功加载。
三、使用方法1. 音频流分享:dshare插件提供了一种将音频流分享给其他应用程序的方式。
您可以使用以下命令将音频流分享给其他应用程序:```arduinodshare -s <源音频设备> -i <目标音频设备> -m <采样率> -n <通道数>```其中,`<源音频设备>`是您要分享的音频设备的名称或编号,`<目标音频设备>`是您要将音频流发送到的目标设备的名称或编号,`<采样率>`和`<通道数>`是您希望分享的音频格式的参数。
2. 音频播放控制:dshare插件还提供了一些音频播放控制功能,如音量调节、暂停/播放、快进/快退等。
您可以使用以下命令控制音频播放:```phpdshare -p <目标音频设备> -c <音量级别> -a <播放/暂停> -f <快进/快退>```其中,`<目标音频设备>`是您要控制播放的音频设备的名称或编号,`<音量级别>`是您希望设置的音量级别(范围为0-100),`<播放/暂停>`是控制播放的指令(`play`表示播放,`pause`表示暂停),`<快进/快退>`是控制快进或快退的指令(`forward`表示快进,`backward`表示快退)。
Linux操作系统声卡驱动的安装与配置
Linux操作系统声卡驱动的安装与配置
一般的声卡驱动是支持windows的,linux很少,所以安装声卡驱动很麻烦。
Linux下安装声卡驱动,用的是alsa,它就好像是万能的一样,可以支持很多类型的声卡,如:
;一个是alsa-lib;最后一个是alsa-untils。
安装步骤:
1、把前面的三个东西给解压出来,解压之后会产生文件夹,比如:文件夹——alsa-driver、alsa-lib、alsa-untils
2、打开终端,先进入alsa-driver文件夹,然后输入……
3、进入alsa-lib文件夹,然后输入的内容除了第2项中的第4小项不要之外,一切照旧。
4、进入alsa-untils文件夹,一切同第三项。
上面的都操作完之后接着就是修改系统文件了。
在/ect目录下有一个moudules.conf的文件,在里面加入:
以上那段内容里面有个snd-xxxx的,那个指的是声卡的设备名称。
查过之后,有一张表可以对照,如下:
根据自己的实际情况然后修改自己的把snd-xxxx改成相对应的名称。
好了保存重启,一般就OK了
第一次操作很麻烦,但习惯了会觉得那是一种乐趣的,至少我自己是这么觉得的。
注:如果是初次操作,需要修改到系统本身的一些东西的话,建议最好先备份,错了改过来就比较容易点,备份,其实就是复制一份同样的东西到另一个安全的地方。
ALSA声卡驱动详解
ALSA声卡驱动详解1.ALSA声卡驱动中的DAPM详解之一:kcontrolDAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。
DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。
用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被打开或关闭。
/******************************************************************************************* **********/声明:本博内容均由/droidphone原创,转载请注明出处,谢谢!/******************************************************************************************* **********/DAPM控件是由普通的soc音频控件演变而来的,所以本章的内容我们先从普通的soc音频控件开始。
snd_kcontrol_new结构在正式讨论DAPM之前,我们需要先搞清楚ASoc中的一个重要的概念:kcontrol,不熟悉的读者需要浏览一下我之前的文章:Linux ALSA声卡驱动之四:Control 设备的创建。
通常,一个kcontrol代表着一个mixer(混音器),或者是一个mux (多路开关),又或者是一个音量控制器等等。
从上述文章中我们知道,定义一个kcontrol主要就是定义一个snd_kcontrol_new结构,为了方便讨论,这里再次给出它的定义:[cpp] view plaincopystruct snd_kcontrol_new {snd_ctl_elem_iface_t iface; /* interface identifier * /unsigned int device; /* device/client number * /unsigned int subdevice; /* subdevice (substream) number */const unsigned char *name; /* ASCII name of item */unsigned int index; /* index of item */unsigned int access; /* access rights */unsigned int count; /* count of same elements */snd_kcontrol_info_t *info;snd_kcontrol_get_t *get;snd_kcontrol_put_t *put;union {snd_kcontrol_tlv_rw_t *c;2const unsigned int *p;} tlv;unsigned long private_value;};回到Linux ALSA声卡驱动之四:Control设备的创建中,我们知道,对于每个控件,我们需要定义一个和他对应的snd_kcontrol_new结构,这些snd_kcontrol_new结构会在声卡的初始化阶段,通过snd_soc_add_codec_controls函数注册到系统中,用户空间就可以通过amixer 或alsamixer等工具查看和设定这些控件的状态。
Linux系统中用ALSA驱动声卡流程详解共10页文档
Linux系统中用ALSA驱动声卡流程详解一、什么是ALSAAdvanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是 Linux 高级声音体系(这是我直译的,可能译的不对)。
一谈到体系就有点范围就太大了,所以ALSA不仅仅是包括对声卡的支持和驱动。
ALSA具有如下特征:1、对所有音频接口的高效支持,从普通用户的声卡到专业级别多路音频设备。
2、声卡驱动完全模块化设计。
3、SMP and thread-safe design。
4、开发库(alsa-lib)为程序设计提供了简单、方便,并且拥有有高级的效果和功能。
5、支持旧版本的OSS API 结口,能为大多数的OSS应用程序提供兼容。
OSS是一个商业性的驱动,OSS有一个简装本的代码已经移入内核和ALSA,其中alsa-oss就是。
OSS公司据说目前已经并不存在了。
我们没有必要用OSS 公司提供的商业版本。
用ALSA和OSS简装版足够。
二、关于硬件驱动驱动的必备基础1、如何查看硬件芯片在Linux操作系统中,所有的硬件都是以芯片组来区分的,品牌并不是最重要的。
硬件最重要的标识是芯片组。
所以您在讨论区求助的时候,只说硬件品牌,而不提供芯片组,大家是帮助不了您的,切记。
我们查看硬件的芯片组是的命令是 lspci -v 或者是dmesg,由于dmesg输出的信息不太多,不够直观。
所以经常用的还是lspci -v 。
也可以用lshal 获取。
最方便的还是lspci -v。
初学者还是用 lspci -v 更好一点。
我们运行lspci -v 后,如果查看声卡芯片组,发会现有类似下面的一段:2、系统内核版本[root@localhost beinan]# uname -r -m -p -i2.6.11-1.1369_FC4 i686 i686 i386上面的表示的是系统的内核版本,处理器架构等。
提示:如果您自己编译内核,还要安装kernel-devel (或 kernel-source),这个是在系统光盘或者映像文件中有带。
android系统开发(九)-Audio部分准备工作alsa移植
android系统开发(九)-Audio部分准备工作alsa移植android系统开发(九)-Audio部分准备工作alsa移植1,audio内核部分的开发,包含codec驱动,cpu的声音驱动和内核alsa驱动等,这个是完全的嵌入式linux的开发内容,这里跳过,请确保这几部分正确。
2,从alsa的官方网站下载最新的alsa-lib-1.0.23和alsa-utils-1.0.23官方网站:alsa-lib基于内核alsa驱动,它将对内核alsa接口的操作封装成libasound库alsa-utils是一个工具包,基于alsa-lib来控制底层alsa驱动,包含aplay/amixer/control等工具alsa的系统架构如下:alsa应用|alsa-utils|alsa-lib|alsa-driveralsa-driver已经集成在linux内核中,alsa应用直接调用alsa-utils工具包的工具来控制底层驱动以操作声卡3,在vendor/ardent/merlin目录下新建一个alsa目录,然后将下载的alsa-lib-1.0.23和alsa-utils-1.0.23解压缩到alsa目录下,将解压缩后的文件夹去掉版本号改成alsa-lib和alsa-utils4,在vendor/ardent/merlin/AndroidBoard.mk文件中加入如下内容:L_PATH := $(LOCAL_PATH)include $(L_PATH)/alsa/Mdroid.mk5,在vendor/ardent/merlin/alsa目录下新建Mdroid.mk文件,内容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)ALSA_PATH := $(LOCAL_PATH)include $(ALSA_PATH)/alsa-lib/Mdroid.mkinclude $(ALSA_PATH)/alsa-utils/Mdroid.mk6,在vendor/ardent/merlin/alsa/alsa-lib目录下新建Mdroid.mk文件,内容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)include $(LOCAL_PATH)/src/Mdroid.mk7,在vendor/ardent/merlin/alsa/alsa-lib/src目录下新建Mdroid.mk文件,内容在文章后面。
alsa配置文件alsa.conf
alsa配置文件alsa.conf使用到了Alsa,在这个过程中涉及到一些硬件的设置和测试,需要了解Alsa的配置文件的写法,稍微总结了一下。
关于alsa文件,有三个包需要关注:alsa-lib,alsa-utils,libaudio。
在alsa.conf中,通常还会引用/etc/asound.conf 和~/.asoundrc这两个配置文件,这两个文件通常是放置你个人需要特殊设置的相关参数。
(1)Alsa.conf中主要的一些内容包括:用hook读取了/etc/asound.conf 和 ~/.asoundrc这两个配置文件:@hooks [{func loadfiles ["/etc/asound.conf""~/.asoundrc"]errors false}](2)设置了default pcm的一些默认参数,如,默认使用Card 0 ,Device 0作为音频设备等等。
defaults.ctl.card 0defaults.pcm.card 0defaults.pcm.device 0defaults.pcm.subdevice -1defaults.pcm.nonblock 1defaults.pcm.ipc_key 5678293(3)使用蓝牙设备:在/etc/asound.conf中添加下列一项用来使用蓝牙的A2DP设备# device for bluetoothpcm.bluetooth{type bluetoothdevice 00:02:5B:00:C1:A0}然后调用 aplay –D bluetooth sample.wav 播放。
需要注意,为了使用该设备,你需要/usr/lib/alsa-lib/libasound_module_pcm_bluetooth.so 这一个蓝牙plugin的库文件。
这是在Bluez相关的包里,和Alsa本身没有关系。
Linux ALSA声卡驱动原理分析- 设备打开过程和数据流程
1. ALSA-lib调试方法
alsa-utils中的aplay程序可以进行应用程序和lib库的调试。
操作如下:
(1) 复制alsa-utils和alsa-lib到linux文件系统下,如:
#cp -rf alsa-utils-1.0.16 /opt/
#cp -rf alsa-lib-1.0.16 /opt/
1. ALSA是Advanced Linux Sound Architecture,高 级Linux声音架构的简称,它在Linux操作系统上 提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。它 包含API 库和工具、内核驱动集合, 对 Linux 声音进行支持。 ALSA 包含一系列内核驱动对 不同的声卡进行支持,还提供了 libasound 的 API 库。用这些进行写程序不需要打开设备等 操作,所以编程人员在写程序的时候不会被底 层的东西困扰。
三、准备工作
图中红色表示为在 shell中输入的命令, 具体命令要根据具体 环境自己修改。
跟踪代码时可以在 gdb中使用 bt(backtrace)指令跟 踪调用栈查看函数调 用关系。
2020/4/3
三、准备作
3. 生成alsa-lib文档 alsa-lib中可以用文档生成工具doxygen生成API及相关说明文档。在alsa-lib-1.0.16中依次执行如下: #cd /opt/alsa-lib-1.0.16 #cd doc #doxygen doxygen.cfg
ii.设备驱动程序insmod流程图
module_init(alsa_card_ens137x_init) alsa_card_ens137x_init() pci_register_driver(&driver)
Linux_ALSA声卡驱动开发实践
atic void __devexit snd_audiopci_remove(struct pci_dev *pci) FUNC_LOG();
atic struct pci_driver driver = { .name = DRIVER_NAME, .id_table = snd_audiopci_ids, .probe = snd_audiopci_probe, .remove = __devexit_p(snd_audiopci_remove), fdef CONFIG_PM //.suspend = snd_ensoniq_suspend, //.resume = snd_ensoniq_resume, endif
6. 仿照snd_audiopci_probe()和 snd_audiopci_remove()的填充与 的填充与alsa_card_ens137x_init()和alsa_card_ens137x_exit()类 似,如此一级一级的填充下去,直至模块可以播放出声音 直至模块可以播放出声音。 对于snd_audiopci_probe()这样比较复杂的函数,要一 行一行的添加,边添加边调试。如遇到变量等应该在前面函数中赋值而还没有实现的部分 如遇到变量等应该在前面函数中赋值而还没有实现的部分,可以先用if宏等方法暂 时注释掉,如下页代码中的红色部分。添加的代码如下:
define DRIVER_NAME "ENS1371“ atic struct pci_device_id snd_audiopci_ids[] = { #ifdef CHIP1370 { 0x1274, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, #endif fdef CHIP1371 { 0x1274, 0x1371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, { 0x1274, 0x5880, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, { 0x1102, 0x8938, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, endif { 0, }
使用最新ALSA驱动解决UbuntuLinuxIntel集成声卡问题Solrex
使用最新ALSA驱动解决UbuntuLinuxIntel集成声卡问题Solrex使用最新 ALSA 驱动解决 Ubuntu Linux Intel 集成声卡问题目前用户所抱怨的Ubuntu 系列的声卡问题,基本上归结为几类:一,找不到声音设备;二,不发声;三,耳机和音箱同时发声;四、话筒没声。
大部分这种问题都是由笔记本上 Intel 集成声卡驱动引起的,关于这个问题的具体描述和解决方案,可以查看下面两个页面:BUG:SOLUTION:其实大部分问题都可以通过自己动手编译安装最新ALSA 驱动解决,解决方法上面两个链接中已经解释得很清楚了,我这里介绍一下我的思路:第一,查看ALSA 版本,如果最新,就不用重新安装了,仔细查看一下配置吧。
$ alsactl -v如果打印出: alsactl version 1.0.20,那么 ALSA 已经是最新了。
第二,在 ALSA 官方网站上,下载最新的 ALSA 驱动,怎么解压我就不说了吧。
$ wget ftp://ftp.alsa-/pub/driver/alsa-driver-1.0.20.tar.bz2$ wget ftp://ftp.alsa-/pub/lib/alsa-lib-1.0.20.tar.bz2$ wget ftp://ftp.alsa-/pub/utils/alsa-utils-1.0.20.tar.bz2第三,查看自己的内核版本和声卡解码芯片是否被支持。
查看支持的内核版本$ less alsa-driver-1.0.15/SUPPORTED_KERNELS查看自己声卡解码芯片(如果系统不能识别声卡,可能无法由下面两个查到,那么查看你电脑配置单吧)$ tail -2 /proc/asound/oss/sndstat或$ head -1/proc/asound/card0/codec#0比如我的 DELL D630 就显示的是下面这个Codec: SigmaTel STAC9205在alsa-driver-1.0.20/sound/Documentation/ALSA-Configuration.txt 中查找自己声卡解码芯片对应的model 名字,比如我的 STAC9205 对应的就是:STAC9205/9254ref Reference boarddell-m42 Dell (unknown)dell-m43 Dell Precisiondell-m44 Dell Inspiron如果存在对应的 model,恭喜你可以继续安装了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用alsa-utils调试ALSA驱动使用alsa-utils调试ALSA驱动分类:linuxdriver2011-06-24 14:19 2263人阅读评论(0) 收藏举报2011-06-24 17:35:58 android下面的alsa utils提供三个工具,分别是:alsa_amixer :配置alsa_aplay :播放录制alsa_ctl::store/restore 配置文件,与asound.conf有关可以通过alsa_XXX --help 查看详细参数++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++【alsa_amixer】/ $ alsa_amixer --help Usage: 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 allmixer 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 【使用方法】alsa_amixer controls :列出alsa驱动里面注册的所有控制接口。
这些controls是在驱动里面通过struct snd_kcontrol_newtwl4030_snd_controls[] 定义,函数static inttwl4030_add_controls(struct snd_soc_codec *codec)来添加的接口。
格式如下:numid=19,iface=MIXER,name='Analog CaptureV olume'alsa_amixer contents :列出以上接口的详细内容,格式如下:numid=19,iface=MIXER,name='Analog Capture V olume';type=INTEGER,access=rw---R--,values=2,min=0,max=5,step= 0: values=5,5| dBscale-min=0.00dB,step=6.00dB,mute=0以上,numid是在注册的时候顺序分配的,其他信息查看驱动里面的数据结构来了解。
我们可以通过两个命令来读取和设置相关参数:cset cID P set control contents for one controlcget cID get control contents for one control例如:alsa_amixer cget numid=19,iface=MIXER,name='Analog Capture V olume'alsa_amixer cset numid=19,iface=MIXER,name='Analog Capture V olume' 5其实,如果通过alsa_amixer controls获取到这些controls的numid后,可以直接使用numid来操作,结果一样:/ $ alsa_amixer cget numid=19numid=19,iface=MIXER,name='Analog Capture V olume';type=INTEGER,access=rw---R--,values=2,min=0,max=5,step= 0: values=5,5| dBscale-min=0.00dB,step=6.00dB,mute=0/ $ alsa_amixer cset numid=19 4###reg_0x48 ==TWL4030_REG_ANAMIC_GAIN : 0x24 numid=19,iface=MIXER,name='Analog Capture V olume';type=INTEGER,access=rw---R--,values=2,min=0,max=5,step= 0: values=4,4| dBscale-min=0.00dB,step=6.00dB,mute=0++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++【alsa_aplay】/ $ alsa_aplay --help Usage: 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 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_BEIEC958_SUBFRAME_LE IEC958_SUBFRAME_BEMU_LAW A_LAW IMA_ADPCM MPEG GSM SPECIALS24_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) 录音参数S8 U8 S16_LE S16_BE U16_LE U16_B 的详细解释:S是有符号U是无符号BE是大端LE是小端这都是PCM的一种表示范围的方法,所以表示方法中最小值等价,最大值等价,中间的数据级别就是对应的进度了,可以都映射到-1~1范围。