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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux内核驱动编写

    Linux内核驱动编写#前言开发过单片机的小伙伴可以看下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。#正文用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的功能相似并且可将内核的信息向用户空间传递的函数。下表为几种设备驱动事件和它们在内核和用户空间对应的接口函数。事件(Events)用户函数(Userfunction…

    2022年7月14日
    12
  • springboot框架简介优点_springboot框架的优点

    springboot框架简介优点_springboot框架的优点1.1.什么是SpringBootSpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework同属于spring的产品:我们可以看到下面的一段介绍:Takesanopinionatedviewofbuildingproduction-readySpringapplications.SpringBootfavorsconventionoverconfigurationandisdesignedtogetyouupa

    2022年8月20日
    3
  • 关于gsync 和 freesync[通俗易懂]

    关于gsync 和 freesync[通俗易懂]最近我的很多朋友都在问我怎么开启gsync以及gsync的作用还有些小伙伴的台式机有freesync我就随便说下要是有不对的希望各位大佬指正首先我们先了解下垂直同步:1、什么是垂直同步?普通情况下显卡是逐行扫描到显示器,这就导致前面一帧还没扫完下一帧就上去了,因此会产生撕裂,垂直同步则是让显卡去适应显示器,即显示器每次刷新的时候显卡再把算好的图像传给显示器。…

    2022年5月1日
    404
  • 微型计算机的性能主要取决于什么,微型计算机的性能主要取决于什么?

    微型计算机的性能主要取决于什么,微型计算机的性能主要取决于什么?“微型计算机的性能主要取决于什么?”主要看三大件,CPU,主板,内存。1、CPU:其功能主要是解释计算机指令以及处理计算机软件中的数据,他的速度快慢可以代表计算机处理数据的能力的高低。2、内存:它是与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。3、主板:主板在整个微机系统中扮演着举足轻重的角色。主板的类型和档次决定着整个微机系统的类型,主板的…

    2022年6月28日
    44
  • php一句话木马中的@有什么用

    php一句话木马中的@有什么用<?php@eval($_POST[‘attack’])?>@表示后面即使执行错误,也不报错eval()函数表示括号内的语句字符串什么的全都当做代码执行$_POST[‘attack’]表示从页面中获得attack这个参数值只要攻击者满足这三条添加,就能实现入侵:(1)木马上传成功,未被杀;(2)知道木马的路径在哪;(3)上传的木马能正常运行。…

    2022年5月11日
    35
  • JavaScript定时器与清除定时器

    JavaScript定时器与清除定时器定时器 清除定时器

    2025年7月20日
    0

发表回复

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

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