pcm.!default plug:both ctl.!default { type hw card "Intel" } pcm.both { type route # The "route" plugin routes channels from its input card to its output. slave { # Slave is the input card. # The virtual input card has 4 channels. Yes, this is circumstantial and # also must be specified explicitly. channels 4 pcm { # Unnamed definition of the input card. # The "multi" plugin merges several cards into one. This is necessary, # because the "route" plugin can only handle one card. type multi slaves { # Definition of the child cards. a { # Definition of child card "a". pcm { # The "hw" plugin communicates directly with the ALSA kernel # driver. type hw card "Generic" # Card name as identified by alsa. See output of "aplay -l". device 3 # Card device as identified by alsa. See output of "aplay -l". channels 2 } channels 2 } b { pcm { type hw card "Intel" device 0 channels 2 } channels 2 } } # Definition of the card's channels. bindings { # Channel 0... 0 { # ... bound to child card "a"'s... slave a # ... channel 0. channel 0 } 1 { slave a channel 1 } 2 { slave b channel 0 } 3 { slave b channel 1 } } } } # Definition of transfer table for the card's output. ttable { # Channel 0... 0 { # ... bound to child card's channel 0 at full volume... 0 1.0 # ... AND child child card's channel 1 at full volume. 1 1.0 } 1 { 2 1.0 3 1.0 } } } # This defines the controls for the card "both", which is what tools such as # alsamixer refer to. ctl.both { type hw card "Generic" }