Audio
嘗試使用 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>)" }
where
<num>
取 1 到 8 之間<ch_num>
的所有值,取 0 到 7 之間的所有值。因為,錯誤清楚地表明存在一個明確的問題
dsnoop
,這是否意味著它不適用於同時/多通道錄製?我的意思是之間是否存在衝突dsnoop
,dshare
或者是否dsnoop
可以一次僅從一個頻道錄製/擷取?還有另一種方法可以實現這一目標嗎?
ipc_key
用於共享同一設備的程序之間的通信。這意味著您必須對不同的硬體設備使用不同的值,但訪問同一硬體設備(即,相同的 slaveusb_audio_1
)的所有虛擬設備必須使用相同的 ID。