I can think of three options (maybe I'm missing something though):
1) Open all the separate device nodes and provide a stream to each one. This is more complex programatically but doable. See ossinfo source for how to get the node names.
2) Modify the driver. A problem here since this is the only closed source driver... 4Front may do this if you ask them, or maybe provide you with source under NDA. I know it allowed some other people to see/modify the source (e.g. summers 's post in the announcement forum).
3) Using vmix for software mixing.
vmix is a layer in OSS with several roles: software mixing (like dmix in ALSA), SRC conversion, and binding between output and input (for duplex and convenience purposes. Note that output and input don't have to be same device). It needs to be bound to a device node to work. Most drivers do this automatically, but some drivers for high end device do not (like lynxtwo). In these cases (or when the default is bad for some reason), the "vmixctl" utility can be used to attach vmix. See "vmixctl" manpage (via "man vmixctl" command), and here
. The proper command is probably something like: "vmixctl attach /dev/oss/lynxtwo/pcm0 /dev/oss/lynxtwo/pcmin0".
Using vmix will create fake software "engines" (i.e. outputs) under the specified output device (you can see them in 'ossinfo -v2' output) which can be used for mixing purposes (each outputting program occupies an output engine), but they're possibly of inferior quality to the soundcard's hw mixing. In any event, it is certain you want to avoid the SRC conversion (usually decent, but unnecessary here, so can only lead to quality loss). To be sure no SRC is done, either set "vmix0-src" to OFF in the mixer (via ossmix or ossxmix), or use SNDCTL_DSP_COOKEDMODE
or open the device in O_EXCL
mode (however, this overrides vmix mixing too).