[-]

  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.查看当前系统的声卡

 



[python] view plain copy print ?



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

     



    [python] view plain copy print ?


    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音乐。

     



    [python] view plain copy print ?

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

     

    1.编译tinyalsa配套工具

    $ mmm external/tinyalsa/

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

    tinymix: 查看配置混音器

    tinyplay: 播放音频

    tinycap: 录音

     

    2.查看当前系统的声卡

     



    [python] view plain copy print ?


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

     



    [python] view plain copy print ?


    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音乐。

     



    [python] view plain copy print ?



      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.