因为Android中默认并没有使用标准alsa,而是使用的是tinyalsa。所以就算基于命令行的測试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,能够能这些个工具实时查看到,比方音频通道的切换等等。
1. 编译tinyalsa配套工具
$ mmm external/tinyalsa/
编译完后会产生tinyplay、tinymix、tinycap等工具。
tinymix: 查看配置混音器
tinyplay: 播放音频
tinycap: 录音
2. 查看当前系统的声卡
shell@X28_068_MIPI:/ # cat /proc/asound/cards
0 [RKRK312X ]: RK_RK312X - RK_RK312X
RK_RK312X
1 [RKsph0645lm4h ]: RK_sph0645lm4h - RK_sph0645lm4h
RK_sph0645lm4h
shell@X28_068_MIPI:/ # ls -l /dev/snd/
crw-rw---- system audio 116, 0 2015-01-22 10:22 controlC0
crw-rw---- system audio 116, 32 2015-01-22 10:22 controlC1
crw-rw---- system audio 116, 24 2015-01-22 10:22 pcmC0D0c
crw-rw---- system audio 116, 16 2015-01-22 10:22 pcmC0D0p
crw-rw---- system audio 116, 25 2015-01-22 10:22 pcmC0D1c
crw-rw---- system audio 116, 17 2015-01-22 10:22 pcmC0D1p
crw-rw---- system audio 116, 56 2015-01-22 10:22 pcmC1D0c
crw-rw---- system audio 116, 33 2015-01-22 10:22 timer
3. tinymix查看混响器
tinymix用法:
不加任何參数 --- 显示当前配置情况
tinymix [ctrl id] [var] --- 不加[var]能够查看该[ctrl id]可选选项。
root@android:/ # tinymix
Number of controls: 7
ctl type num name value
0 ENUM 1 Playback Path OFF
1 ENUM 1 Capture MIC Path MIC OFF
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
相应解释:
英文
中文
备注
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音乐
一般播放1khz 0db正弦波,然后在codec输出端示波器简单测量是否失真,杂音,然后再使用音频分析仪测试指标。
shell@X28_068_MIPI:/ # tinyplay
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
shell@X28_068_MIPI:/ # tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
Playing sample: 2 ch, 44100 hz, 32 bit
5. 通过tinycap录音
shell@X28_068_MIPI:/ # tinycap
Usage: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n_periods]
shell@X28_068_MIPI:/ # tinycap /sdcard/rec.wav -D 0 -d 0 –c 2 –r 44100 –b 16 –p 1024 –n 3
6. 其它