Date: Tue, 27 Dec 2005 09:40:11 -0800
From: Jeff Moore <email@hidden>
Subject: Re: Writing a private device driver
To: CoreAudio API <email@hidden>
Message-ID: <email@hidden>
Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed
On Dec 26, 2005, at 10:12 AM, Jeremy Bernstein wrote:
Hello coreaudio-api -
I am trying to adapt the Phantom Audio Device driver to a specific
project. I am admittedly a newbie in the CoreAudio realm, although
I've been working with the QuickTime API for several years.
The first thing you should do is to switch over to the newer
AudioReflectorDriver sample in our recent SDK. It is a very updated
version of the PhantomAudioDriver, including new blit routines.
Ideally, I would like to be able to instantiate a variable number
of private, independent audio "devices" to facilitate communication
between 2 parts of my software (I need to stream audio out of a
QuickTime movie and into a more general audio signal processing
environment). I am more or less clear about how the basic
functionality needs to be implemented, thanks to the example
project, but:
You really ought to look at the AudioContext APIs in QT7. They let
you create a means to patch into the QT data stream as you will. I
have heard of other developers doing this to implement what you
describe. Creating a device driver in the kernel to solve this is
like swatting a fly with a sledge hammer.
The AudioContext APIs are beyond the scope of this list. You will
need to pose your questions about them on the QT lists.
- I can't determine if it is possible to create a "private" audio
device driver: that is, I don't want users to be able to use these
audio devices. As far as I can tell, I _have_ to create a virtual
device driver in order to use SetMovieAudioContext() for what I
need to do, but I'd like this private mechanism to remain private.
There's no such thing as a private device driver. You cannot
implement such a thing using an IOAudio based driver.
- I can't determine if it is possible to load multiple instances of
a driver on the fly. That is, I would prefer to instantiate and
initialize 1 (x-channel) stream for each request, rather than
assigning a hard upper limit by extending the AudioEngines array,
or by setting IOAudioStreamNumChannels to some fixed value.
Ideally, I would like to reload my device driver and create a new
instance of it.
It is possible to do this, but it isn't easy. Basically, IOKit
drivers are instantiated when something they match appears on the
system. You'd need to find a way to cause the matching to happen
without using real hardware.
Alternately, you could create a private call to your driver that
tells it to instantiate more instances of itself.
Both topics are really beyond the scope of this list.
If any of this sounds interesting or possible, I'd love to know. If
any of it sounds completely impossible, but gets you thinking about
alternative solutions, I'd love to know that, too...
I think you are totally barking up the wrong tree on this. As I said,
the QT AudioContext APIs were created at least in part for your
purpose and you should look at that as the starting point of your
solution.
--
Jeff Moore
Core Audio
Apple