New Audio Units In OS X 10.4
Posted By Quentin Carnicelli on May 19th, 2005
I’ve decided to do my part and document a little known corner of MacOS X 10.4: the newest built-in AudioUnits. Some folks on the osxaudio.com forums have picked up on them, but otherwise they seem to be wholly unknown and undocumented.
Here’s a quick rundown of the plugins that are new in OS X 10.4:
|Name||Type||Supported in AHP/NC|
*AULooper is only avaliable in the Developer Tools (at /Developer/Extras/CoreAudio).
I’m just going to cover the Effect and Generator units below, as I believe only Logic supports the Converter-type units currently.
Although the name sounded promising, AUFilter appears to just be a combination of Low Shelf/High Pass filter and a High Shelf/Low Pass filter. Although I might be missing something, to me it doesn’t seem all that useful. Any audio engineers out there that know some use for it?
AUPitch is a “Pitch And Speed” plugin (pictured right). Yes, it has 24 different parameters. No, I don’t understand what any of them are either. Well, except for the first one, “Pitch”, which is the only one you really need anyway. This effect is related to the AUTimePitch convertor, which can change the pitch and speed of audio independently of each other (but which Audio Hijack Pro currently does not support).
AUSampleDelay is similar to AUDelay, in that it buffers audio to add a delay. The difference between the two is that with AUDelay, you set the delay time as a number of seconds, while AUSampleDelay you set the delay time as a count of audio samples. Most people will want AUDelay, as AUSampleDelay is really only useful when doing sample-accurate audio work.
Now we start getting to the interesting ones. AUAudioFilePlayer does exactly what you think, it plays back audio files. I’m not sure the complete list of file formats that it supports, but I do know it supports the most common ones formats of MP3, AAC, Apple Lossless and AIFF.
This plugin is a great addition for both broadcaster and podcaster, as you can queue up intro music, outro music and sound clips in it, then just click to have them play. It also has “region” support, where you can define a small part of a larger file to play.
AUAudioFilePlayer is a Generator, so not all AudioUnit hosts will support it currently. See below for more about Generator plugins.
AUNetSend & AUNetReceive
AUNetSend and AUNetReceive operate in a pair, with NetSend transmitting audio to NetReceive. You can use them over the network, or just between two applications on the same computer. NetSend advertises itself with Bonjour (formerly known as Rendezvous), which NetReceive then looks for, so they are completely painless to set up.
Here on the left, is GarageBand running on my PowerMac, sending the the audio for a track out with AUNetSend. On the right, is my PowerBook receiving that audio with AUNetReceive:
AUNetSend can send the audio in a variety of formats: uncompressed, Apple Lossless, compressed AIFF, and AAC. If you have a fast network, or are sending audio between two applications, you’ll probably want to use Apple Lossless. Otherwise you can drop down to a high-bitate AAC to save on bandwidth (but with a CPU hit).
AUNetReceive (but not AuNetSend) is also a Generator, so not all AudioUnit hosts will support it currently. See below for more about Generator plugins.
AUAudioFilePlayer and AUNetReceive are actually a new type of AudioUnit, called a “Generator”. They are similar to VST Instruments and AudioUnit Instruments, in that instead of processing existing audio, they create new audio. Unlike Instruments however, they don’t require a MIDI source to drive them, and can exist stand-alone.
AudioUnit host applications like GarageBand and Audio Hijack Pro need to be extended to support Generators, so not much supports them yet. We’ve added support for them in the latest version of our applications: Audio Hijack Pro v2.5 and Nicecast v1.7.3. Over time I’m sure more developers will begin to add support as well.
If you are using Audio Hijack Pro or Nicecast, the fact that these AudioUnits are of a different type is transparent except for one detail. Generators will “ignore” any input audio (same as Instruments too). So for example, if you have a microphone as your input source, and then you put an AUAudioFilePlayer into the Effects patch, you’ll stop hearing the audio from the microphone.
This however is just a mixing problem, for which there are multiple solutions. The easiest is to use reduce the ‘Dry/Wet Mix’ setting from ‘100% Wet’ down to ‘50% Wet/50% Dry’, so the Source audio and the Generator audio will be mixed together equally. This works fine as long as you don’t have any other effects in the patch.
If you have other effects in the patch, changing the ‘Dry/Wet Mix’ will also affect them. The solution in this case, is to force the audio to be routed in parallel around the Generator. For example, you can put a 4FX “PassThru” effect below the AUAudioFilePlayer, which will get the Source audio past it and into the output (see picture).
When AudioUnits were first released with much fanfare, Apple supplied a couple of simple effects and a rather unpretty equalizer. Not much for all the hype. AudioUnits are maturing now, with things like “Generator” units and Cocoa-based user interfaces. The original promise of a powerful new audio platform is finally being realized.