@allen 发表于 2017-4-28 19:12:28

Linux 系统音频驱动控制

本帖最后由 @allen 于 2017-5-27 14:33 编辑

1.ALSA 简介

ALSA 是 Advanced Linux Sound Architecture 的缩写,目前已经成为了 linux 的主流音频体系结构。在内核设备驱动层,ALSA 提供了 alsa-driver,同时在应用层,ALSA 为我们提供了 alsa-lib,应用程序只要调用 alsa-lib 提供的 API,即可以完成对底层音频硬件的控制。


程序需要切换声卡,控制音量,左右声道增益,静音等等.如果对音频驱动不熟悉,可以在User 空间通过 alsa-lib来对底层驱动进行参数设置.当然如果音频驱动不标准,对接ALSA没对接好,则就很难进行控制.

User 空间控制方法3 种

1). alsamixer
安装:sudo apt-get install alsa-utils

一般都已经安装好了运行:sudo alsamixer
已Cubieboard6 为例,alsamixer界面如图,比较容易操作
显示是Playback 部分的控件,要看录音部分按"F4"切换



通过左右方向键选择选项,上下键来调节值,字母"M"来开关选项,ESC保存并退出
重点关注DAC FL GAIN ,DAC FR GAIN ,DAC PA,分别是左声道增益,右声道增益,总音量
一般左右声道增益,调整一个固定值,最大音量不出现失真即可
所以一般调节DAC PA总音量

使用命令来测试输出音频效果speaker-test -twav -c2
2) amixer

获取所有的控件:amixer contols


获取DAC PA的值amixer cget numid=14

可以看到实际DAC PA的值区域在0~40,所以当用alsamixer调到100 时,其实调到最大值40


设置DAC PA的值amixer cset numid=14 values=20





3)音频ALSA编程

在应用中,添加标准API来获取控件,设置控件,从而控制音频.
具体使用方法可网上搜 音频ALSA编程
编程方法会较上面两个方法繁琐,但它可以嵌入进自己的应用程序中,结合实际应用场景,调用操作更加灵活.

http://www.cnblogs.com/cslunatic/p/3677729.html

http://blog.csdn.net/cjyusha/article/details/50495730




@allen 发表于 2017-4-28 19:14:15

本帖最后由 @allen 于 2017-5-22 16:53 编辑

cd /sys/bus/i2c/devices/0-0065/ echo 0xa3 > reg_dbg可以得到PMU中DAC_VOLUMECTL0寄存器的值,该寄存器是DAC FL和FR gain 的值,具体请查看PMU的数据手册。 cat /sys/kernel/debug/asoc/atm7059_link/atc260x-audio/codec_reg则会打印出,PMU里面音频的寄存器值


梨未开 发表于 2017-5-18 20:46:20

你好,我下载了alsa的lib和utils,但是aplay可以用,arecord却不能用,为什么?
aplay -a 可以显示相应设备,但是arecord下面什么都没有,而且所有关于录音的命令都无法执行,求指教!!!

@allen 发表于 2017-5-22 17:55:51

梨未开 发表于 2017-5-18 20:46 static/image/common/back.gif
你好,我下载了alsa的lib和utils,但是aplay可以用,arecord却不能用,为什么?
aplay -a 可以显示相应设备 ...

你是用什么主控? amixer contols 没有ADC的设备吗?
页: [1]
查看完整版本: Linux 系统音频驱动控制