0

I am using a USB sound card with 16 microphones on my Raspberry Pi (the device is the UMA 16). Currently, I am collecting all 16 channels data and using up to 8 of them by separating their contents programmatically for an application that needs real time audio input, according to a configuration file which specifies which channels to use. Is there any way to use the alsa driver API to provide data from up to 8 microphones specified by the user at runtime so I can avoid the extra 8 mic input?

I'm attaching the .asoundrc file that I wrote for the UMA 16:

pcm_slave.ins {
        pcm "hw:1,0"
        rate 16000
        channels 16
}
pcm.mic0 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 0
        }
}
pcm.mic1 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 1
        }
}
pcm.mic2 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 2
        }
}
pcm.mic3 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 3
        }
}
pcm.mic4 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 4
        }
}
pcm.mic5 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 5
        }
}
pcm.mic6 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 6
        }
}
pcm.mic7 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 7
        }
}
pcm.mic8 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 8
        }
}
pcm.mic9 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 9
        }
}
pcm.mic10 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 10
        }
}
pcm.mic11 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 11
        }
}
pcm.mic12 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 12
        }
}
pcm.mic13 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 13
        }
}
pcm.mic14 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 14
        }
}
pcm.mic15 {
        type plug
        slave.pcm {
                type dsnoop
                ipc_key 12342
                slave ins
                bindings.0 15
        }
}

Edit:

Currently I'm using snd_pcm_open(&handle, deviceName, SND_PCM_STREAM_CAPTURE, 0); to capture audio from the default deviceName. If I was to declare all of my mics as separate devices, would I still be able to get their data in parallel?

  • Not necessarily a duplicate, but maybe it's helpful anyway? https://stackoverflow.com/questions/14725257/alsa-python-capturing-multiple-mono-audio-inputs – alagner May 19 '21 at 06:13
  • Do you want a way to do this in C++ ? Similar to this example from gtkIOStream : https://github.com/flatmax/gtkiostream/blob/master/applications/ALSACaptureSplitter.C – Matt Jun 23 '21 at 07:24

0 Answers0