Or is the issue that you want the destination app to be selected from your driver, rather than the other way round?
Hmm, there will only be 3 apps, the main app, and 2 other apps, App 1 and App 2. The main app is out of my control, it could be any number of apps out there. These apps accept "userland" core audio drivers such as what Jack is, but there a few that don't, and only accept kernel device drivers as audio devices. My goal is to provide a driver that will present itself to these apps, and then allow the user to choose an input device and an output device by means of a status bar menu (exactly like Soundflowerbed).
Quoted from Cycling 74 website: Note that Soundflower’s audio channels represent a global audio space. If more than one application is sending its output to the same channel, the audio will be mixed. If you want an application to send and receive audio through Soundflower, (for instance using Max/MSP to manipulate and return another application’s audio) you must send and receive the audio on different audio channels or a feedback loop will be created.
Basically, I am adding this feature. What I am making is a Soundflower that accepts multiple devices, a Soundflower on steroids ;) I had already looked into Jack and was forced to dismiss it, as nice as it was. Because if I use a kernel driver, it will be compatible with ALL apps, not just those that allow userland drivers.
So just like with Soundflower, I have an app that is basically two AudioThruEngines. The user selects an input device from the menu, and an output device. One AudioThruEngine sets its input device to the input device the user selected, and its output device to MyDevice. The other AudioThruEngine sets its output device to the output device the user selected and it's input device to MyDevice. Then the user would select MyDevice as the preferred device in the Main App, and using the menu is free to select the input/output devices at will. And the main app would receive audio and send audio. I am here, at this point.
Well, SoundFlower appears to applications as more than one audio device (2 channel and 16 channel in their case, but that's a detail). Would this approach not work for you? If you appear to applications as 2 separate audio devices that gives you 2 independent, um, pipelines let's call them. What more do you need?
Yes, having two separate devices, one for input and one for output works for all but 1 app, which requires the input/output to be the same device. This is what I'm struggling with and what led me to post here. If I could just fix this one thing... :) If there is but a way for one device to know how to route the sound.. It may be possible to use different streams like I mentioned in an earlier post, and just send audio on different channels... but I don't know. But I sure do appreciate the good help.
John |