Linux ALSA声卡驱动
- 格式:pdf
- 大小:1.32 MB
- 文档页数:66
Linux下ALSA声卡编程一 . 介绍ALSA 标准是一个先进的 linux 声音体系。
它包含内核驱动集合, API 库和工具对 Linux 声音进行支持。
ALSA 包含一系列内核驱动对不同的声卡进行支持,还提供了 libasound 的 API 库。
用这些进行写程序不需要打开设备等操作,所以编程人员在写程序的时候不会被底层的东西困扰。
与此相反 OSS/Free 驱动在内核层次调用,需要指定设备名和调用 ioctl 。
为提供向后兼容, ALSA 提供内核模块模仿 OSS/Free 驱动,所以大多数的程序不需要改动。
ALSA 拥有调用插件的能力对新设备提供扩展,包括那些用软件模拟出来的虚拟设备。
ALSA 还提供一组命令行工具包括 mixer, sound file player 和工具控制一些特别的声卡的特别的作用。
二 .ALSA 体系:ALSA API 被主要分为以下几种接口:●控制接口:提供灵活的方式管理注册的声卡和对存在的声卡进行查询。
●PCM 接口:提供管理数字音频的捕捉和回放。
●原始 MIDI 接口 : 支持 MIDI (Musical Instrument Digital Interface),一种标准电子音乐指令集。
这些 API 提供访问声卡上的 MIDI 总线。
这些原始借口直接工作在 The MIDI 事件上,程序员只需要管理协议和时间。
●记时接口 : 为支持声音的同步事件提供访问声卡上的定时器。
●音序器接口:一个比原始 MIDI 接口高级的 MIDI 编程和声音同步高层接口。
它可以处理很多的 MIDI 协议和定时器。
●混音器接口:控制发送信号和控制声音大小的声卡上的设备。
三 . 声卡的缓存和数据的传输:一块声卡有一个声卡内存用来存储记录的样本。
当它被写满时就产生中断。
内核驱动就使用 DMA 将数据传输到内存中。
同样地,当在播放时就将内存中的声音样本使用 DMA 传到声卡的内存中!声卡的缓存是环状的,这里只讨论应用程序中的内存结构: ALSA 将数据分成连续的片段然后传到按单元片段传输。
DAPM是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 {1snd_kcontrol_tlv_rw_t *c;const 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-uda134x驱动分析之九(POP声)/thread-1748-1-1.htmlAudio Pops and Clicks音频pop声=====================Pops and clicks are unwanted audio artifacts caused by the powering up and down of components within the audio subsystem. This is noticeable on PCs when an audio module is either loaded or unloaded (at module load time the sound card ispowered up and causes a popping noise on the speakers).咔咔声是因为音频子系统中的元件的电源开启和关闭产生的意处杂音。
在PC中,当一个音频设备被加载和御载时是很明显的(加载时声卡上电,扬声器产生躁声)。
Pops and clicks can be more frequent on portable systems with DAPM. This is because the components within the subsystem are being dynamically powered depending on the audio usage and this can subsequently cause a small pop or click every time a component power state is changed.Minimising Playback Pops and Clicks===================================Playback pops in portable audio subsystems cannot be completely eliminated currently, however future audio codec hardware will have better pop and click suppression. Pops can be reduced within playback by powering the audio components in a specific order. This order is different for startup and shutdown and follows some basic rules:-Startup Order :- DAC --> Mixers --> Output PGA --> Digital UnmuteShutdown Order :- Digital Mute --> Output PGA --> Mixers --> DACThis assumes that the codec PCM output path from the DAC is via a mixer and then a PGA (programmable gain amplifier) before being output to the speakers.Minimising Capture Pops and Clicks==================================Capture artifacts are somewhat easier to get rid as we can delay activating the ADC until all the pops have occurred. This follows similar power rules to playback in that components are powered in a sequence depending upon stream startup or shutdown.Startup Order - Input PGA --> Mixers --> ADCShutdown Order - ADC --> Mixers --> Input PGAZipper Noise============An unwanted zipper noise can occur within the audio playback or capture stream when a volume control is changed near its maximum gain value. The zipper noise is heard when the gain increase or decrease changes the mean audio signal amplitude too quickly. It can be minimised by enabling the zero cross setting for each volume control. The ZC forces the gain change to occur when the signal crosses the zero amplitude line.。
linux音频alsa-uda134x驱动分析之四(数字音频接口)/thread-1743-1-1.htmlASoC currently supports the three main Digital Audio Interfaces (DAI) found on SoC controllers and portable audio CODECs today, namely AC97, I2S and PCM. ASoC现在支持如今的SoC控制器和便携音频解码器上的三个主要数字音频接口,即AC97,I2S,PCM。
AC97AC97====AC97 is a five wire interface commonly found on many PC sound cards. It is now also popular in many portable devices. This DAI has a reset line and time multiplexes its data on its SDATA_OUT (playback) and SDATA_IN (capture) lines. The bit clock (BCLK) is always driven by the CODEC (usually 12.288MHz) and the frame (FRAME) (usually 48kHz) is always driven by the controller. Each AC97 frame is 21uS long and is divided into 13 time slots.AC97是一种个人电脑声卡上常见的五线接口。
现在在很多便携设备中也很流行。
这个数字音频接口有一个复位线,分时在SDATA_OUT(回放)和SDATA_IN(捕获)线上传送数据。
位时钟常由解码器驱动(通常是12.288MHz).帧时钟(通常48kHz)总是由控制器驱动。
使用最新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,恭喜你可以继续安装了。
DAPM是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 {1snd_kcontrol_tlv_rw_t *c;const 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音频驱动构架及音频设备简单测试方法.其实要说在Linux系统下播放音乐,确实是一件让人非常抓狂的事情,抛开各种音频格式的商业授权不说,即使提供给你相应的解码库,能玩儿得转的人那又是少之又少。
可能有些盆友说ubuntu这方面确实做得不错,一旦默认安装好,几乎不用装任何其他东西,常见的是音频文件都可以正常播放了。
因为我天生就有股喜欢折腾的劲儿,所以关于ubuntu确实不怎么感冒,只能说萝卜白菜各有所爱吧。
今天我们以wav文件(也就是上一篇博文所提到的PCM格式的音频文件)为例,看看在Linux下怎么播放它,顺便会简单介绍一下Linux系统的音频驱动框架的基础知识。
说到Linux系统下的音频系统驱动框架,最常见的有OSS和ALSA。
我们先来简单了解一下这两个框架,以及它们的历史渊源。
OSS全称是Open Sound System,叫做开放式音频系统,最早是Unix系统上一种统一的音频接口。
这种基于文件系统的统一访问方式,就意味着对声音的操作完全可以像对普通文件那样执行open,read,write和close等操作,这也正是得益于文件系统的强大有力支撑。
OSS中,主要提供了一下几种音频设备的抽象设备文件:/dev/mixer:用来访问声卡中内置的混音器mixer,用于调整音量大小和选择音源;/dev/dsp、/dev/audio:读这个设备就相当于录音,写这个设备就相当于放音。
/dev/dsp与/dev/audio的主要区别在于所采样的PCM编码方式的不同,/dev/audio使用的是μ律编码(存在这个设备文件的目的主要是为了与SunOS兼容,所以在非SunOS系统中尽量不要使用),而/dev/dsp使用8-bit(无符号)的线性编码;/dev/sequencer、/dev/sequencer2:主要用于访问声卡内置的,或者连接在MIDI接口的合成器synthesizer。
还有其他的诸如/dev/adsp、/dev/dmmidi、/dev/midi等等,一些不常用的就先不管了。
linux 下 ALSA-arecord 使用一.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 receiver aconnect -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 -i client 0: ’System’ [type=kernel] 0 ’Timer 1 ’Announce ’ ’client 64: ’External MIDI-0’ [type=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.-hHelp 显示帮助信息.-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 U16_BE S16_LE S16_BE U16_LES24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LEFLOAT_LE FLOAT_BEIEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM-r, --rate=#<Hz> 设置频率.-d, --duration=# 设置持续时间,单位为秒.-s, --sleep-min=# 设置最小休眠时间.-M, --mmap mmap 流.-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% aseqnet sequencer opened: 128:0在 HostB 上执行:hostB% aseqnet hostA sequencer 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, bit, 6 = 20-16 bit. 2 = 22-18 bit, 4 = 23-19 bit, 5 = 24-20category <int> 分类:值从 0 到 0x7f.copyright <bool> 设置是否包含版权.original <boo> 原始标记:示例:输出当前 IEC958 信息. $ iecset Mode: consumer Data: audio Rate: 44100 Hz Copyright: permitted Emphasis: none Category: general Original: 1st generation Clock: 1000 ppm显示当前第 1 块声卡的 IEC958 状态位. $ iecset -Dhw:0 Mode: consumer Data: non-audio Rate: 44100 Hz Copyright: permitted Emphasis: noneCategory: general Original: 1st generation Clock: 1000 ppm设置当前为用户模式,并打开"非音频"位. $ iecset pro off audio off Mode: consumer Data: non-audio Rate: 44100 Hz Copyright: permitted Emphasis: none Category: general Original: 1st generation Clock: 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。
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了
第一次操作很麻烦,但习惯了会觉得那是一种乐趣的,至少我自己是这么觉得的。
注:如果是初次操作,需要修改到系统本身的一些东西的话,建议最好先备份,错了改过来就比较容易点,备份,其实就是复制一份同样的东西到另一个安全的地方。
Linux系统下安装声卡驱动的方法装了几次Linux OS,当然也装了几次声卡驱动,一般来说都是安装ALSA(Adcance Linux Sound Architecture)驱动,多装几次以后就会发现非常的简单的。
首先,先决条件,也就是依赖关系,我记得需要安装kernal-source(我用过的几个Linux OS都默认不安装这个,在你的OS 的软件包管理程序那里可以搜索这个关键词,选上进行安装,记得要插入系统光盘。
),gcc我不记得要不要装,好像没有其他的了。
要安装驱动,你得先去下载alsa驱动,个人认为为了保证最大的兼容性,最好去下载最新版本。
一般来说,只需要下载安装以下三个包就可以了,driverlibutils当然最好是要同一个版本的,我上传了一个所有需要的包,1.0.16 版的,有需要的用户请到这里来下载URL : /shared/0t5z8nao8c 不知道是否长久有效!为了保证能完全安装成功,建议切换到root用户下执行安装。
我是在X Window 下执行的安装,解压上述下载有的压缩包是用鼠标右键单击解压的,我想能熟练用shell命令来解压文档的LinuxUser是不需要来我这里看声卡驱动的安装的先安装下载回来的driver那个包,解压,然后在终端中转到解压后的那个文件夹,按照顺序执行以下命令。
1 ./configure2 make3 make install4 ./snddevices一般来说都能顺利执行完上述命令的,如果不能的话,请查看返回的信息,这里需要特别说明一下,这几个过程都比较耗时,无论你的硬件配置如何,这个我没有办法解释原因,经验之谈。
安装到了这里,就需要配置系统文件了,怎么配置,手动的我也不知道,但是我知道有一个工具可以帮我们高效且几乎不出错的完成这个任务,那就是alsaconf工具了,这个工具在utils文件包里面。
解压下载回来的utils文件包,同样需要在终端中执行命令,在终端中转到解压后的目录,然后执行如下命令。
您还未登录!|登录|注册|帮助首页业界移动云计算研发论坛博客下载欢迎各位大虾交流,本人联系方式:droid.phx@gmail.com目录视图摘要视图订阅分类: Linux音频子系统目录(?)[-]1.一 概述2.二 ALSA设备文件结构3.三 驱动的代码文件结构4.投票赢好礼,周周有惊喜! 2014年4月微软MVP申请开始了! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 办公大师系列经典丛书 诚聘译者 LinuxALSA声卡驱动之一:ALSA架构简介2011-03-23 15:19 24106人阅读 评论(11) 收藏 举报linuxaudiocodectimerplayback嵌入式声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢!一. 概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。 图 1.1 alsa的软件体系结构由图1.1可以看出,用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化原创:46篇转载:0篇译文:4篇评论:356条展开(38982)(25553)(25317)(24001)(18421)个人资料DroidPhone 访问:382342次积分:3434分排名:第2116名文章搜索文章分类移动开发之Android(11)Linux内核架构(15)Linux设备驱动(16)Linux电源管理(3)Linux音频子系统(15)Linux中断子系统(5)Linux时间管理系统(8)Linux输入子系统(4)文章存档2013年11月(4)2013年10月(3)2013年07月(3)2012年12月(4)2012年10月(4)阅读排行Android Audio System 之Android Audio System 之Android Audio System 之Linux ALSA声卡驱动之一Linux ALSA声卡驱动之二Android SurfaceFlinger中更多了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能。本系列博文仅对嵌入式系统中的alsa-driver和alsa-soc进行讨论。
二. ALSA设备文件结构
我们从alsa在linux中的设备文件结构开始我们的alsa之旅. 看看我的电脑中的alsa驱动的设备文件结构:$ cd /dev/snd$ ls -l
crw-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, 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中的命名规则。从上面的列表可以看出,我的声卡下挂了6个设备,根据声卡的实际能力,驱动实际上可以挂上更多种类的设备,在include/sound/core.h中,定义了以下设备类型:
[c-sharp] #define SNDRV_DEV_TOPLEVEL ((__force snd_device_type_t) 0) 01.#define SNDRV_DEV_CONTROL ((__force snd_device_type_t) 1) 02.#define SNDRV_DEV_LOWLEVEL_PRE ((__force snd_device_type_t) 2) 03.#define SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000) 04.#define SNDRV_DEV_PCM ((__force snd_device_type_t) 0x1001) 05.#define SNDRV_DEV_RAWMIDI ((__force snd_device_type_t) 0x1002) 06.#define SNDRV_DEV_TIMER ((__force snd_device_type_t) 0x1003) 07.#define SNDRV_DEV_SEQUENCER ((__force snd_device_type_t) 0x1004) 08.#define SNDRV_DEV_HWDEP ((__force snd_device_type_t) 0x1005) 09.#define SNDRV_DEV_INFO ((__force snd_device_type_t) 0x1006) 10.#define SNDRV_DEV_BUS ((__force snd_device_type_t) 0x1007) 11.#define SNDRV_DEV_CODEC ((__force snd_device_type_t) 0x1008) 12.#define SNDRV_DEV_JACK ((__force snd_device_type_t) 0x1009) 13.#define SNDRV_DEV_LOWLEVEL ((__force snd_device_type_t) 0x2000) 14.
通常,我们更关心的是pcm和control这两种设备。
三. 驱动的代码文件结构 在Linux2.6代码树中,Alsa的代码文件结构如下: sound /core /oss /seq /ioctl32 /include /drivers
(18248)(17112)(13786)(13061)(12550)
(49)(30)(21)(18)(16)(16)(15)(13)(12)(11)Linux ALSA声卡驱动之三Android中的sp和wp指针Linux ALSA声卡驱动之七Android SurfaceFlinger中评论排行Android Audio System 之Linux ALSA声卡驱动之八Android SurfaceFlinger中Linux ALSA声卡驱动之二Linux ALSA声卡驱动之三Android Audio System 之Linux中断(interrupt)子Android中的sp和wp指针Linux中断(interrupt)子Android SurfaceFlinger中
推荐文章* SharePoint 2010/2013 使用Javascript来判断权限的三种方法
* 坚持前进的方向:总结2013,规划2014
* 创业者那些鲜为人知的事情* ListView具有多种item布局——实现微信对话列
* 实现自己的类加载时,重写方法loadClass与findClass的区别
* GDAL影像投影转换
最新评论Linux输入子系统:多点触控协议gocy123: 很有用,多谢分享
ALSA声卡驱动中的DAPM详解之wsc_168: 楼主,您好: 现在正在移植wm8962的驱动,遇到了一些问题,请教一下您。串口信息显示已经扫描...
Linux ALSA声卡驱动之五:移动设slcsss: @DroidPhone:感谢您的回复,我是新手,想问下这个配置的具体位置在哪里?
Linux ALSA声卡驱动之五:移动设DroidPhone: @u013222557:这种情况通常是你的codec中的音频路径把Mic至HP的路径被打开了,请仔细...
Linux ALSA声卡驱动之五:移动设slcsss: 您好: 我是一名在读研究生,最近在ALSA架构下搞嵌入式音频程序开发,遇到了一个棘手的问...
ALSA声卡驱动中的DAPM详解之DroidPhone: @u012389631:和电源管理和音频路径相关的control需要定义为dapmcontrol(...
ALSA声卡驱动中的DAPM详解之elliepfsang: 大侠,你好! 这两天把您的文章1-7 看了一遍,关于control这个概念在您的文章中有提到过多次...
ALSA声卡驱动中的DAPM详解之elliepfsang: @DroidPhone:因为这个是wm8962的machine上的现有代码,但如果我要porting...