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

本文转载自: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. [email protected]:/ # 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. [email protected]:/ #

3.tinymix查看混响器

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

[python] view plain copy

  1. [email protected]:/ # 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 0
  9. 5   INT 2   Headphone Playback Volume                0 0
  10. 6   ENUM    1   Modem Input Enable                       ON
  11. [email protected]:/ #

对应解释:


英文


中文


备注


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


例:将输出切换到扬声器

[email protected]:/ # 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. [email protected]:/ # tinyplay /sdcard/0_16.wav
  2. Playing sample: 2 ch, 44100 hz, 16 bit
  3. [email protected]:/ #

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

5.tinycap使用

[email protected]:/ # 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。下载地址

[email protected]:/ # 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

[email protected]:/ #

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.

时间: 2024-08-03 01:13:25

linux中的alsa工具与Android中的tinyalsa工具【转】的相关文章

面试中被问到:Android中activity保存状态数据到底该在哪个方法中进行

今天接到一个电面,途中面试官问到一个问题,如果一个activity在后台的时候,因为内存不足可能被杀死,在这之前如果想保存其中的状态数据,比如说客户填的一些信息之类的,该在哪个方法中进行. 我听到的第一反应就是说:在onPause方法中进行保存状态的操作.但是面试官说:onPause()的持续时间很短,假如要进行一些长时间的操作呢? 然后我就纠结了,因为我知道,如果是因为内存不足而被清理,onDestroy()方法一般是不会被执行的.所以只好实话实说,只知道onDestroy在这种情况下不一定会

Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法

今天在手机上调试运行Andorid项目时,发现Console打印出"WARNING: Application does not specify an API level requirement!"这样的警告信息,如下图所示: 虽然不影响项目的正常运行,不过还是要找出原因,上网查了一下出现警告的原因,原来是创建项目时AndroidManifest.xml文件中没有指定Min SDK Version 解决办法:修改AndroidManifest.xml文件,在<manifest>

获取apk信息工具(android SDK的aapt工具)

aapt命令是android SDK 中的一个工具,功能强大,比如在windows平台获取apk包的信息. 使用该工具准备条件,也即获取aapt.exe文件的方式(2选1即可): 安装android SDK 包(java虚拟机也是需要的),可执行文件aapt.exe一般默认路径C:\Users\你的用户名\AppData\Local\Android\android-sdk\platform-tools . 或者在http://code.google.com/p/android-apktool/d

android中的数据库操作(转)

android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同学来说,把SQL92标准中的一些基本概念.基本语句快速的了解一下,是很有必要的,这样待会用Android的da

Android逆向之旅---Android中如何获取在非Root设备中获取应用隐私数据

一.前言 今天在开发的过程中遇到一个问题,就是关于AndroidManifest.xml中的allowBackup属性,也算是自己之前对这个属性的不了解,加上IDE的自动生成代码,没太注意这个属性,但是没想到这个属性会直接导致隐私数据的丢失.下面就来看一下这个属性的影响到底有多大.他的作用是什么? 二.Android中的allowBackup属性 1.allowBackup安全风险描述Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开

android中的数据库操作【转】

http://blog.csdn.net/nieweilin/article/details/5919013 android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同

(转)详解Android中AsyncTask的使用

转载自:详解Android中AsyncTask的使用 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类a

Android中Serializable和Parcelable序列化对象详解

学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Parcelable进行序列化操作 5.Parcelable的工作原理 6.相关实例 1.序列化的目的 (1).永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中 (2).通过序列化操作将对象数据在网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的.因此序列化的目的是将对象数据转换成字节流的形式) (3).将对象数据在进程

Android中常见Intent习惯用法-上篇(附源码下载)

Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>.如果对Intent Filter不是特别了解,可以参见博文<Android中Intent对象与Intent Filter过滤匹配过程详解>. 本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信.发送邮件.启动摄像机拍照录视频.设置闹铃.打开WIFI设置界面等等. 限于篇幅,本博文分为上下两篇,这是上篇