0
点赞
收藏
分享

微信扫一扫

android使用Alsa Aloop录制系统内部声音

Gaaidou 2022-04-24 阅读 150
android

alsa aloop是alsa提供的内部loopback功能,可以用来实现录制系统内部声音,在没有硬件支持loopback功能时可以采用这种软件loopback的实现来代替。

alsa aloop实现了一个虚拟的声卡。

在kernel的编译配置选项文件中加入CONFIG_SND_ALOOP=y之后烧录到平台中声卡会多出两个pcm设备:

00-00: Loopback PCM : Loopback PCM : playback 8 : capture 8
00-01: Loopback PCM : Loopback PCM : playback 8 : capture 8

注意到此时原先板载的实际声卡的index将变为1,因为aloop注册比较早

有了这两个节点之后就可以使用tinyplay和tinycap来验证。

使用方法为:

tinyplay 写入card 0 device 0,同时tinycap从card 0 device 1录制

tinyplay /data/8ch_16bit.wav -d 0& tinycap /data/test.wav -d 1 -c 8 -r 48000 -b 16     <
[1] 8228
Playing sample: 8 ch, 48000 hz, 16 bit
Capturing sample: 8 ch, 48000 hz, 16 bit

 注意的是打开的参数如采样率 位深和ch数要与录制的时候保持一致,否则会提示参数非法而打开失败。

这一步验证完成之后要实现在android里使用aloop录制系统声音则需要在audo hal中pcm_open,pcm_close,pcm_write实际声卡的地方一样加上操作aloop的虚拟声卡0,

在android P上调试发现使用pcm_open打开aloop device输出时传递的alsa config参数也有限制:

period_size = 1024;
period_count = 4;

period_size 和period_count 需要,不超过1024和4,否则一样会open失败 提示参数非法。

最后贴下alsa aloop的数据流向:

 

举报

相关推荐

0 条评论