嘗試使用 arecord 錄製音訊時拋出「裝置或資源繁忙」錯誤

嘗試使用 arecord 錄製音訊時拋出「裝置或資源繁忙」錯誤

我正在嘗試使用 錄製在單獨通道上播放的音訊arecord。我透過在 python 腳本中的單獨線程中執行以下命令來實現此目的:

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

其中in_id是我傳遞給每個執行緒的輸入通道變數。但隨後,會拋出以下錯誤:

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

當我在程式中的記錄功能中lsof /dev/snd/pcm*開始記錄之前運行時,我看到以下內容:arecord

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

我的輸入通道的設備定義.asoundrc如下:

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

其中,<num>取 1 到 8 之間的所有值,並<ch_num>取 0 到 7 之間的所有值。

由於該錯誤清楚地表明 存在明確的問題dsnoop,這是否意味著它不適用於同時/多通道錄製?我的意思是dsnoop, 和之間是否存在衝突,dshare或者是否dsnoop一次只能從一個通道進行記錄/捕獲?我還有其他方法可以實現這個目標嗎?

答案1

用於ipc_key共用相同裝置的程式之間的通訊。這表示您必須對不同的硬體設備使用不同的值,但是存取相同硬體設備(即同一從屬設備usb_audio_1)的所有虛擬設備必須使用相同的ID。

答案2

arecord就我而言,如果我打開 VLC(即使空閒且播放清單為空),設備將被阻止使用。

同樣,如果我只打開(右上角選單)設置,它也會被阻止 - 大概是因為它的聲音/麥克風測試面板。

相關內容