| 
							- /*!
 - 	@file		AudioUnitSDK/AUPlugInDispatch.cpp
 - 	@copyright	© 2000-2021 Apple Inc. All rights reserved.
 - */
 - #include <AudioUnitSDK/AUBase.h>
 - #include <AudioUnitSDK/AUPlugInDispatch.h>
 - #include <AudioUnitSDK/AUUtility.h>
 - #include <AudioUnitSDK/ComponentBase.h>
 - 
 - #include <cmath>
 - #include <cstddef>
 - 
 - #define CATCH_EXCEPTIONS_IN_RENDER_METHODS TARGET_OS_OSX // NOLINT
 - #define HAVE_MUSICDEVICE_PREPARE_RELEASE TARGET_OS_OSX   // NOLINT
 - 
 - namespace ausdk {
 - 
 - // ------------------------------------------------------------------------------------------------
 - static auto AUInstance(void* self)
 - {
 - 	return reinterpret_cast<AUBase*>( // NOLINT reinterpret_cast
 - 		&(static_cast<AudioComponentPlugInInstance*>(self)->mInstanceStorage));
 - }
 - 
 - // ------------------------------------------------------------------------------------------------
 - class AUInstanceGuard {
 - public:
 - 	explicit AUInstanceGuard(void* self) : mGuard(AUInstance(self)->GetMutex()) {}
 - 
 - private:
 - 	const AUEntryGuard mGuard;
 - };
 - 
 - // ------------------------------------------------------------------------------------------------
 - static bool IsValidParameterValue(AudioUnitParameterValue value) { return std::isfinite(value); }
 - 
 - static bool AreValidParameterEvents(const AudioUnitParameterEvent* events, UInt32 numEvents)
 - {
 - 	if (events == nullptr) {
 - 		return true;
 - 	}
 - 
 - 	for (UInt32 i = 0; i < numEvents; ++i) {
 - 		const auto& event = events[i]; // NOLINT
 - 		switch (event.eventType) {
 - 		case kParameterEvent_Immediate: {
 - 			if (!IsValidParameterValue(event.eventValues.immediate.value)) { // NOLINT
 - 				return false;
 - 			}
 - 			break;
 - 		}
 - 
 - 		case kParameterEvent_Ramped: {
 - 			if (!IsValidParameterValue(event.eventValues.ramp.startValue) || // NOLINT
 - 				!IsValidParameterValue(event.eventValues.ramp.endValue)) {   // NOLINT
 - 				return false;
 - 			}
 - 			break;
 - 		}
 - 
 - 		default:
 - 			break;
 - 		}
 - 	}
 - 
 - 	return true;
 - }
 - 
 - // ------------------------------------------------------------------------------------------------
 - static OSStatus AUMethodInitialize(void* self)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->DoInitialize();
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodUninitialize(void* self)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		AUInstance(self)->DoCleanup();
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodGetPropertyInfo(void* self, AudioUnitPropertyID prop, AudioUnitScope scope,
 - 	AudioUnitElement elem, UInt32* outDataSize, Boolean* outWritable)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		UInt32 dataSize = 0; // 13517289 GetPropetyInfo was returning an uninitialized value when
 - 							 // there is an error. This is a problem for auval.
 - 		bool writable = false;
 - 
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->DispatchGetPropertyInfo(prop, scope, elem, dataSize, writable);
 - 		if (outDataSize != nullptr) {
 - 			*outDataSize = dataSize;
 - 		}
 - 		if (outWritable != nullptr) {
 - 			*outWritable = static_cast<Boolean>(writable);
 - 		}
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodGetProperty(void* self, AudioUnitPropertyID inID, AudioUnitScope inScope,
 - 	AudioUnitElement inElement, void* outData, UInt32* ioDataSize)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		bool writable = false;
 - 
 - 		const AUInstanceGuard guard(self);
 - 		if (ioDataSize == nullptr) {
 - 			AUSDK_LogError("AudioUnitGetProperty: null size pointer");
 - 			return kAudio_ParamError;
 - 		}
 - 		if (outData == nullptr) {
 - 			UInt32 dataSize = 0;
 - 
 - 			result = AUInstance(self)->DispatchGetPropertyInfo(
 - 				inID, inScope, inElement, dataSize, writable);
 - 			*ioDataSize = dataSize;
 - 			return result;
 - 		}
 - 
 - 		const auto clientBufferSize = *ioDataSize;
 - 		if (clientBufferSize == 0) {
 - 			AUSDK_LogError("AudioUnitGetProperty: *ioDataSize == 0 on entry");
 - 			return kAudio_ParamError;
 - 		}
 - 
 - 		UInt32 actualPropertySize = 0;
 - 		result = AUInstance(self)->DispatchGetPropertyInfo(
 - 			inID, inScope, inElement, actualPropertySize, writable);
 - 		if (result != noErr) {
 - 			return result;
 - 		}
 - 
 - 		std::vector<std::byte> tempBuffer;
 - 		void* destBuffer = nullptr;
 - 		if (clientBufferSize < actualPropertySize) {
 - 			tempBuffer.resize(actualPropertySize);
 - 			destBuffer = tempBuffer.data();
 - 		} else {
 - 			destBuffer = outData;
 - 		}
 - 
 - 		result = AUInstance(self)->DispatchGetProperty(inID, inScope, inElement, destBuffer);
 - 
 - 		if (result == noErr) {
 - 			if (clientBufferSize < actualPropertySize && !tempBuffer.empty()) {
 - 				memcpy(outData, tempBuffer.data(), clientBufferSize);
 - 				// ioDataSize remains correct, the number of bytes we wrote
 - 			} else {
 - 				*ioDataSize = actualPropertySize;
 - 			}
 - 		} else {
 - 			*ioDataSize = 0;
 - 		}
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodSetProperty(void* self, AudioUnitPropertyID inID, AudioUnitScope inScope,
 - 	AudioUnitElement inElement, const void* inData, UInt32 inDataSize)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		if ((inData != nullptr) && (inDataSize != 0u)) {
 - 			result =
 - 				AUInstance(self)->DispatchSetProperty(inID, inScope, inElement, inData, inDataSize);
 - 		} else {
 - 			if (inData == nullptr && inDataSize == 0) {
 - 				result = AUInstance(self)->DispatchRemovePropertyValue(inID, inScope, inElement);
 - 			} else {
 - 				if (inData == nullptr) {
 - 					AUSDK_LogError("AudioUnitSetProperty: inData == NULL");
 - 					return kAudio_ParamError;
 - 				}
 - 
 - 				if (inDataSize == 0) {
 - 					AUSDK_LogError("AudioUnitSetProperty: inDataSize == 0");
 - 					return kAudio_ParamError;
 - 				}
 - 			}
 - 		}
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodAddPropertyListener(
 - 	void* self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc, void* userData)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->AddPropertyListener(prop, proc, userData);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodRemovePropertyListener(
 - 	void* self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->RemovePropertyListener(prop, proc, nullptr, false);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodRemovePropertyListenerWithUserData(
 - 	void* self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc, void* userData)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->RemovePropertyListener(prop, proc, userData, true);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodAddRenderNotify(void* self, AURenderCallback proc, void* userData)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->SetRenderNotification(proc, userData);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodRemoveRenderNotify(void* self, AURenderCallback proc, void* userData)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->RemoveRenderNotification(proc, userData);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodGetParameter(void* self, AudioUnitParameterID param, AudioUnitScope scope,
 - 	AudioUnitElement elem, AudioUnitParameterValue* value)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = (value == nullptr ? kAudio_ParamError
 - 								   : AUInstance(self)->GetParameter(param, scope, elem, *value));
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodSetParameter(void* self, AudioUnitParameterID param, AudioUnitScope scope,
 - 	AudioUnitElement elem, AudioUnitParameterValue value, UInt32 bufferOffset)
 - {
 - 	if (!IsValidParameterValue(value)) {
 - 		return kAudioUnitErr_InvalidParameterValue;
 - 	}
 - 
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a (potentially) realtime method; no lock
 - 		result = AUInstance(self)->SetParameter(param, scope, elem, value, bufferOffset);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodScheduleParameters(
 - 	void* self, const AudioUnitParameterEvent* events, UInt32 numEvents)
 - {
 - 	if (!AreValidParameterEvents(events, numEvents)) {
 - 		return kAudioUnitErr_InvalidParameterValue;
 - 	}
 - 
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a (potentially) realtime method; no lock
 - 		result = AUInstance(self)->ScheduleParameter(events, numEvents);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodRender(void* self, AudioUnitRenderActionFlags* ioActionFlags,
 - 	const AudioTimeStamp* inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames,
 - 	AudioBufferList* ioData)
 - {
 - 	OSStatus result = noErr;
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	try {
 - #endif
 - 		// this is a processing method; no lock
 - 		AudioUnitRenderActionFlags tempFlags{};
 - 
 - 		if (inTimeStamp == nullptr || ioData == nullptr) {
 - 			result = kAudio_ParamError;
 - 		} else {
 - 			if (ioActionFlags == nullptr) {
 - 				tempFlags = 0;
 - 				ioActionFlags = &tempFlags;
 - 			}
 - 			result = AUInstance(self)->DoRender(
 - 				*ioActionFlags, *inTimeStamp, inOutputBusNumber, inNumberFrames, *ioData);
 - 		}
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	}
 - 	AUSDK_Catch(result)
 - #endif
 - 
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodComplexRender(void* self, AudioUnitRenderActionFlags* ioActionFlags,
 - 	const AudioTimeStamp* inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberOfPackets,
 - 	UInt32* outNumberOfPackets, AudioStreamPacketDescription* outPacketDescriptions,
 - 	AudioBufferList* ioData, void* outMetadata, UInt32* outMetadataByteSize)
 - {
 - 	OSStatus result = noErr;
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	try {
 - #endif
 - 		// this is a processing method; no lock
 - 		AudioUnitRenderActionFlags tempFlags{};
 - 
 - 		if (inTimeStamp == nullptr || ioData == nullptr) {
 - 			result = kAudio_ParamError;
 - 		} else {
 - 			if (ioActionFlags == nullptr) {
 - 				tempFlags = 0;
 - 				ioActionFlags = &tempFlags;
 - 			}
 - 			result = AUInstance(self)->ComplexRender(*ioActionFlags, *inTimeStamp,
 - 				inOutputBusNumber, inNumberOfPackets, outNumberOfPackets, outPacketDescriptions,
 - 				*ioData, outMetadata, outMetadataByteSize);
 - 		}
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	}
 - 	AUSDK_Catch(result)
 - #endif
 - 
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodReset(void* self, AudioUnitScope scope, AudioUnitElement elem)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->Reset(scope, elem);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodProcess(void* self, AudioUnitRenderActionFlags* ioActionFlags,
 - 	const AudioTimeStamp* inTimeStamp, UInt32 inNumberFrames, AudioBufferList* ioData)
 - {
 - 	OSStatus result = noErr;
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	try {
 - #endif
 - 		// this is a processing method; no lock
 - 		bool doParamCheck = true;
 - 
 - 		AudioUnitRenderActionFlags tempFlags{};
 - 
 - 		if (ioActionFlags == nullptr) {
 - 			tempFlags = 0;
 - 			ioActionFlags = &tempFlags;
 - 		} else {
 - 			if ((*ioActionFlags & kAudioUnitRenderAction_DoNotCheckRenderArgs) != 0u) {
 - 				doParamCheck = false;
 - 			}
 - 		}
 - 
 - 		if (doParamCheck && (inTimeStamp == nullptr || ioData == nullptr)) {
 - 			result = kAudio_ParamError;
 - 		} else {
 - 			result =
 - 				AUInstance(self)->DoProcess(*ioActionFlags, *inTimeStamp, inNumberFrames, *ioData);
 - 		}
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	}
 - 	AUSDK_Catch(result)
 - #endif
 - 
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodProcessMultiple(void* self, AudioUnitRenderActionFlags* ioActionFlags,
 - 	const AudioTimeStamp* inTimeStamp, UInt32 inNumberFrames, UInt32 inNumberInputBufferLists,
 - 	const AudioBufferList** inInputBufferLists, UInt32 inNumberOutputBufferLists,
 - 	AudioBufferList** ioOutputBufferLists)
 - {
 - 	OSStatus result = noErr;
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	try {
 - #endif
 - 		// this is a processing method; no lock
 - 		bool doParamCheck = true;
 - 
 - 		AudioUnitRenderActionFlags tempFlags{};
 - 
 - 		if (ioActionFlags == nullptr) {
 - 			tempFlags = 0;
 - 			ioActionFlags = &tempFlags;
 - 		} else {
 - 			if ((*ioActionFlags & kAudioUnitRenderAction_DoNotCheckRenderArgs) != 0u) {
 - 				doParamCheck = false;
 - 			}
 - 		}
 - 
 - 		if (doParamCheck && (inTimeStamp == nullptr || inInputBufferLists == nullptr ||
 - 								ioOutputBufferLists == nullptr)) {
 - 			result = kAudio_ParamError;
 - 		} else {
 - 			result = AUInstance(self)->DoProcessMultiple(*ioActionFlags, *inTimeStamp,
 - 				inNumberFrames, inNumberInputBufferLists, inInputBufferLists,
 - 				inNumberOutputBufferLists, ioOutputBufferLists);
 - 		}
 - 
 - #if CATCH_EXCEPTIONS_IN_RENDER_METHODS
 - 	}
 - 	AUSDK_Catch(result)
 - #endif
 - 
 - 	return result;
 - }
 - // ------------------------------------------------------------------------------------------------
 - 
 - static OSStatus AUMethodStart(void* self)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->Start();
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodStop(void* self)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		const AUInstanceGuard guard(self);
 - 		result = AUInstance(self)->Stop();
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - // ------------------------------------------------------------------------------------------------
 - 
 - // I don't know what I'm doing here; conflicts with the multiple inheritence in MusicDeviceBase.
 - static OSStatus AUMethodMIDIEvent(
 - 	void* self, UInt32 inStatus, UInt32 inData1, UInt32 inData2, UInt32 inOffsetSampleFrame)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		result = AUInstance(self)->MIDIEvent(inStatus, inData1, inData2, inOffsetSampleFrame);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodSysEx(void* self, const UInt8* inData, UInt32 inLength)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		result = AUInstance(self)->SysEx(inData, inLength);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - #if AUSDK_MIDI2_AVAILABLE
 - static OSStatus AUMethodMIDIEventList(
 - 	void* self, UInt32 inOffsetSampleFrame, const struct MIDIEventList* eventList)
 - {
 - 	if (eventList == nullptr) {
 - 		return kAudio_ParamError;
 - 	}
 - 
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 
 - 		// Note that a MIDIEventList is variably-sized and can be backed by less memory than
 - 		// required, so it is Undefined Behavior to form a reference to it; we must only use
 - 		// pointers.
 - 		result = AUInstance(self)->MIDIEventList(inOffsetSampleFrame, eventList);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - #endif
 - 
 - static OSStatus AUMethodStartNote(void* self, MusicDeviceInstrumentID inInstrument,
 - 	MusicDeviceGroupID inGroupID, NoteInstanceID* outNoteInstanceID, UInt32 inOffsetSampleFrame,
 - 	const MusicDeviceNoteParams* inParams)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		if (inParams == nullptr) {
 - 			result = kAudio_ParamError;
 - 		} else {
 - 			result = AUInstance(self)->StartNote(
 - 				inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, *inParams);
 - 		}
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodStopNote(void* self, MusicDeviceGroupID inGroupID,
 - 	NoteInstanceID inNoteInstanceID, UInt32 inOffsetSampleFrame)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		result = AUInstance(self)->StopNote(inGroupID, inNoteInstanceID, inOffsetSampleFrame);
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - #if HAVE_MUSICDEVICE_PREPARE_RELEASE
 - static OSStatus AUMethodPrepareInstrument(void* self, MusicDeviceInstrumentID inInstrument)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		result = AUInstance(self)->PrepareInstrument(inInstrument); // NOLINT static via instance
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - 
 - static OSStatus AUMethodReleaseInstrument(void* self, MusicDeviceInstrumentID inInstrument)
 - {
 - 	OSStatus result = noErr;
 - 	try {
 - 		// this is a potential render-time method; no lock
 - 		result = AUInstance(self)->ReleaseInstrument(inInstrument); // NOLINT static via instance
 - 	}
 - 	AUSDK_Catch(result)
 - 	return result;
 - }
 - #endif // HAVE_MUSICDEVICE_PREPARE_RELEASE
 - 
 - 
 - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 - #pragma mark -
 - #pragma mark Lookup Methods
 - 
 - AudioComponentMethod AUBaseLookup::Lookup(SInt16 selector)
 - {
 - 	switch (selector) {
 - 	case kAudioUnitInitializeSelect:
 - 		return (AudioComponentMethod)AUMethodInitialize; // NOLINT cast
 - 	case kAudioUnitUninitializeSelect:
 - 		return (AudioComponentMethod)AUMethodUninitialize; // NOLINT cast
 - 	case kAudioUnitGetPropertyInfoSelect:
 - 		return (AudioComponentMethod)AUMethodGetPropertyInfo; // NOLINT cast
 - 	case kAudioUnitGetPropertySelect:
 - 		return (AudioComponentMethod)AUMethodGetProperty; // NOLINT cast
 - 	case kAudioUnitSetPropertySelect:
 - 		return (AudioComponentMethod)AUMethodSetProperty; // NOLINT cast
 - 	case kAudioUnitAddPropertyListenerSelect:
 - 		return (AudioComponentMethod)AUMethodAddPropertyListener; // NOLINT cast
 - 	case kAudioUnitRemovePropertyListenerSelect:
 - 		return (AudioComponentMethod)AUMethodRemovePropertyListener; // NOLINT cast
 - 	case kAudioUnitRemovePropertyListenerWithUserDataSelect:
 - 		return (AudioComponentMethod)AUMethodRemovePropertyListenerWithUserData; // NOLINT cast
 - 	case kAudioUnitAddRenderNotifySelect:
 - 		return (AudioComponentMethod)AUMethodAddRenderNotify; // NOLINT cast
 - 	case kAudioUnitRemoveRenderNotifySelect:
 - 		return (AudioComponentMethod)AUMethodRemoveRenderNotify; // NOLINT cast
 - 	case kAudioUnitGetParameterSelect:
 - 		return (AudioComponentMethod)AUMethodGetParameter; // NOLINT cast
 - 	case kAudioUnitSetParameterSelect:
 - 		return (AudioComponentMethod)AUMethodSetParameter; // NOLINT cast
 - 	case kAudioUnitScheduleParametersSelect:
 - 		return (AudioComponentMethod)AUMethodScheduleParameters; // NOLINT cast
 - 	case kAudioUnitRenderSelect:
 - 		return (AudioComponentMethod)AUMethodRender; // NOLINT cast
 - 	case kAudioUnitResetSelect:
 - 		return (AudioComponentMethod)AUMethodReset; // NOLINT cast
 - 	default:
 - 		break;
 - 	}
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUOutputLookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	switch (selector) {
 - 	case kAudioOutputUnitStartSelect:
 - 		return (AudioComponentMethod)AUMethodStart; // NOLINT cast
 - 	case kAudioOutputUnitStopSelect:
 - 		return (AudioComponentMethod)AUMethodStop; // NOLINT cast
 - 	default:
 - 		break;
 - 	}
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUComplexOutputLookup::Lookup(SInt16 selector)
 - {
 - 	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	method = AUOutputLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	if (selector == kAudioUnitComplexRenderSelect) {
 - 		return (AudioComponentMethod)AUMethodComplexRender; // NOLINT cast
 - 	}
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUBaseProcessLookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	if (selector == kAudioUnitProcessSelect) {
 - 		return (AudioComponentMethod)AUMethodProcess; // NOLINT cast
 - 	}
 - 
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUBaseProcessMultipleLookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	if (selector == kAudioUnitProcessMultipleSelect) {
 - 		return (AudioComponentMethod)AUMethodProcessMultiple; // NOLINT cast
 - 	}
 - 
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUBaseProcessAndMultipleLookup::Lookup(SInt16 selector)
 - {
 - 	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	method = AUBaseProcessMultipleLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	method = AUBaseProcessLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	return nullptr;
 - }
 - 
 - inline AudioComponentMethod MIDI_Lookup(SInt16 selector)
 - {
 - 	switch (selector) {
 - 	case kMusicDeviceMIDIEventSelect:
 - 		return (AudioComponentMethod)AUMethodMIDIEvent; // NOLINT cast
 - 	case kMusicDeviceSysExSelect:
 - 		return (AudioComponentMethod)AUMethodSysEx; // NOLINT cast
 - #if AUSDK_MIDI2_AVAILABLE
 - 	case kMusicDeviceMIDIEventListSelect:
 - 		return (AudioComponentMethod)AUMethodMIDIEventList; // NOLINT cast
 - #endif
 - 	default:
 - 		break;
 - 	}
 - 	return nullptr;
 - }
 - 
 - AudioComponentMethod AUMIDILookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	return MIDI_Lookup(selector);
 - }
 - 
 - AudioComponentMethod AUMIDIProcessLookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseProcessLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	return MIDI_Lookup(selector);
 - }
 - 
 - AudioComponentMethod AUMusicLookup::Lookup(SInt16 selector)
 - {
 - 	const AudioComponentMethod method = AUBaseLookup::Lookup(selector);
 - 	if (method != nullptr) {
 - 		return method;
 - 	}
 - 
 - 	switch (selector) {
 - 	case kMusicDeviceStartNoteSelect:
 - 		return (AudioComponentMethod)AUMethodStartNote; // NOLINT cast
 - 	case kMusicDeviceStopNoteSelect:
 - 		return (AudioComponentMethod)AUMethodStopNote; // NOLINT cast
 - #if HAVE_MUSICDEVICE_PREPARE_RELEASE
 - 	case kMusicDevicePrepareInstrumentSelect:
 - 		return (AudioComponentMethod)AUMethodPrepareInstrument; // NOLINT cast
 - 	case kMusicDeviceReleaseInstrumentSelect:
 - 		return (AudioComponentMethod)AUMethodReleaseInstrument; // NOLINT cast
 - #endif
 - 	default:
 - 		break;
 - 	}
 - 	return MIDI_Lookup(selector);
 - }
 - 
 - } // namespace ausdk
 
 
  |