Se produce el error "Dispositivo o recurso ocupado" al intentar grabar audio usando arecord

Se produce el error "Dispositivo o recurso ocupado" al intentar grabar audio usando arecord

Estoy intentando grabar audio que se reproduce en canales separados usando arecord. Hago esto ejecutando el siguiente comando en subprocesos separados en un script de Python:

arecord -D plug:"+str(in_id)+" -c 1 -d "+str(duration)+" -f S16_LE -r "+str(rate)+" "+rec_filename

¿Dónde in_idestá la variable del canal de entrada que paso a cada uno de los hilos? Pero luego, se arroja el siguiente error:

ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) unable to open slave
arecord: main:722: audio open error: Device or resource busy

Cuando ejecuto lsof /dev/snd/pcm*justo antes de comenzar a grabar usando arecordmi función de grabación en el programa, veo lo siguiente:

COMMAND   PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
aplay   12236       user4  mem    CHR  116,3           493 /dev/snd/pcmC1D0p
aplay   12236       user4    4u   CHR  116,3      0t0  493 /dev/snd/pcmC1D0p

La definición de mi dispositivo para canales de entrada .asoundrces la siguiente:

pcm.!default {
    type plug
    slave {
       pcm "hw:1,0"
    }
}

ctl.!default { 
    type hw
    card 1
}

pcm_slave.usb_audio_1 {
    pcm "hw:1,0"
    channels 8
    rate 44100
    buffer_size 4096
    period_size 1024
}

pcm.outch<num> {
    type dshare
    ipc_key <id>
    slave usb_audio_1
    bindings [ <ch_num> ]
    hint.description "USB output/playback channel <num> (from output port <num>)"
}

pcm.inch<num> {
    type dsnoop
    ipc_key <id>
    slave usb_audio_1
    bindings [ <ch_num> ]
    hint.description "USB input/capture channel <num> (from input port <num>)"
}

donde <num>toma todos los valores entre 1 y 8 y <ch_num>toma todos los valores entre 0 y 7.

Dado que el error dice claramente que hay un problema definitivo con dsnoop, ¿eso significa que no está diseñado para grabación simultánea/multicanal? Quiero decir, ¿hay algún conflicto entre dsnoopy dshareo si dsnoopse puede grabar/capturar desde un solo canal a la vez? ¿Hay otra manera de lograr esto?

Respuesta1

Se ipc_keyutiliza para la comunicación entre los programas que comparten el mismo dispositivo. Esto significa que debe usar valores diferentes para diferentes dispositivos de hardware, pero que todos los dispositivos virtuales que acceden al mismo dispositivo de hardware (es decir, el mismo esclavo usb_audio_1) deben usar la misma ID.

Respuesta2

En mi caso, el dispositivo está bloqueado para arecordsu uso si tengo VLC abierto (incluso si está inactivo y con una lista de reproducción vacía).

De manera similar, también está bloqueado si solo tengo abierta la configuración (menú de la esquina superior derecha), presumiblemente debido a su panel de prueba de sonido/micrófono.

información relacionada