Android 平台使用audio HAL应该是Linux alsa-utils 的变种;相对后者前者更简单,但是功能基本相同;
在使用命令遍历声卡和设备时,同样支持按照序号和名字索引,这点比较赞。录音或者播放测试音频时,需要先设定音频路由;否则可能录音通道不正确,或者播放无声。
某些版本Android 并未编译 tiny-alsa工具,可自行手动比编译:mmm extranl/tiny-alsa -j16。
提示:RK Android SDK 标配 tiny-alsa 工具。
a) tinycap
b) tinyplay
c) tinymix
4) tinypcminfo
tinycap
Usage: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n_periods] [-T capture time]
# -D 声卡序号/声卡名
# -d 设备名
# -c 声道数量,一般为偶数
# -r 采样率
# -b 位深
# -p 周期
# -n 跳过周期数
# -T 录音时间,单位秒;缺省后时间无限延长
Tinycap 录音格式固定为 wav, 采样率、采样深度和采样周期参照声卡属性范围;如何查看声卡属性请参考 tinypcminfo
。
tinycap /sdcard/rec.wav -D 0 -d 0 –c 2 –r 44100 –b 16 –p 1024 –n 3
# Ctrl + c 暂停录制
tinycap /sdcard/rec.wav -D 0 -d 0 –c 2 –r 48000 –b 16 –p 1024 –n 3 -T 10
tinyplay
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
tinyplay /sdcard/test.wav -D 0 -d 0 -p 1024 -n 3
Playing sample: 2 ch, 48800 hz, 32 bit
tinyplay -D rockchip,rk809-codec -c 0 /sdcard/test.wav -D 0 -d 0 -p 1024 -n 3
Playing sample: 2 ch, 48800 hz, 32 bit
控制 codec 内部的通路开关,声音增益等音频路由属性。可以认为它就是 amixer
缩减版,命令方式基本相通。
tinymix --help
tinymix [options] [control name/#] [value to set]
options:
--device|-D <card#> - use the given card # instead of 0.
--all-values|-a - show all possible values/ranges for control.
--tabs-only|-t - separate all output columns/values with tabs.
--value-only|-v - show only the value for the selected control.
tinymix -a
Mixer name: 'rockchip,rk809-codec'
Number of controls: 2
ctl type num name value
range/values
0 ENUM 1 Playback Path >OFF RCV SPK HP HP_NO_MIC BT SPK_HP RING_SPK RING_HP RING_HP_NO_MIC RING_SPK_HP
1 ENUM 1 Capture MIC Path >MIC OFF Main Mic Hands Free Mic BT Sco Mic
tinymix -D rockchip,rk809-codec 0
# 按名字索引
tinymix -D rockchip,rk809-codec "Capture MIC Path"
Playback Path: >OFF RCV SPK HP HP_NO_MIC BT SPK_HP RING_SPK RING_HP RING_HP_NO_MIC RING_SPK_HP
# 设定rk809 声卡播放路由
tinymix -D rockchip,rk809-codec "Playback Path" "SPK"
# 按序号索引
tinymix -D rockchip,rk809-codec 0 SPK
# 回读后声卡已经是设定的参数
tinymix -D rockchip,rk809-codec "Playback Path" "SPK"
Playback Path: OFF RCV >SPK HP HP_NO_MIC BT SPK_HP RING_SPK RING_HP RING_HP_NO_MIC RING_SPK_HP
查询声卡支持的采样率,格式,声道数。
tinypcminfo
Usage: tinypcminfo -D card -d device
cat /proc/asound/cards
0 [rockchiprk809co]: rockchip_rk809- - rockchip,rk809-codec
rockchip,rk809-codec
# tinypcminfo -D rockchiprk809co
# tinypcminfo -D 0
Info for card 0, device 0:
PCM out:
Access: 0x000009
Format[0]: 0x000444
Format[1]: 00000000
Format Name: S16_LE, S24_LE, S32_LE
Subformat: 0x000001
Rate: min=8000Hz max=96000Hz
Channels: min=2 max=8
Sample bits: min=16 max=32
Period size: min=8 max=65536
Period count: min=2 max=16384
PCM in:
Access: 0x000009
Format[0]: 0x000444
Format[1]: 00000000
Format Name: S16_LE, S24_LE, S32_LE
Subformat: 0x000001
Rate: min=8000Hz max=96000Hz
Channels: min=2 max=8
Sample bits: min=16 max=32
Period size: min=8 max=65536
Period count: min=2 max=16384
从 tinypcminfo 中可知播放和录音设备各有一个,序列号都为0。
$ tinyplay -D rockchip,rk809-codec -c 0 /sdcard/test.wav -D 0 -d 0 -p 1024 -n 3 &
Playing sample: 2 ch, 48800 hz, 32 bit
# 切换到喇叭声道
$ tinymix -D rockchip,rk809-codec "Playback Path" "SPK"
# 切换到耳机声道+功放的喇叭
$ tinymix -D rockchip,rk809-codec "Playback Path" "SPK_HP"
录音前须先适配耳机音频路由,然后再录音。
#切换到耳机麦克风
tinymix -D rockchip,rk809-codec "Capture MIC Path" "Hands Free Mic"
tinycap -D rockchip,rk809-codec -c 0 /sdcard/hp.wav -D 0 -d 0 –c 2 –r 48000 –b 16 –p 1024 –n 3 -T 10
# 播放录音
tinymix -D rockchip,rk809-codec "Playback Path" "HP"
tinyplay -D rockchip,rk809-codec 0 /sdcard/hp.wav -D 0 -d 0 -p 1024 -n 3
录音前须先适配主mic音频路由,然后再录音。
#切换到主麦克风
tinymix -D rockchip,rk809-codec 1 “Main Mic”
tinycap -D rockchip,rk809-codec -c 0 /sdcard/mic.wav -D 0 -d 0 -p 1024 -n 3 -T 5
# 播放录音,播放路由切到外设喇叭
tinymix -D rockchip,rk809-codec 0 SPK_HP
tinyplay -D rockchip,rk809-codec 0 /sdcard/mic.wav -D 0 -d 0 -p 1024 -n 3
活学活用,做个合格的搬运工。