On Tuesday 18 November 2008 11:45:51 Jens M Andreasen wrote:
> When I connect to hw:0,0 the first application will grab  hw:0,0,0 the
> next application will grab hw:0,0,1 and the third application will grab
> hw:0,0,2 ("mic", "front mic" and "line in" assuming this is the order
> they are selected in the mixer app)

My mental model of this is that each subdevice represents a separate (stereo) 
ADC.  (BTW The ordering of hw0,0,[0,1,2] may be independent of the order of 
those controls in the mixer app)

> How do I do to make jackd understand that it should open all three of
> them instead of only one?

As long as they all run from the same clock, you can create a 6 
channel 'device' in your .asoundrc

Two examples follow. 
The first is parameterised on card/dev/subdev
Eg  ttable4:1,2,3  will use card1, device2, link subdevices 3 and 4 into a 4 
channel stream.

The second is 16 channel with only card as a parameter. Always uses device0, 
subdevices 0..7 (You can cut this one down to make your 6 channel device)

use it like:  jackd -d alsa -C ttable16

Sorry I don't know how to make it less verbose, or how to make the number of 
channels parameterisable.

regards

--
Eliot Blennerhassett
http://www.audioscience.com


# This creates a 4 channel interleaved pcm stream based on
# the multi device. JACK will work with this one.

pcm.ttable4 {
        @args [ CARD DEV SUBDEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_PCM_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.device
                        }
                }
        }
        @args.SUBDEV {
                type integer
                default 0
        }
        type route;
        hint {
                show {
                        @func refer
                        name defaults.namehint.basic
                }
                description "4 channel multi route"
        }
        slave.pcm {
                type multi;
                slaves.a.pcm {
                        type hw
                        card $CARD
                        device $DEV
                        subdevice $SUBDEV
                        #mmap_emulation true
                }
                slaves.a.channels 2;
                slaves.b.pcm {
                        type hw
                        card $CARD
                        device $DEV
                        subdevice { @func iadd integers [ $SUBDEV 1 ] }
                        #mmap_emulation true
                }
                slaves.b.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;
        }
        ttable.0.0 1;
        ttable.1.1 1;
        ttable.2.2 1;
        ttable.3.3 1;
}
# see above.
ctl.ttable4 {
        @args [ CARD DEV SUBDEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_PCM_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.device
                        }
                }
        }
        @args.SUBDEV {
                type integer
                default 0
        }
        type hw;
        card $CARD;
}


# This creates a 16 channel interleaved pcm stream based on
# the multi device. JACK will work with this one.
pcm.ttable16 {
        @args [ CARD ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.card
                        }
                }
        }
       hint {
                show {
                        @func refer
                        name defaults.namehint.basic
                }
                description "16 channel multi route"
        }

        type route;
        slave.pcm {
                type multi;
                slaves.a.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 0
                }
                slaves.a.channels 2;
                slaves.b.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 1
                }
                slaves.b.channels 2;
                slaves.c.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 2
                }
                slaves.c.channels 2;
                slaves.d.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 3
                }
                slaves.d.channels 2;
                slaves.e.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 4
                }
                slaves.e.channels 2;
                slaves.f.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 5
                }
                slaves.f.channels 2;
                slaves.g.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 6
                }
                slaves.g.channels 2;
                slaves.h.pcm {
                        type hw
                        card $CARD
                        device 0
                        subdevice 7
                }
                slaves.h.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;
                bindings.8.slave e;
                bindings.8.channel 0;
                bindings.9.slave e;
                bindings.9.channel 1;
                bindings.10.slave f;
                bindings.10.channel 0;
                bindings.11.slave f;
                bindings.11.channel 1;
                bindings.12.slave g;
                bindings.12.channel 0;
                bindings.13.slave g;
                bindings.13.channel 1;
                bindings.14.slave h;
                bindings.14.channel 0;
                bindings.15.slave h;
                bindings.15.channel 1;
        }
        ttable.0.0 1;
        ttable.1.1 1;
        ttable.2.2 1;
        ttable.3.3 1;
        ttable.4.4 1;
        ttable.5.5 1;
        ttable.6.6 1;
        ttable.7.7 1;
        ttable.8.8 1;
        ttable.9.9 1;
        ttable.10.10 1;
        ttable.11.11 1;
        ttable.12.12 1;
        ttable.13.13 1;
        ttable.14.14 1;
        ttable.15.15 1;
}
# see above.
ctl.ttable16 {
        @args [ CARD ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.card
                        }
                }
        }
        type hw;
        card $CARD;
}



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to