美文网首页Android开发Android技术知识Android开发
Android音频底层调试-基于tinyalsa

Android音频底层调试-基于tinyalsa

作者: 爱因私谈 | 来源:发表于2019-07-05 11:04 被阅读16次

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

    1. 编译tinyalsa配套工具

    $ mmm external/tinyalsa/
    

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

    • tinymix: 查看配置混音器
    • tinyplay: 播放音频
    • tinycap: 录音

    2. 查看当前系统的声卡

    shell@X28_068_MIPI:/ # cat /proc/asound/cards
     0 [RKRK312X       ]: RK_RK312X - RK_RK312X
                          RK_RK312X
     1 [RKsph0645lm4h  ]: RK_sph0645lm4h - RK_sph0645lm4h
                          RK_sph0645lm4h
    
    
    shell@X28_068_MIPI:/ # ls -l /dev/snd/
    crw-rw---- system   audio    116,   0 2015-01-22 10:22 controlC0
    crw-rw---- system   audio    116,  32 2015-01-22 10:22 controlC1
    crw-rw---- system   audio    116,  24 2015-01-22 10:22 pcmC0D0c
    crw-rw---- system   audio    116,  16 2015-01-22 10:22 pcmC0D0p
    crw-rw---- system   audio    116,  25 2015-01-22 10:22 pcmC0D1c
    crw-rw---- system   audio    116,  17 2015-01-22 10:22 pcmC0D1p
    crw-rw---- system   audio    116,  56 2015-01-22 10:22 pcmC1D0c
    crw-rw---- system   audio    116,  33 2015-01-22 10:22 timer
    

    3. tinymix查看混响器

    tinymix用法:

    • 不加任何參数 --- 显示当前配置情况
    • 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
    

    相应解释:

    英文 中文 备注
    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音乐

    一般播放1khz 0db正弦波,然后在codec输出端示波器简单测量是否失真,杂音,然后再使用音频分析仪测试指标。

    shell@X28_068_MIPI:/ # tinyplay
    Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
    
    shell@X28_068_MIPI:/ # tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
    Playing sample: 2 ch, 44100 hz, 32 bit
    

    5. 通过tinycap录音

    shell@X28_068_MIPI:/ # tinycap 
    Usage: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n_periods] 
    
    shell@X28_068_MIPI:/ # tinycap /sdcard/rec.wav -D 0 -d 0 –c 2 –r 44100 –b 16 –p 1024 –n 3
    

    6. 其它

    tinyalsa源码
    原文:https://www.cnblogs.com/yxwkf/p/5344068.html

    相关文章

      网友评论

        本文标题:Android音频底层调试-基于tinyalsa

        本文链接:https://www.haomeiwen.com/subject/hnsshctx.html