201 ALSA Loopback - Rsantct/FIRtro-light GitHub Wiki
ALSA Loopback
Cargamos la tarjeta de sonido virtual loopback
/etc/modules-load.d/alsa_loopback.conf
snd-aloop
/etc/modprobe.d/alsa_loopback.conf
options snd-aloop pcm_substreams=2
Comprobamos:
~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 7/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
card 1: RPiCirrus [RPi-Cirrus], device 0: WM5102 AiFi wm5102-aif1-0 []
Subdevices: 0/1
Subdevice #0: subdevice #0
Cualquier audio reproducido sobre hw:Loopback,0 estará accesible para ser capturado en hw:Loopback,1
Nota: en este caso hemos limitado el Loopback a 2 canales (pcm_substreams=2
)
Más info aquí: https://alsa.opensrc.org/Jack_and_Loopback_device_as_Alsa-to-Jack_bridge
Ejemplo de uso: Brutefir vía ALSA
Hacemos que la tarjeta ALSA por defecto sea el 'plug' hacia 'Loopback'. Indicar el 'format' adecuado a nuestra tarjeta física en la sección 'slave':
~/.asound.rc
pcm.!default {
type plug
slave {
type hw
card "hw:Loopback,0"
channels 2
format "S32_LE"
rate 44100
}
}
ctl.!default {
type hw
card "hw:Loopback"
}
/home/lspk/mialtavoz/44100/brutefir_config
...
...
# Entrada desde Loopback, salida por la tarjeta física.
input "in_L", "in_R" {
# Conexiones fijas a la tarjeta ficticia 'Loopback,1'
# que recibira lo que reproduzca en 'Loopbak,0'
device: "alsa" { device: "hw:Loopback,1"; ignore_xrun: true; };
sample: "S32_LE";
channels: 2/0,1;
};
output "fr_L", "fr_R" {
# Tarjeta de sonido fisica
device: "alsa" { device: "hw:RPiCirrus,0"; ignore_xrun: true; };
sample: "S32_LE";
channels: 2/0,1;
maxdelay: 1000;
dither: false;
delay: 0,0; # 'samples' that are equivalent in 'ms' to 0,0
};
...
...
Reproduciendo audio hacia Brutefir
Cualquier player usará el plug hacia Loopback y el audio llegará a Brutefir. El 'plug' ALSA se ocupa de resolver cualquier remuestreo necesario.
Capturando Line-IN hacia Brutefir
arecord -D hw:RPiCirrus,0 -r44100 -f S32_LE -c 2 | aplay -D plughw:Loopback,0 &