Beim Versuch, Audio mit Arecord aufzunehmen, wird die Fehlermeldung „Gerät oder Ressource ausgelastet“ angezeigt.

Beim Versuch, Audio mit Arecord aufzunehmen, wird die Fehlermeldung „Gerät oder Ressource ausgelastet“ angezeigt.

Ich versuche, Audio aufzunehmen, das auf verschiedenen Kanälen abgespielt wird arecord. Dazu führe ich den folgenden Befehl in separaten Threads in einem Python-Skript aus:

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

wobei in_iddie Eingangskanalvariable ist, die ich an jeden der Threads übergebe. Dann wird jedoch folgender Fehler ausgegeben:

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

Wenn ich lsof /dev/snd/pcm*direkt vor dem Start der Aufnahme die arecordAufnahmefunktion im Programm ausführe, sehe ich Folgendes:

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

Meine Gerätedefinition für Eingangskanäle .asoundrclautet wie folgt:

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>)"
}

wobei <num>alle Werte zwischen 1 und 8 und <ch_num>alle Werte zwischen 0 und 7 akzeptiert werden.

Da der Fehler eindeutig besagt, dass ein bestimmtes Problem mit vorliegt dsnoop, bedeutet das, dass es nicht für die gleichzeitige/mehrkanalige Aufnahme gedacht ist? Ich meine, besteht ein Konflikt zwischen dsnoopund dshareoder dsnoopkann nur von einem Kanal gleichzeitig aufgenommen/aufgezeichnet werden? Gibt es eine andere Möglichkeit, dies zu erreichen?

Antwort1

Die ipc_keywird für die Kommunikation zwischen den Programmen verwendet, die dasselbe Gerät gemeinsam nutzen. Dies bedeutet, dass Sie für verschiedene Hardwaregeräte unterschiedliche Werte verwenden müssen, aber dass alle virtuellen Geräte, die auf dasselbe Hardwaregerät zugreifen (also denselben Slave usb_audio_1), dieselbe ID verwenden müssen.

Antwort2

In meinem Fall wird die arecordNutzung des Geräts gesperrt, wenn ich VLC geöffnet habe (auch im Leerlauf und mit leerer Wiedergabeliste).

Ebenso wird es blockiert, wenn ich nur die Einstellungen (Menü oben rechts) geöffnet habe – vermutlich wegen des dortigen Sound-/Mikrofon-Testfensters.

verwandte Informationen