linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一

原创 2017年03月20日 14:51:21

目前linux中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。说的这么好,但是Android中没有使用标准的ALSA,而是一个ALSA的简化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音频通路,我们也可以使用tinyalsa提供的工具进行查看、调试。

编译tinyalsa后生成四个小工具:

tinymix
tinyplay
tinycap
tinypcminfo

编译命令:

mmm external/tinyalsa/


下面依次演示一下四个小工具的使用:(以下使用联芯科技的LC1860平台配合LC1160电源+音频芯片,截图及演示效果均来自M7301P5测试机)

1,  tinypcminfo

tinypcminfo用于查看pcm通道的相关信息

输入:

tinypcminfo -D /proc/asound/cards

结果如下:


从上面获得的信息中可以知道PCM的采样率,通道个数,采样点数等信息。

其中 –D 后边跟的参数为声卡文件,一般位于/proc/asound/cards。可以使用

cat /proc/asound/cards
查看当前声卡

2,  tinymix

如下图所示,直接输入tinymix可以得到音频通路相关的各项配置参数。也可以通过添加参数修改其中的配置,如希望提高ADC1 Gain值到110,输入tinymix 12 110即可。


单独查看上述信息比较难以梳理,配合音频通路图会更加清晰。


上图中红色字体标明了LC1160与麦克风、耳机等硬件设备的连接关系。(注:M73xx项目由于内部ClassD不满足要求,喇叭连在了AUX通路上)

各个通路上的增益调节部分使用绿色字体标出了与tinymix中选项的对应关系。

图中加号与Mux是通路选择开关,对应tinymix中的其它的选项,用于在各种模式下切换音频通道。此部分比较多没有在图中一一标出,但根据已知的通路名是比较容易对应的。

图中黄色箭头标出的是通话时下行音频数据流,从PCM接口进入到LC1160,然后经过MonoDAC进行数模转化后送到听筒。

图中紫色箭头标出的是通话时上行音频数据流,从主MIC采集声音后,经过ADC1进行模数转换后由PMC的DO线送出

3,  tinyplay

tinyplay是一个简易的音乐播放器,一般用于播放测试。tinyplay只能播放wav原始格式的音乐,不能进行Mp3等格式的解码,支持44.1kHz,48kHz采样率的wav音乐。

在调用tinyplay播放音乐之前需要先使用tinymix切换好音频通路:

tinymix 0 I2SR		//选择Stereo DACR的音源为i2s
tinymix 1 I2SL		//选择Stereo DACL的音源为i2s
tinymix 2 0 0		//将Stereo DAC左右声道的mute关闭
tinymix 24 1		//开启喇叭的外部PA芯片
tinymix 40 1		//将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
tinymix 41 1		//将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
tinyplay z.wav

4,  tinycap

tinycap是一个简易的录音软件,一般用于录音测试。

在调用tinycap录音之前需要先调整好音频通路:

tinymix 14 30			//mic1 volume
tinymix 19 1			//mic1 boost on
tinymix 26 1			//adc1 -> mic1
tinymix 50 ADC1			//i2sR out -> adc1
tinymix 51 ADC1		//i2sL out -> adc2
echo "0xfb 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg		//bias poweron
echo "0xad 0x08" >  /sys/devices/platform/comip_codec/lc1160_reg	//adc1 enable
echo "0xac 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg		//mic1 pga enable
echo "0x3b 0xcc" >  /sys/devices/platform/comip_codec/lc1160_reg		//ldo
echo 2 > /sys/bus/i2c/drivers/fm2018/0-0060/mode		//bypass 外部的回声消除音频芯片(M730x项目特有)

tinycap /sdcard/Music/l.wav

录音结束通过ctrl+C强行退出即可,之后在/sdcard/Music/路径下查看到l.wav音频文件

使用adb pull到本地电脑中,使用goldwave播放、查看。

adb pull /sdcard/Music/l.wav d:\



另外

LC1160的寄存器是分页的,即同一个地址上存在两个不同含义的寄存器,通过控制0xFC寄存器中的值来切换到第二功能页

echo "0xfc 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg 
cat /sys/devices/platform/comip_codec/lc1160_reg
echo "0xfc 0x00" >  /sys/devices/platform/comip_codec/lc1160_reg


版权声明:本文为博主原创文章,未经博主允许不得转载。如本文对您有帮助,欢迎点赞评论。

Android音频底层调试-基于tinyalsa

由于Android中默认并没有使用标准alsa,而是使用的是tinyalsa,所以就算基于命令行的测试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,可以能这些个工具...
  • kangear
  • kangear
  • 2014年07月26日 09:10
  • 51687

MT6737 Android N 平台 Audio系统学习----TinyAlsa

TinyAlsa(精简版alsa)是 Android 默认的 alsalib, 封装了内核 ALSA 的接口,用于简化用户空 间的 ALSA 编程。 tinyalsa位于Android源码的exte...

tinymix的命令格式

最近在调试安卓系统的alsa驱动,一开始搞不清楚tinymix要怎么用,今天终于搞清楚了,其实也很简单: 先打tinymix,首先系统要有安装好,如果没有的话,需要编译android/external...

audio tinymix 使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+]       由于Android中默认并没有使用标准alsa,而是使用的是tinyalsa,所...

4.0音频系统HAL初探 tinymix

一、代码模块位置 1、AudioFlinger frameworks/base/services/audioflinger/ +-- Android.mk +-- Au...

linux alsa 音频路径切换

linux alsa 音频路径切换

tinymix相关

tiny相关的工具(play,cap,mix)是调试Android audio的path使用的,这里涉及到DAPM的相关知识,百度有两位已经讲的很好的,这里不赘述。 这里用增加额外PA(功放)作为例子...

Android下音频tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)

audio代码比较复杂,除了音频参数,我们平时客制化的地方不多。所以没有太深入了解。 建议先抽空看看如下代码: kernel, Linux alsa 架构: kernel-3.10/sound...

使用tinymix进行Acostic测试

Audio chip使用的是WCD9335,使用tinymix进行Acostic测试。 下面列出部分命令组合, 关于如何切换codec path,可以参考自己codec的xml档案,android/d...
  • jgw2008
  • jgw2008
  • 2016年09月21日 20:27
  • 699

Android常用的几个命令

1. Android支持的linux command不多,在/system/bin下面可以找到,其中大部分都是Android的工具,只有一小部分是linux原有的命令 2. 一些常用的Andro...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一
举报原因:
原因补充:

(最多只允许输入30个字)