由于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.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐