尝试使用 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(即使空闲且播放列表为空),设备将被阻止使用。

同样,如果我只打开(右上角菜单)设置,它也会被阻止 - 大概是因为它的声音/麦克风测试面板。

相关内容