http://blog.csdn.net/kangear/article/details/38139669

[-]

  1. 编译tinyalsa配套工具
  2. 查看当前系统的声卡
  3. tinymix查看混响器
  4. 使用tinyplay播放wav音乐
  5. tinycap使用
 

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

1.编译tinyalsa配套工具

$ mmm external/tinyalsa/

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

tinymix: 查看配置混音器

tinyplay: 播放音频

tinycap: 录音

2.查看当前系统的声卡

  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:/ #
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]可选选项。

  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 0
  9. 5   INT 2   Headphone Playback Volume                0 0
  10. 6   ENUM    1   Modem Input Enable                       ON
  11. root@android:/ #
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.8kHz的wav音乐。

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

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

其它被证实为假的假设:

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

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

[转]Android音频底层调试-基于tinyalsa的更多相关文章

  1. Android音频底层调试-基于tinyalsa

    因为Android中默认并没有使用标准alsa,而是使用的是tinyalsa.所以就算基于命令行的測试也要使用libtinyalsa.Android系统在上层Audio千变万化的时候,能够能这些个工具 ...

  2. Android音频介绍

    这个世界音频设备千变万化,Android也不可能为每种设备都提供支持.Android定义了一个框架,这个框架来适配底层的音频设备.该适配层的定义位于: hardware/libhardware_leg ...

  3. Android音频系统之音频框架

    1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音频系统在很长一段 ...

  4. Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能

    Android音频处理--通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能 音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下 ...

  5. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  6. Android的底层库libutils介绍

    第一部分 libutils概述 libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的.Android的层次的C语言程序和库,大都基于libutils开发. libu ...

  7. Android音频开发之——如何播放一帧音频

    本文重点关注如何在Android平台上播放一帧音频数据.阅读本文之前,建议先读一下<Android音频开发(1):基础知识>,因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的 ...

  8. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

    一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...

  9. Android音频焦点详解(上)

    转载请注明出处:http://www.cnblogs.com/landptf/p/6384112.html 2017年开年第一篇博客,很早就想总结一下Android音频的相关知识.今天我们先来看一下音 ...

随机推荐

  1. 脚本 用 scp 拷贝文件

    #!/usr/bin/expect set proj_dir /home/jksong/NewsSpark/openid_for_commonid set tmp_data_dir $proj_dir ...

  2. Spring AOP 由浅入深

    (分析基于Spring的版本:version = 4.1.6.RELEASE) Spring AOP工厂: org.springframework.aop.framework.DefaultAopPr ...

  3. emacs不能使用中文输入法

    参考 http://blog.csdn.net/nomasp/article/details/52138501 根据Fcitx的介绍:当LC_CTYPE为英文时,在Emacs上可能无法使用输入法. : ...

  4. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...

  5. Google Font字体本地化使用提高网站访问速度

    Google Web font在国内经常不稳定,速度在国内延迟也很高,而引发网页打开速度慢. 一.常见的字体格式介绍 不同的浏览器对字体格式支持是不一致的,常见的如下: 1.TureTpe(.ttf) ...

  6. android的四层体系结构,基于mvc三层结构浅析

    从多方面理解Android体系结构 1.以分层的方式来看Android 安卓体系结构分为四层. 首先看一下官方关于Android体系结构的图: 1).Linux Kernel:负责硬件的驱动程序.网络 ...

  7. List subList(startIndex, endIndex);

    1. subList(startIndex, endIndex);//startIndex开始,到endIndex结束,不包含endIndex! 2. 集合排序可以实现 java.util.Compa ...

  8. CentOS linux下安装和配置Apache+SVN(用浏览器http方式访问SVN目录)

    在CentOS linux下安装SVN,我们可以进行以下步骤: 第一步:安装CentOS Linux操作系统,并在CentOS安装进行的同时,自定义安装这一步,一定要勾选Subversion(在“开发 ...

  9. QT学习(打个广告)

    最近全面学习QT与c++,希望同行能够指教,于是打算建个群QQ群:85439482,欢迎大家,本群主要专注于QT皮肤库积累,软件架构以及标准c++学习.

  10. apache httpd.conf 参数详解

    由于网站需要,需要配置多个虚拟主机,但是apache主机的参数太多,记不住,下面做一下总结 归纳: ServerRoot:apache安装位置 Listen:服务器监听的端口号 LoadModule: ...