由于Android中默认并没有使用标准alsa,而是使用的是tinyalsa,所以就算基于命令行的测试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,可以能这些个工具实时查看到,比如音频通道的切换等等.
1.编译tinyalsa配套工具
$ mmm external/tinyalsa/
编译完后会产生tinyplay/tinymix/tinycap等等工具。
tinymix: 查看配置混音器
tinyplay: 播放音频
tinycap: 录音
2.查看当前系统的声卡
root@android:/# cat /proc/asound/cards
0[RKRK616 ]: RK_RK616 - RK_RK616
RK_RK616
1[ROCKCHIPSPDIF ]: ROCKCHIP-SPDIF - ROCKCHIP-SPDIF
ROCKCHIP-SPDIF
root@android:/ #
3.tinymix查看混响器
tinymix使用方法a.不加任何参数-显示当前配置情况b.tinymix [ctrl id] [var]不加[var]可以查看该[ctrl id]可选选项。
root@android:/# tinymix
Number of controls: 7
ctl type num name value
0ENUM1Playback Path OFF
1ENUM1Capture MIC Path MIC OFF
2ENUM1Voice Call Path OFF
3ENUM1Voip Path OFF
4INT2Speaker Playback Volume00
5INT2Headphone Playback Volume00
6ENUM1Modem Input Enable ON
root@android:/ #
对应解释:
英文
中文
备注
Playback Path
音频输出通道
Capture MIC Path
音频输入通道
Voice Call Pah
通话音频通道
设备没有通话模块,暂无法测试
Voip Pah
IP电话音频通道
场景Gtalk;值有:SPK/HP_NO_MIC/BT
Speaker Playback Volume
扬声器音量
和上层音量值无关
Headphone Playback Volume
耳机音量
同上
Modem Input Enable
暂不知何用
经测试不能控制音频输入输出
Playback Path有:
英文
中文
备注
OFF
关闭
RCV
-
SPK
扬声器
常用
HP
耳机带麦
HP_NO_MIC
耳机无麦
常用
BT
蓝牙
SPK_HP
-
RING_SPK
-
RING_HP
-
RING_HP_NO_MIC
-
RING_SPK_HP
-
例:将输出切换到扬声器
root@android:/ # tinymix 0 SPK
关于tinymix小结:
通过观察发现,Android系统的声音音量的调节并没有直接使用tinyalsa,而基于上层软件实现,因为无论上层音量怎么改变,这里看到的都是24(以我采用的设备为例)。通道的切换是真正使用了tinyalsa,当通过不同通道播放音乐的时候可以实时观察到通道的切换。在某个网站上看到Android在没有声音播放的3秒后会关于alsa,这里也得到了证实,我以前认为Android系统会永久占用音频设备。
当通过蓝牙播放音乐的时候,已经不经过alsa了。tinymix查看得都处理关闭状态,因为Android4.2的蓝牙协议全部在用户层实现了,直接走uart通道。这样的设计方式一时半会不能理解。
4.使用tinyplay播放wav音乐
这个只是一个最基本的播放器,所以不支持播放MP3等等压缩过格式的音乐。没有学会使用前,网上都说很麻烦,但是现在看来一点也不麻烦,直接播放了44.1kHz/44.8kHz的wav音乐。
root@android:/# tinyplay /sdcard/0_16.wav
Playing sample: 2ch,44100hz,16bit
root@android:/ #
注:播放之前得首先使用tinymix把通道设置好,上文中已经给出了设置到扬声器中的例子;由于播放时使用的最大音量进行播放的,所以注意防止被吓到。这里将测试音频文件上传。
5.tinycap使用
root@android:/ # tinycap /sdcard/test.wav
可以进行录音。
目前只遇到这些,就先总结到这,可以随时再深入。
20141014更新:
1.原来tinyalsa最原始的源码在这里tinyalsa_github。
2.自己fork一份,添加静态编译方法以及busybox方式的将tinymix/tinyplay/tinycap/tinypcminfo集成一个tinyalsa。
编译方法:make tinyalsa TOOLBOX_STYLE=TRUE CROSS_COMPILE=arm-linux-gnueabihf-
tinyalsa-utils 包含了tinymix/tinyplay/tinycap/tinypcminfo使用方法是tinyalsa +工具名。比如要运行tinymix,那么就执行tinyalsa mix或者tinyalsa tinymix
root@android:/ # tinyalsa mix
Mixer name: 'RK_RK616'
Number of controls: 7
ctl type num name value
0 ENUM 1 Playback Path OFF
1 ENUM 1 Capture MIC Path Main Mic
2 ENUM 1 Voice Call Path OFF
3 ENUM 1 Voip Path OFF
4 INT 2 Speaker Playback Volume 0 0
5 INT 2 Headphone Playback Volume 0 0
6 ENUM 1 Modem Input Enable ON
root@android:/ #
3.根据这个[PATCH] tinyalsa: new package信息显示,以后tinyalsa也会被集成进busybox中。
4.如果出现Failed to open mixer错误,代表你的Android设备不是alsa音频驱动,而是legacy OSS device。
其它被证实为假的假设:
1.需要改写init.rc让系统不启动android相关的服务(mediaserver)
2.需要通过其它途径获取tinyalsa.