|
Q: How do I determine the which version of an Audio Unit I am using?A: Core Audio uses the Component Manager to make Audio Units available as a system-wide resource. After obtaining a valid instance of an Audio Unit, you can use the method This can be useful when an Audio Unit has two separate versions with different features; you would want to determine which version is installed before using the Audio Unit. The code below determines if a suitable version of Apple's 3Dmixer Audio Unit is installed on a users system. Because the different versions of the 3Dmixer behave differently, you would want to determine which version resides on the user's system. Listing 1: Getting the 3D Mixer Version.
#define kPreferredMixerVersion 0x20000
#define kMinimumMixerVersion 0x10300
long mixerVersion = kMinimumMixerVersion;
//The Version format is 0xMMMMmmbb
//The digits M/m/b are stored in BCD (Binary Coded Decimal) format
//where each digit has a range of 0 - 9 (normal binary digits have a range of 0 - 15)
if(Is3DMixerVersionValid(&mixerVersion)){
// yes, we can work with it. May want to examine the version number further if a
// specific feature is desired.
}
bool Is3DMixerVersionValid(long *versionNumber)
{
ComponentDescription mixerCD = { kAudioUnitType_Mixer, // type
kAudioUnitSubType_3DMixer, // subType
kAudioUnitManufacturer_Apple, // manufacturer
0, // flags
0 }; // flags mask
// initially false
bool versionValid = false;
long version = 0;
Component mixerC= FindNextComponent(0, &mixerCD);
require(NULL != mixerC, bail);
require(versionNumber != nil, bail);
version = GetComponentVersion((ComponentInstance)mixerC);
// if the returned version is less than 0x20000 (it may even be 0x10300
// which is really old!) it's not the version of the 3DMixer we want to use
// so we're not going to do anything and just return false
// if however the version is 0x20000 or greater, then it is the version
// of 3DMixer mixer we want to use, so we set outPreferred3DMixerExists to true
if (version >= *versionNumber){
versionValid = true;
*versionNumber = version; // validated this pointer on entry
}
bail:
return versionValid;
}
Note: For more information on Component's and ComponentDescriptions, please refer to the Component Manager Reference. Document Revision History
Posted: 2005-03-07 |
|