|
Technote 1124New Sound Input Driver FeaturesApple Worldwide Developer Technical Support |
CONTENTSBackground of the
Changes |
This Technote describes the visible features and changes of the new PCI sound input drivers introduced with Mac OS 8.1. This Note is directed at developers whose applications use sound input, and to a lesser extent sound output (playback). Developers who are creating sound input drivers should also scan through this Technote to see if these changes should be mirrored in their drivers. |
Background of the ChangesDevelopers have asked for faster, more flexible sound input drivers with more useful features. The new PCI sound input drivers are the first step towards addressing these requests. One request was for reduced latency between when the recording starts and when the application gets the first bit of recorded data. Another request was for an interrupt buffer that was an integer power of 2 so that algorithms such as fast Fourier transforms could work more efficiently. Users requested a simpler sound input model; existing drivers made it too hard to configure the Mac for simple audio tasks, such as listening to a CD or adjusting the computer's volume. Apple's support representatives frequently answered calls from users who were unable to listen to an audio CD. This problem is addressed by the new sound input drivers as well. The final change, the removal of the sound input driver's
interface (the
|
The ChangesLatency ReductionOne of the most common requests was for reduced interrupt latency in sound input and output (playback). This has been addressed by reducing the size of the hardware interrupt buffer from 1056 samples to 512 samples when virtual memory is off. When VM is on, the buffer size is 4096 samples, which is a reduction from its previous value of 4224 samples. The number 512 was chosen for two reasons. By reducing the size of the buffer by approximately 50%, interrupt latency was reduced by 50% as well. Now sound interrupts happen approximately every 11 milliseconds instead of every 22 milliseconds (for 44.1KHz sound). This allows recorded data to be given to the application with less latency and allows for sounds being played to start sooner. The second reason the buffer size was reduced to 512
samples is that 512 is a integer power of 2, which is
important to developers trying to do real time analysis of
the sound being recorded. The algorithms that are used to do
this type of analysis (i.e., fast Fourier transforms)
frequently require buffers that are an integer power of two.
By adjusting the sound driver's buffer size, the developer
no longer has to do any complicated buffering of data in
their interrupt callback routine. Use the Options Dialog RemovedThe
siOptionsDialog
interface, either through their own creation or the use of
QuickTime's SequenceGrabber dialog.
New Ways to Select an Input SourceDevelopers asked for a uniform
way to select sound input sources. This has been
accomplished with the Simpler Sound ModelAnother change which helps to simplify the sound model on the Macintosh is that separate volume controls for the headphones and internal speaker have been merged into one control. There is no longer support for setting the headphone volume independently of the internal speaker's volume (because users were often confused by which volume slider they needed to adjust to get the proper volume level), or for controlling the mute state of the internal speaker when headphones are plugged in. |
How to Gracefully Cope With These ChangesLatency ReductionDealing with the driver's input buffer change should not
present any problems. For the most part, applications won't
notice that anything has changed. The few applications that
do care about the interrupt buffer size should already be
calling Options Dialog RemovedThe removal of the There seems to be a lot of confusion on the point of how to properly configure the sound input driver. Keep these simple rules in mind when designing your application:
Under these simple rules, it is clear that relying on the user to set the sound input source through Monitors & Sound or the Sound control panel is the wrong thing to do: it breaks the first three rules. The correct way to configure the sound input driver is to present an interface of your own creation, or QuickTime's SequenceGrabber interface, to the user. The minimum required interface must allow the user to select the desired input source and playthrough state. Once the input source and playthrough state (sample rate, sample size, number of channels, etc.) is set, do not close the input driver, as there is no guarantee that when the driver is reopened that the driver will default to the settings the user instructed your program to make. If you must close the input driver, reset it to the chosen configuration when you reopen it. New Ways to Select an Input SourceTo make it easier for application writers to choose the correct input source the new PCI sound input drivers implement two new selectors that work with OSTypes for selecting the input source. These new selectors are:
The enum { kNoSource = FOUR_CHAR_CODE('none'), kCDSource = FOUR_CHAR_CODE('cd '), kExtMicSource = FOUR_CHAR_CODE('emic'), kRCAInSource = FOUR_CHAR_CODE('irca'), kTVFMTunerSource = FOUR_CHAR_CODE('tvfm'), kDAVInSource = FOUR_CHAR_CODE('idav'), kIntMicSource = FOUR_CHAR_CODE('imic'), kMediaBaySource = FOUR_CHAR_CODE('mbay'), kModemSource = FOUR_CHAR_CODE('modm'), kZoomVideoSource = FOUR_CHAR_CODE('zvpc') }; The For more information about how to use the You can always attempt to use these selectors without doing any Sound Manager/Sound Input Manager version checking beforehand. If an error is returned when you attempt to use these selectors, the sound input driver doesn't support these new selectors and you will have to have a fallback plan (like putting up a dialog for the user to select an input source) for setting the sound input source. Simpler Sound ModelThe removal of independent volume controls for the headphones and internal speaker was done to give users an interface more consistent with other audio hardware, such as home stereos. In this audio model, when headphones are plugged in, the main unit's speakers are disabled and the volume control now controls the headphone volume. It's a simple concept, like the one button mouse: with only one volume control you always know which one to use. Any API calls which affect the volume of the internal speaker also set the volume of the headphones and vice versa. There is no way to adjust the volumes independently; that feature has been removed. This also allows the sound model to remain consistent with Macintoshes that physically don't allow for independent volume control of the headphones and internal speakers or which physically disconnect the internal speaker when headphones are plugged in. |
Sample CodeHere is some sample code showing how to access the
Here is a sample illustrating a basic technique to create
your own sound input options dialog. First, get
the list of sound input source names and turn that list into a
menu (in this case a pop-up menu), insert that menu into a
dialog and then display the dialog. Once the dialog has been
dismissed, if the user did not cancel it, you use
|
Additional Notes & CommentsAs always, QuickTime exists to make dealing with audio
(either playing or recording) easier. If your application
only requires simple recording, you may wish to use QuickTime to
do that recording. QuickTime supplies a standard user
interface that can be accessed via one simple call,
|
SummaryThe changes to the PCI sound input drivers do not have to mean pain and suffering for you and your users if your application allows the user to configure the sound input driver from your application. However, if your application relies on other software to configure the sound input driver for you, now is the time to update your application to correctly handle all sound configuration itself. |
Downloadables
Thanks to Jim Reekes, Steven Swenson, and all the usual suspects.