I would like to implement OSS emulation input multiplexing on CentOS4.3 with an Ensoniq AudioPCI ENS1371.

It seems there is a default /etc/alsa/alsa.conf file that already has stuff in it like "dsnoop" that would indicate that maybe this is even already implemented. But I tried running two OSS apps simultaneously and they exclude each other, which kind of indicates that there is no input multiplexing, at least not for OSS apps.

However, I can't understand the alsa.conf file and can't find much in the way of documentation for it. Certainly, "man alsa.conf" doesn't offer any possibiliites and the docs on the website are for a much simpler config file. The example for input multiplexing http://alsa.opensrc.org/AlsaSharing <http://alsa.opensrc.org/AlsaSharing> didn't seem to work for me either. It worked with the examples shown but not with Darkice and Real Producer which are the OSS applications I am trying to run at the same time.

It would be helpful if someone could please explain what what words like @funcs, @hooks and @args mean. Google doesn't really help here since it ignores the @ even when the search is in quotes.

Is there any more detailed documentation to explain alsa.conf files such as the one from Centos4.3 shown below?

#
#  ALSA library configuration file
#

# pre-load the configuration files

@hooks [
   {
       func load
       files [
           "/etc/asound.conf"
           "~/.asoundrc"
       ]
       errors false
   }
]

# load card-specific configuration files (on request)

[EMAIL PROTECTED] [
   {
       func load
       files [
           {
               @func concat
               strings [
                   { @func datadir }
                   "/cards/aliases.conf"
               ]
           }
       ]
   }
   {
       func load_for_all_cards
       files [
           {
               @func concat
               strings [
                   { @func datadir }
                   "/cards/"
                   { @func private_string }
                   ".conf"
               ]
           }
       ]
       errors false
   }
]

# defaults

defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.front.card defaults.pcm.card
defaults.pcm.front.device defaults.pcm.device
defaults.pcm.rear.card defaults.pcm.card
defaults.pcm.rear.device defaults.pcm.device
defaults.pcm.center_lfe.card defaults.pcm.card
defaults.pcm.center_lfe.device defaults.pcm.device
defaults.pcm.side.card defaults.pcm.card
defaults.pcm.side.device defaults.pcm.device
defaults.pcm.surround40.card defaults.pcm.card
defaults.pcm.surround40.device defaults.pcm.device
defaults.pcm.surround41.card defaults.pcm.card
defaults.pcm.surround41.device defaults.pcm.device
defaults.pcm.surround50.card defaults.pcm.card
defaults.pcm.surround50.device defaults.pcm.device
defaults.pcm.surround51.card defaults.pcm.card
defaults.pcm.surround51.device defaults.pcm.device
defaults.pcm.surround71.card defaults.pcm.card
defaults.pcm.surround71.device defaults.pcm.device
defaults.pcm.iec958.card defaults.pcm.card
defaults.pcm.iec958.device defaults.pcm.device
defaults.pcm.modem.card defaults.pcm.card
defaults.pcm.modem.device defaults.pcm.device
defaults.rawmidi.card 0
defaults.rawmidi.device 0
defaults.rawmidi.subdevice -1
defaults.hwdep.card 0
defaults.hwdep.device 0
defaults.timer.class 2
defaults.timer.sclass 0
defaults.timer.card 0
defaults.timer.device 0
defaults.timer.subdevice 0

#
#  PCM interface
#

pcm.hw {
   @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 {
           @func refer
           name defaults.pcm.subdevice
       }
} type hw
   card $CARD
   device $DEV
   subdevice $SUBDEV
}

pcm.plughw {
   @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 {
           @func refer
           name defaults.pcm.subdevice
       }
} type plug
   slave.pcm {
       type hw
       card $CARD
       device $DEV
       subdevice $SUBDEV
   }
}

pcm.plug {
   @args [ SLAVE ]
   @args.SLAVE {
       type string
   }
   type plug
   slave.pcm $SLAVE
}

pcm.dmix {
   @args [ SLAVE FORMAT RATE ]
   @args.SLAVE {
       type string
       default "hw:0,0"
   }
   @args.FORMAT {
       type string
       default S16_LE
   }
   @args.RATE {
       type integer
       default 48000
   }
   type dmix
   ipc_key 5678293
   ipc_key_add_uid yes
   slave {
       pcm $SLAVE
       format $FORMAT
       rate $RATE
   }
}

pcm.dsnoop {
   @args [ SLAVE FORMAT RATE ]
   @args.SLAVE {
       type string
       default "hw:0,0"
   }
   @args.FORMAT {
       type string
       default S16_LE
   }
   @args.RATE {
       type integer
       default 48000
   }
   type dsnoop
   ipc_key 5778293
   ipc_key_add_uid yes
   slave {
       pcm $SLAVE
       format $FORMAT
       rate $RATE
   }
}

pcm.shm {
   @args [ SOCKET PCM ]
   @args.SOCKET {
       type string
   }
   @args.PCM {
       type string
   }
   type shm
   server $SOCKET
   pcm $PCM
}

pcm.tee {
   @args [ SLAVE FILE FORMAT ]
   @args.SLAVE {
       type string
   }
   @args.FILE {
       type string
   }
   @args.FORMAT {
       type string
       default raw
   }
   type file
   slave.pcm $SLAVE
   file $FILE
   format $FORMAT
}

pcm.file {
   @args [ FILE FORMAT ]
   @args.FILE {
       type string
   }
   @args.FORMAT {
       type string
       default raw
   }
   type file
   slave.pcm null
   file $FILE
   format $FORMAT
}

pcm.null {
   type null
}

pcm.default {
   type plug
   slave.pcm {
       type hw
       card {
           @func getenv
           vars [
               ALSA_PCM_CARD
               ALSA_CARD
           ]
           default {
               @func refer
               name defaults.pcm.card
           }
       }
       device {
           @func igetenv
           vars [
               ALSA_PCM_DEVICE
           ]
           default {
               @func refer
               name defaults.pcm.device
           }
       }
       subdevice {
           @func refer
           name defaults.pcm.subdevice
       }
   }
}

# redirect to load-on-demand extended pcm definitions
pcm.cards cards.pcm
# some links for easy use
pcm.front cards.pcm.front
pcm.rear cards.pcm.rear
pcm.center_lfe cards.pcm.center_lfe
pcm.side cards.pcm.side
pcm.surround40 cards.pcm.surround40
pcm.surround41 cards.pcm.surround41
pcm.surround50 cards.pcm.surround50
pcm.surround51 cards.pcm.surround51
pcm.surround71 cards.pcm.surround71
pcm.iec958 cards.pcm.iec958
pcm.spdif cards.pcm.iec958
pcm.modem cards.pcm.modem

#
#  Control interface
#
ctl.hw {
   @args[ CARD ]
   @args.CARD {
       type string
       default {
           @func getenv
           vars [
               ALSA_CTL_CARD
               ALSA_CARD
           ]
           default {
               @func refer
               name defaults.ctl.card
           }
       }
   }
   type hw
   card $CARD
}

ctl.shm {
   @args [ SOCKET CTL ]
   @args.SOCKET {
       type string
   }
   @args.CTL {
       type string
   }
   type shm
   server $SOCKET
   ctl $CTL
}

ctl.default {
   type hw
   card {
       @func getenv
       vars [
           ALSA_CTL_CARD
           ALSA_CARD
       ]
       default {
           @func refer
           name defaults.ctl.card
       }
   }
}

#
#  RawMidi interface
#

rawmidi.hw {
   @args [ CARD DEV SUBDEV ]
   @args.CARD {
       type string
       default {
           @func getenv
           vars [
               ALSA_RAWMIDI_CARD
               ALSA_CARD
           ]
           default {
               @func refer
               name defaults.rawmidi.card
           }
       }
   }
   @args.DEV {
       type integer
       default {
           @func igetenv
           vars [
               ALSA_RAWMIDI_DEVICE
           ]
           default {
               @func refer
               name defaults.rawmidi.device
           }
       }
   }
   @args.SUBDEV {
       type integer
       default -1
   }
   type hw
   card $CARD
   device $DEV
   subdevice $SUBDEV
}

rawmidi.default {
   type hw
   card {
       @func getenv
       vars [
           ALSA_RAWMIDI_CARD
           ALSA_CARD
       ]
       default {
           @func refer
           name defaults.rawmidi.card
       }
   }
   device {
       @func igetenv
       vars [
           ALSA_RAWMIDI_DEVICE
       ]
       default {
           @func refer
           name defaults.rawmidi.device
       }
   }
}

rawmidi.virtual {
   @args [ MERGE ]
   @args.MERGE {
       type string
       default 1
   }
   type virtual
   merge $MERGE
}

#
#  Sequencer interface
#

seq.default {
   type hw
}

seq.hw {
   type hw
}

#
#  HwDep interface
#

hwdep.hw {
   @args [ CARD DEV ]
   @args.CARD {
       type string
       default {
           @func getenv
           vars [
               ALSA_HWDEP_CARD
               ALSA_CARD
           ]
           default {
               @func refer
               name defaults.hwdep.card
           }
       }
   }
   @args.DEV {
       type integer
       default {
           @func igetenv
           vars [
               ALSA_HWDEP_DEVICE
           ]
           default {
               @func refer
               name defaults.hwdep.device
           }
       }
   }
   type hw
   card $CARD
   device $DEV
}

hwdep.default {
   type hw
   card {
       @func getenv
       vars [
           ALSA_HWDEP_CARD
           ALSA_CARD
       ]
       default {
           @func refer
           name defaults.hwdep.card
       }
   }
   device {
       @func igetenv
       vars [
           ALSA_HWDEP_DEVICE
       ]
       default {
           @func refer
           name defaults.hwdep.device
       }
   }
}

#
#  Timer interface
#

timer_query.hw {
   type hw
}

timer_query.default {
   type hw
}

timer.hw {
   @args [ CLASS SCLASS CARD DEV SUBDEV ]
   @args.CLASS {
       type integer
       default {
           @func refer
           name defaults.timer.class
       }
   }
   @args.SCLASS {
       type integer
       default {
           @func refer
           name defaults.timer.sclass
       }
   }
   @args.CARD {
       type string
       default {
           @func refer
           name defaults.timer.card
       }
   }
   @args.DEV {
       type integer
       default {
           @func refer
           name defaults.timer.device
       }
   }
   @args.SUBDEV {
       type integer
       default {
           @func refer
           name defaults.timer.subdevice
       }
   }
   type hw
   class $CLASS
   sclass $SCLASS
   card $CARD
   device $DEV
   subdevice $SUBDEV
}

timer.default {
   type hw
   class {
       @func refer
       name defaults.timer.class
   }
   sclass {
       @func refer
       name defaults.timer.sclass
   }
   card {
       @func refer
       name defaults.timer.card
   }
   device {
       @func refer
       name defaults.timer.device
   }
   subdevice {
       @func refer
       name defaults.timer.subdevice
   }
}


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Alsa-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to