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 &