ALSA&Python – 捕获多个单声道audioinput

我正在使用python audio alsa库与我的M-Audio Delta 1010LT PCIaudio接口进行交互。 这个audio接口有8个模拟input。 我想分析一个特定的单声道input的信号。 卡被认可:

cat /proc/asound/cards 0 [M1010LT ]: ICE1712 - M Audio Delta 1010LT M Audio Delta 1010LT at 0xa000, irq 18 

之后,我用命令“amixer”列出了所有器件名称(在这里显示inputADC)

 ... Simple mixer control 'ADC',0 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 142 [87%] [7.50dB] Simple mixer control 'ADC',1 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',2 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',3 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',4 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',5 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',6 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] Simple mixer control 'ADC',7 Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 164 Mono: 164 [100%] [18.50dB] ... 

之后,我使用命令“arecord -l”列出了录制硬件设备

 arecord -l**** List of CAPTURE Hardware Devices **** card 0: M1010LT [M Audio Delta 1010LT], device 0: ICE1712 multi [ICE1712 multi] Subdevices: 1/1 Subdevice #0: subdevice #0 

我对吗? 这是只显示1logging子设备? 它不是显示8?

我还安装了Mudita24 – 一个羡慕的视觉混音器。 有了这个,我可以完美地调整和监控所有input通道的电平。

之后,我用GStreamer做了一个小testing,效果也很好:

 gst-launch-0.10 alsasrc card-name=0 device-name='ADC 0' ! queue ! alsasink card-name=0 device-name='DAC 0' 

但是我在使用下面的卡片和设备描述符来解决python的alsa中的某个单声道问题时遇到了麻烦:

 'default' // This one get's me channel 1 & 2 MIXED (I'd like to get them as seperated mono inputs) 'hw:0,0' // recognizes device but the input value is 0 'hw:0,0,0' // returns same as hw:0,0 'hw:0,0,1' // Device or resource busy (pretty much every other value than 0 returns this) 'hw:0,1' // No such file or directory 

如何使用ALSA解决特定的单声道input通道? 这是我正在使用的Python库: 链接

这就是我试图为每个通道创build一个设备的方法:

 pcm.one_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 44000 } bindings [ $CHANNEL ] } pcm.two_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 44000 } bindings [ $CHANNEL ] } pcm.three_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 44000 } bindings [ $CHANNEL ] } pcm.four_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 44000 } bindings [ $CHANNEL ] } pcm.five_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 44000 } bindings [ $CHANNEL ] } 

我有正确的解释你的build议吗? 我一直在环视networking,并find了另外两个.asoundrc这张卡(不幸的是也不工作)。

 # # M-Audio Delta 1010 # pcm.ice1712_capture { type dsnoop ipc_key 1024 slave { pcm "hw:0" period_size 0 buffer_size 65536 rate 44100 channels 10 format "S16_LE" } } pcm.ice1712_playback { type dsnoop ipc_key 1024 slave { pcm "hw:0" period_size 0 buffer_size 65536 rate 44100 channels 10 format "S16_LE" } } pcm.ice1712_duplex { type asym playback.pcm ice1712_playback capture.pcm ice1712_capture } pcm.ch1 { type plug ttable.0.0 1 slave.pcm ice1712_duplex } pcm.ch2 { type plug ttable.1.1 1 slave.pcm ice1712_duplex } pcm.ch3 { type plug ttable.0.2 1 slave.pcm ice1712_duplex } pcm.ch4 { type plug ttable.1.3 1 slave.pcm ice1712_duplex } pcm.ice1712_ch5 { type plug ttable.0.4 1 slave.pcm ice1712_duplex } pcm.ice1712_ch6 { type plug ttable.1.5 1 slave.pcm ice1712_duplex } pcm.ice1712_ch7 { type plug ttable.0.6 1 slave.pcm ice1712_duplex } pcm.ice1712_ch8 { type plug ttable.1.7 1 slave.pcm ice1712_duplex } pcm.ice1712_ch9 { type plug ttable.0.8 1 slave.pcm ice1712_duplex } pcm.ice1712_ch10 { type plug ttable.1.9 1 slave.pcm ice1712_duplex } 

另外一个:

 pcm.multi_capture { type multi slaves.a.pcm hw:0 slaves.a.channels 12 # First 8 channels of first soundcard (capture) bindings.0.slave a bindings.0.channel 0 bindings.1.slave a bindings.1.channel 1 bindings.2.slave a bindings.2.channel 2 bindings.3.slave a bindings.3.channel 3 bindings.4.slave a bindings.4.channel 4 bindings.5.slave a bindings.5.channel 5 bindings.6.slave a bindings.6.channel 6 bindings.7.slave a bindings.7.channel 7 # S/PDIF section. Uncomment bindings if required. # S/PDIF first soundcard (capture) #bindings.16.slave a #bindings.16.channel 8 #bindings.17.slave a #bindings.17.channel 9 } ctl.multi_capture { type hw card 0 } pcm.multi_playback { type multi slaves.a.pcm hw:0 slaves.a.channels 10 # First 8 channels of first soundcard (playback) bindings.0.slave a bindings.0.channel 0 bindings.1.slave a bindings.1.channel 1 bindings.2.slave a bindings.2.channel 2 bindings.3.slave a bindings.3.channel 3 bindings.4.slave a bindings.4.channel 4 bindings.5.slave a bindings.5.channel 5 bindings.6.slave a bindings.6.channel 6 bindings.7.slave a bindings.7.channel 7 # S/PDIF section. Uncomment bindings if required. # S/PDIF first soundcard (playback) #bindings.16.slave a #bindings.16.channel 8 #bindings.17.slave a #bindings.17.channel 9 } ctl.multi_playback { type hw card 0 } 

amixer工具不显示设备名称,但混合器控件。

ICE1712芯片确实只有一个捕获设备(正好有12个通道)。


要获得各个通道的虚拟设备,请尝试在~/.asoundrc/etc/asound.conf添加如下内容:

 pcm.one_channel { @args [ CHANNEL ] @args.CHANNEL { type integer } type dsnoop ipc_key 20130206 slave { pcm "hw:0" channels 12 rate 48000 } bindings [ $CHANNEL ] } 

然后使用设备名称,如one_channel:0one_channel:1