Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Relevant replacement documents include:
AUPublic/Utility/AUBaseHelper.cpp
/* |
<codex> |
<abstract>AUBaseHelper.h</abstract> |
<\codex> |
*/ |
#include "AUBaseHelper.h" |
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) |
#include <AudioUnit/AudioUnitProperties.h> |
#else |
#include <AudioUnitProperties.h> |
#endif |
OSStatus GetFileRefPath (CFDictionaryRef parent, CFStringRef frKey, CFStringRef * fPath) |
{ |
static CFStringRef kFRString = CFSTR (kAUPresetExternalFileRefs); |
const void* frVal = CFDictionaryGetValue(parent, kFRString); |
if (!frVal) return kAudioUnitErr_InvalidPropertyValue; |
const void* frString = CFDictionaryGetValue ((CFDictionaryRef)frVal, frKey); |
if (!frString) return kAudioUnitErr_InvalidPropertyValue; |
if (fPath) |
*fPath = (CFStringRef)frString; |
return noErr; |
} |
// write valid samples check, with bool for zapping |
UInt32 FindInvalidSamples(Float32 *inSource, UInt32 inFramesToProcess, bool &outHasNonZero, bool zapInvalidSamples) |
{ |
float *sourceP = inSource; |
UInt32 badSamplesDetected = 0; |
for (UInt32 i=0; i < inFramesToProcess; i++) |
{ |
float input = *sourceP; |
if(input > 0) |
outHasNonZero = true; |
float absx = fabs(input); |
// a bad number! |
if (!(absx < 1e15)) |
{ |
if (!(absx == 0)) |
{ |
//printf("\tbad sample: %f\n", input); |
badSamplesDetected++; |
if (zapInvalidSamples) |
*sourceP = 0; |
} |
} |
sourceP++; |
} |
return badSamplesDetected; |
} |
CFMutableDictionaryRef CreateFileRefDict (CFStringRef fKey, CFStringRef fPath, CFMutableDictionaryRef fileRefDict) |
{ |
if (!fileRefDict) |
fileRefDict = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); |
CFDictionarySetValue (fileRefDict, fKey, fPath); |
return fileRefDict; |
} |
#if DEBUG |
//_____________________________________________________________________________ |
// |
void PrintAUParamEvent (AudioUnitParameterEvent& event, FILE* f) |
{ |
bool isRamp = event.eventType == kParameterEvent_Ramped; |
fprintf (f, "\tParamID=%ld,Scope=%ld,Element=%ld\n", (long)event.parameter, (long)event.scope, (long)event.element); |
fprintf (f, "\tEvent Type:%s,", (isRamp ? "ramp" : "immediate")); |
if (isRamp) |
fprintf (f, "start=%ld,dur=%ld,startValue=%f,endValue=%f\n", |
(long)event.eventValues.ramp.startBufferOffset, (long)event.eventValues.ramp.durationInFrames, |
event.eventValues.ramp.startValue, event.eventValues.ramp.endValue); |
else |
fprintf (f, "start=%ld,value=%f\n", |
(long)event.eventValues.immediate.bufferOffset, |
event.eventValues.immediate.value); |
fprintf (f, "- - - - - - - - - - - - - - - -\n"); |
} |
#endif |
Copyright © 2012 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2012-10-08