因为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
网友评论