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.

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

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

(0)
上一篇 2022年2月3日 上午11:00
下一篇 2022年2月3日 上午11:00


相关推荐

  • 从excel文件xlsx中特定单元格中提取图片「建议收藏」

    从excel文件xlsx中特定单元格中提取图片「建议收藏」第一种网上通用的用xlsx改zip压缩包,能批量提取出图片。但是无法知道图片在单元格中的顺序信息。另一种方法,通过`fromopenpyxl_image_loaderimportSheetImageLoader`功能已实现好,在github仓库开源,觉得好用请star该库可以实现excel文件转mysql、sqlite等(基于SQLAlchemy)链接传送门pipinstall-rrequrements.txtx=xlsx_pic(‘./test.xlsx’)#

    2022年7月13日
    16
  • Claude Opus 4.6 薅羊毛:量大管饱!Kiro 教程

    Claude Opus 4.6 薅羊毛:量大管饱!Kiro 教程

    2026年3月15日
    6
  • RT-thread finsh移植到linux平台

    RT-thread finsh移植到linux平台目录FinSH介绍传统命令行模式C语言解释器模式FinSH移植移植要点效果验证代码下载参考在一次项目中,需要进行嵌入式操作系统选型,需求就是选择一款OS,既能满足当下项目的需要,又要考虑公司未来对物联网应用的扩展能力,对比了目前市面上流行的开源操作系统,诸如FreeRTOS,RTX,UCOS,RT-Thread,contiki等,最终确定了一款Io…

    2022年5月21日
    35
  • 通过nginx转发WebSocket

    通过nginx转发WebSocket通过nginx请求wensocket的时候需要修改配置文件,对于websocket请求需要特殊处理一下,需要在conf配置文件中添加一些配置:server{listen8080;server_nametest.com;add_header’Access-Control-Allow-Origin”*’always;add_header’Access-Control-Allow-Credentials”true’;add_header’A

    2022年10月18日
    5
  • c#爬取Silverlight网页[通俗易懂]

    c#爬取Silverlight网页[通俗易懂]前言:爬取普通的文本网页非常容易,但爬取Silverlight的网页代码时,有时候可能会加密。这样就会很麻烦了。下面就爬取网站http://zx.bjmemc.com.cn/(北京空气质量网)进行说明。任务:网站http://zx.bjmemc.com.cn/显示的内容如下图所示。我们的任务就是将空气质量数据抓取下来。工具:1、fiddler,http://www.

    2022年10月19日
    4
  • iFinD金融MCP正式上线,给OpenClaw们配上专业的金融数据

    iFinD金融MCP正式上线,给OpenClaw们配上专业的金融数据

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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