David Merrill wrote:
yes, I've heard that alsa has the ability to create a single,
"virtual > sound card" from multiple individual cards, but so far I haven't been
able to make this work - I'm interested though, to hear from anyone who has done it. also heard a rumor that new versions of jack may be able to connect to multiple cards at the same time - again, I don't have specific info, but am curious to hear if anyone has done it.
David,
In my audiopint setup, I'm using 4 USB iMics in a cheapo USB 1.1 hub. I use all 4 stero inputs and the one single stereo output of the first iMic. I haven't confirmed it, but I'm confident that fully duplexed stereo on all 4 devices would go over the theoretical 1.1 bandwidth (my setup does not).
I multiplex the 4 cards into a single virtual card using the attached asoundrc (which should be named as ~/.asoundrc).
I am successfully using this 8-in-2-out virtual card with jackd 0.103.0 (realtime) and pd 0.40-2 (realtime). Jackd > 0.102.20 is required to pick up MMAP_COMPLEX, which allows memory mapping multiple multiplexed cards (??). My jackd usage is:
jackd --realtime -d alsa -C capture8 -P iMic1 -p64 -n2
and then I make sure I start pd with -jack -inchannels 8 -outchannels 2 (and other less relevant params). I'm pretty sure the clocks aren't exactly synchronized (I would appreciate confirmation or refutation), but it hasn't really caused me any pain yet, even though I should likely back -p64 down to -p128.
I'm pretty sure I had limited success getting pd to work in alsa mode with the given .asoundrc...but to be honest, my focus was on jack first.
-jason http://noisybox.net
pcm.iMic1 { type hw card 0 } ctl.iMic1 { type hw; card 0; }
pcm.iMic2 { type hw card 1 }
pcm.iMic3 { type hw card 2 }
pcm.iMic4 { type hw card 3 }
pcm.capture8 { type multi; slaves.a.pcm hw:0 slaves.a.channels 2; slaves.b.pcm hw:1 slaves.b.channels 2; slaves.c.pcm hw:2 slaves.c.channels 2; slaves.d.pcm hw:3 slaves.d.channels 2;
bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1;
bindings.4.slave c; bindings.4.channel 0; bindings.5.slave c; bindings.5.channel 1;
bindings.6.slave d; bindings.6.channel 0; bindings.7.slave d; bindings.7.channel 1;
}
ctl.capture8 { type hw; card 0; }
thanks Jason - this sounds promising, and I'll give it a try on my system. -Dave
On 9/18/07, Jason Plumb jason@noisybox.net wrote:
David Merrill wrote:
yes, I've heard that alsa has the ability to create a single,
"virtual > sound card" from multiple individual cards, but so far I haven't been
able to make this work - I'm interested though, to hear from anyone who has done it. also heard a rumor that new versions of jack may be able to connect to multiple cards at the same time - again, I don't have specific info, but am curious to hear if anyone has done it.
David,
In my audiopint setup, I'm using 4 USB iMics in a cheapo USB 1.1 hub. I use all 4 stero inputs and the one single stereo output of the first iMic. I haven't confirmed it, but I'm confident that fully duplexed stereo on all 4 devices would go over the theoretical 1.1 bandwidth (my setup does not).
I multiplex the 4 cards into a single virtual card using the attached asoundrc (which should be named as ~/.asoundrc).
I am successfully using this 8-in-2-out virtual card with jackd 0.103.0 (realtime) and pd 0.40-2 (realtime). Jackd > 0.102.20 is required to pick up MMAP_COMPLEX, which allows memory mapping multiple multiplexed cards (??). My jackd usage is:
jackd --realtime -d alsa -C capture8 -P iMic1 -p64 -n2
and then I make sure I start pd with -jack -inchannels 8 -outchannels 2 (and other less relevant params). I'm pretty sure the clocks aren't exactly synchronized (I would appreciate confirmation or refutation), but it hasn't really caused me any pain yet, even though I should likely back -p64 down to -p128.
I'm pretty sure I had limited success getting pd to work in alsa mode with the given .asoundrc...but to be honest, my focus was on jack first.
-jason http://noisybox.net
pcm.iMic1 { type hw card 0 } ctl.iMic1 { type hw; card 0; }
pcm.iMic2 { type hw card 1 }
pcm.iMic3 { type hw card 2 }
pcm.iMic4 { type hw card 3 }
pcm.capture8 { type multi; slaves.a.pcm hw:0 slaves.a.channels 2; slaves.b.pcm hw:1 slaves.b.channels 2; slaves.c.pcm hw:2 slaves.c.channels 2; slaves.d.pcm hw:3 slaves.d.channels 2;
bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1; bindings.4.slave c; bindings.4.channel 0; bindings.5.slave c; bindings.5.channel 1; bindings.6.slave d; bindings.6.channel 0; bindings.7.slave d; bindings.7.channel 1;
}
ctl.capture8 { type hw; card 0; }
PD-dev mailing list PD-dev@iem.at http://lists.puredata.info/listinfo/pd-dev