Android音频底层调试-基于tinyalsa「建议收藏」

Android音频底层调试-基于tinyalsa

大家好,又见面了,我是全栈君。

      因为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
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
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.8kHzwav音乐。

root@android:/ # tinyplay /sdcard/0_16.wav                                     
Playing sample: 2 ch, 44100 hz, 16 bit
root@android:/ # 

注:播放之前得首先使用tinymix把通道设置好,上文中已经给出了设置到扬声器中的样例;因为播放时使用的最大音量进行播放的,所以注意防止被吓到。这里将測试音频文件上传。

 

5.tinycap使用

root@android:/ # tinycap /sdcard/test.wav

能够进行录音。

 

眼下仅仅遇到这些,就先总结到这,能够随时再深入。

20141014更新:

1.原来tinyalsa最原始的源代码在这里tinyalsa_github

2.自己fork一份。加入静态编译方法以及busybox方式的将tinymix/tinyplay/tinycap/tinypcminfo集成一个tinyalsa

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

制作静态库參考:LinuxGcc生成和使用静态库和动态库具体解释

其他被证实为假的如果:

1.须要改写init.rc让系统不启动android相关的服务(mediaserver)

2.须要通过其他途径获取tinyalsa.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115520.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python3安装win32api

    python3安装win32apipython3安装win32api

    2022年10月11日
  • 时间格式时间戳转换

    时间格式时间戳转换

  • awstats mysql_Awstats 配置详解

    awstats mysql_Awstats 配置详解[root@testsrc]#wgethttp://prdownloads.sourceforge.net/awstats/awstats-6.95.tar.gz[root@testsrc]#tarzxvfawstats-6.95.tar.gz[root@testsrc]#mvawstats-6.95/usr/local/awstats[root@testsrc]#…

  • ajax的实现_JavaScript高级教程

    ajax的实现_JavaScript高级教程点击这里下载PDF文件。  点击这里下载示例文件。  点击这里下载视频文件。  相关内容:AJAX培训第二讲:使用AJAX框架(下)  首先向大家说声抱歉,离上次隔的时间实在太长。由于一度工作比较忙,所以录制就耽搁了。而且后来在录制过程中也麻烦不断,主要原因是我的笔记本比较差,而录制的内容一多,几乎就会处于“僵死”状态,然后Captivate非常容易崩溃,最后连录制内容都弄坏了。录制结束后怎么发布

  • Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]

    Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

  • wifi 频段表_史上最全无线通信频率分配表,转走收藏!

    wifi 频段表_史上最全无线通信频率分配表,转走收藏!5GNR3GPP已指定5GNR支持的频段列表(可查看TS381045.2章节),5GNR频谱范围可达100GHz,指定了两大频率范围:①Frequencyrange1(FR1):就是我们通常讲的6GHz以下频段•频率范围:450MHz-6.0GHz•最大信道带宽100MHz②Frequencyrange2(FR2):就是毫米波频段•频率范围:24.25GHz-52.6…

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号