linux中的alsa工具与Android中的tinyalsa工具【转】

news/2024/7/7 20:57:06

本文转载自:http://blog.csdn.net/luckywang1103/article/details/48053015

 

目录(?)[+]

 

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

 

1.编译tinyalsa配套工具

$ mmm external/tinyalsa/

编译完后会产生tinyplay/tinymix/tinycap等等工具。

tinymix: 查看配置混音器

tinyplay: 播放音频

tinycap: 录音

 

2.查看当前系统的声卡

 

[python]  view plain  copy
 
  1. root@android:/ # cat /proc/asound/cards  
  2.  0 [RKRK616        ]: RK_RK616 - RK_RK616  
  3.                       RK_RK616  
  4.  1 [ROCKCHIPSPDIF  ]: ROCKCHIP-SPDIF - ROCKCHIP-SPDIF  
  5.                       ROCKCHIP-SPDIF  
  6. root@android:/ #   

 

3.tinymix查看混响器

tinymix使用方法a.不加任何参数-显示当前配置情况 b.tinymix [ctrl id] [var]不加[var]可以查看该[ctrl id]可选选项。

 

[python]  view plain  copy
 
  1. root@android:/ # tinymix  
  2. Number of controls: 7  
  3. ctl type    num name                                     value  
  4. 0   ENUM    1   Playback Path                            OFF  
  5. 1   ENUM    1   Capture MIC Path                         MIC OFF  
  6. 2   ENUM    1   Voice Call Path                          OFF  
  7. 3   ENUM    1   Voip Path                                OFF  
  8. 4   INT 2   Speaker Playback Volume                  0  
  9. 5   INT 2   Headphone Playback Volume                0  
  10. 6   ENUM    1   Modem Input Enable                       ON  
  11. 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音乐。

 

[python]  view plain  copy
 
  1. root@android:/ # tinyplay /sdcard/0_16.wav                                       
  2. Playing sample: 2 ch, 44100 hz, 16 bit  
  3. 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。

制作静态库参考:Linux下Gcc生成和使用静态库和动态库详解


 

其它被证实为假的假设:

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

2.需要通过其它途径获取tinyalsa.

 

http://www.niftyadmin.cn/n/2828642.html

相关文章

wifi芯片_适合家用WiFi的开关电源芯片

在进入互联网时代现在已经很少有家庭没有安装WiFi,这项技术可以算的上是近几年来最伟大的发明之一。它彻底改变了人们的生活,改变了智能设备对网络数据的接受方式。但随着技术的发展,人们开始越来越不满足于目前的WiFi速度,那么如…

php二维数组json,php如何将二维数组转为json数据

php如何将二维数组转为json数据php将二维数组转为json数据的方法:可以利用php内置函数json_encode()来实现。json_encode()函数用于对变量进行json编码,如果执行成功则返回json数据,否则返回false。json_encode() 用于对变量进行 JSON 编码&a…

php脚本怎么设置是否,如何调试PHP脚本?

这是我的小型调试环境:error_reporting(-1);assert_options(ASSERT_ACTIVE, 1);assert_options(ASSERT_WARNING, 0);assert_options(ASSERT_BAIL, 0);assert_options(ASSERT_QUIET_EVAL, 0);assert_options(ASSERT_CALLBACK, assert_callcack);set_error_handler(er…

Rocket.Chat 开源IM系统部署

Rocket.Chat 官方给出的文档也个人觉得太麻烦了,并且对ubuntu的支持程度远高于CentOS,自己就折腾写了个安装的笔记,如果是在公司内部或者是部门内部还是很有用处的,比较看中的功能有和gitlab或github的整合,以及注册认…

MongoDB学习笔记(二)--Capped集合 GridFS存储文件

Capped集合 Capped集合的大小是固定的,如果空间都被用完了,新添加的对象会取代最旧的那个数据。 创建使用了db.createCollection()方法创建了一个名字为mycapped,空间大小为1000…

unity开发相关环境(vs、MonoDevelop)windows平台编码问题

情景描述:最近在做Unity的网络底层,用VS编写源码,MonoDevelop用来Debug,在Flash Builder上搭建的Python做协议生成器,期间有无数次Unity莫名奇妙的的down掉了,然后仔细分析了一下: 1、unity会爆…

基于Linq to edmx的实体数据模型(EDM)类名批量修改工具

C#实体数据模型(EDM)类名批量修改工具 最近打算用EF来开发一下新的系统,但是数据库中的表名被直接映射为了实体类名,但是我的表名为Base_XXX(XXX为表名)的格式,这导致我在操作数据的时候不得不写如下的代码: UserCenterEntities dataBase newUserCenterEntities();//获取所有用…

阿里云推出国内首个社保云系统

本文讲的是阿里云推出国内首个社保云系统,1月14日消息,国内首个“人社一体化信息系统”在阿里云平台上诞生。该系统包括浙江省淳安县社会保险、就业、执法、仲裁等几十个政府业务系统,承载着全县45万人的社会保险信息以及超过3000家的参保单位…