Android开发Android技术知识Android开发

Android音频底层调试-基于tinyalsa

2019-07-05  本文已影响16人  爱因私谈

因为Android中默认并没有使用标准alsa,而是使用的是tinyalsa。所以就算基于命令行的測试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,能够能这些个工具实时查看到,比方音频通道的切换等等。

1. 编译tinyalsa配套工具

$ mmm external/tinyalsa/

编译完后会产生tinyplay、tinymix、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用法:

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. 其它

tinyalsa源码
原文:https://www.cnblogs.com/yxwkf/p/5344068.html

上一篇下一篇

猜你喜欢

热点阅读