当前位置: 首页 > news >正文

Aloop虚拟声卡

snd-aloop为linux kernel下的一个模块,使之生效需要加载对应的内核模块。

 sudo modprobe snd-aloop

上述命令执行后就会在linux下创建Loopback虚拟声卡,会在一个新的Loopback虚拟声卡上创建device 0和device 1,可用于playback和record,实现playback和record的回环,如果device 0用于playback,则device 1用于record;反之,如果device 1用于playback则device 0用于record。

但是用以上这种加载方式必须在每次系统重启后输入命令,可以修改配置文件,一劳永逸。
在/etc/modules-load.d/modules.conf中添加snd-aloop即可,重启后会自动加载aloop声卡。

然后通过aplay -l可以看到,playback的声卡,有两个loopback声卡。

image.png


arecord -l 可以看到record的声卡

image.png


有时可能需要在aplay或者arecord命令前加入sudo才可以,这是因为当前用户没有加入到audio组中,用以下命令重启后即可。

sudo usermod -a -G 组名 用户名

有时我们可能需要把物理声卡删除,只保留aloop虚拟声卡,可以通过下述方式实现:

  • cat /proc/asound/cards,可以看到当前有三个声卡,如下:

image.png

  • 执行命令
echo 1 | sudo tee /sys/class/sound/card1/device/remove
echo 1 | sudo tee /sys/class/sound/card2/device/remove
  • 然后再通过cat /proc/asound/cards查看,可以看到确实只剩下Loopback声卡了。

image.png

可以使用echo 1 | sudo tee /sys/bus/pci/rescan恢复。

以上这种卸载声卡的方式存在两个问题:

  • 系统重启后又恢复了,我们可能不想每次系统重启后,都手动操作,更希望自动删除。
  • 如果我们想保留的card2,用上述方式删除后,card0和card1不存在,只有card2,但是在当前情况下card的序号应该从0开始。

可以在 /etc/modprobe.d/blacklist.conf添加黑名单,添加不需要加载的modules。但是我们怎么知道对应声卡的modules名称。
执行lsmod | less | grep "snd",可以看到声卡对应加载的模块

image.png


需要禁用的为红色框的module,在/etc/modprobe.d/blacklist.conf中添加

image.png


重启后,就会只保留aloop声卡。

以上是一些准备工作,现在看如何aplay,arecord回环,打开两个shell,在其中一个输入

aplay -D hw:0,1 test.wav

在另一个shell输入

arecord -D hw:0,0 -f S16_LE -c 2 -r 44100 recorded.wav

如此就recorded.wav实际为test.wav的一个回环,需要注意以下几点:
●以上参数中没有加subdevice,不加的话默认的subdevice为0
●需要保证arecord中的命令参数中的format和loopback的format一致,如果loopback的采样率为44100Hz,这里设置48000Hz,或者channel和sample_format不一致,保存的wav文件播放是按照你设定的参数来的,但是里面的PCM数据为实际声卡的参数。

以上的这种方式有一个问题,即如果test.wav的采样率为48000Hz,则回环后生成recorded.wav里面的pcm数据实际为48000Hz,但是参数配置为44100Hz,所以必须参数一致,我们可以用alsaloop工具实现音频流的重定向。
假设电脑有自己的物理声卡,我们也加载了虚拟声卡

image.png


在一个shell中输入

alsaloop -C hw:2,1,4 -P hw:1,0

另一个shell中输入

 aplay -D hw:2,0,4 audio.wav

这样就会听到audio.wav的内容。具体的流程如下:
●audio.wav播放到loopback声卡,card 2 device 0,subdevice 4,
●由于虚拟声卡回环,播放流会回环到 card 2 device 1 subdevice 4
●我们用alsaloop采集card 2 device 1 subdevice 4的流,并重定向到card 1 device 0,subdevice 0.card 1为电脑的物理声卡,我们就会听到audio.wav了。

参考

https://sysplay.in/blog/linux/2019/06/playing-with-alsa-loopback-devices/

If you get gains,please give a like


http://www.mrgr.cn/news/56149.html

相关文章:

  • CertiK首席安全官出席上海区块链周,探讨AI在区块链领域的创新与挑战
  • 滚雪球学Redis[8.1讲]:Redis的扩展与未来发展
  • tracert和ping的区别
  • LinkedList和链表之刷题课(上)
  • 代购系统:商品详情的“时空穿越者”
  • 【java数据结构】队列
  • wsl2配置网络代理,访问外网
  • Qt学习笔记(二)Qt 信号与槽
  • 华为HarmonyOS实现实时语音识别转文本
  • python将1格式化为01
  • k8s dockers 部署 k8s运行docker
  • 使用RRT算法进行路径规划的探索与优化
  • CodeQL和数据流分析的简介
  • 双十一有哪些值得购买的好物品?2024双十一超级好用的五款品牌分享
  • Qt开发笔记(一)Qt的基础知识及环境编译(泰山派)
  • 关于美团外卖霸王餐系统的详细介绍?你了解多少
  • 低代码平台:让系统开发随需而变,轻松应对各种需求!
  • [电子科大]王丽杰 离散数学 第二讲 特殊集合和集合间关系 笔记
  • 2024 年入门编程培训,仍然值得
  • 川宁生物三季报:抗生素中间体稳健增长,合成生物学产能蓄势待发
  • 深入解析 ThreadPoolExecutor:参数配置与源码分析
  • OAK相机的标定流程更新与优化通知
  • 高标准农田灌区信息化助力精准农业发展
  • springboot在线学习系统-计算机毕业设计源码78477
  • Android 添加线性亮度,替换原来的不平滑亮度曲线
  • 小巧设计,强大功能:探索SoC模块的多样化功能