mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
169 lines
5.4 KiB
Objective-C
169 lines
5.4 KiB
Objective-C
/*!
|
|
@file AudioUnitSDK/AUMIDIBase.h
|
|
@copyright © 2000-2021 Apple Inc. All rights reserved.
|
|
*/
|
|
#ifndef AudioUnitSDK_AUMIDIBase_h
|
|
#define AudioUnitSDK_AUMIDIBase_h
|
|
|
|
#include <AudioUnitSDK/AUBase.h>
|
|
|
|
|
|
#ifndef AUSDK_HAVE_XML_NAMES
|
|
#define AUSDK_HAVE_XML_NAMES TARGET_OS_OSX // NOLINT(cppcoreguidelines-macro-usage)
|
|
#endif
|
|
|
|
#ifndef AUSDK_HAVE_MIDI_MAPPING
|
|
#define AUSDK_HAVE_MIDI_MAPPING TARGET_OS_OSX // NOLINT(cppcoreguidelines-macro-usage)
|
|
#endif
|
|
|
|
namespace ausdk {
|
|
|
|
#if AUSDK_HAVE_MIDI_MAPPING
|
|
/// Abstract interface for parameter MIDI mapping
|
|
class AUMIDIMapper {
|
|
public:
|
|
AUMIDIMapper() = default;
|
|
virtual ~AUMIDIMapper() = default;
|
|
|
|
AUMIDIMapper(const AUMIDIMapper&) = delete;
|
|
AUMIDIMapper(AUMIDIMapper&&) = delete;
|
|
AUMIDIMapper& operator=(const AUMIDIMapper&) = delete;
|
|
AUMIDIMapper& operator=(AUMIDIMapper&&) = delete;
|
|
|
|
[[nodiscard]] virtual UInt32 GetNumberMaps() const = 0;
|
|
virtual void GetMaps(AUParameterMIDIMapping* outMapping) = 0;
|
|
virtual void GetHotParameterMap(AUParameterMIDIMapping& outMapping) = 0;
|
|
|
|
virtual void AddParameterMapping(
|
|
const AUParameterMIDIMapping* maps, UInt32 count, AUBase& auBase) = 0;
|
|
virtual void RemoveParameterMapping(
|
|
const AUParameterMIDIMapping* maps, UInt32 count, bool& outDidChange) = 0;
|
|
virtual void SetHotMapping(const AUParameterMIDIMapping& mapping) = 0;
|
|
virtual void ReplaceAllMaps(
|
|
const AUParameterMIDIMapping* maps, UInt32 count, AUBase& auBase) = 0;
|
|
|
|
virtual bool HandleHotMapping(UInt8 status, UInt8 channel, UInt8 data1, AUBase& auBase) = 0;
|
|
virtual bool FindParameterMapEventMatch(UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2,
|
|
UInt32 inStartFrame, AUBase& auBase) = 0;
|
|
};
|
|
#endif
|
|
|
|
// ________________________________________________________________________
|
|
// AUMIDIBase
|
|
//
|
|
/*!
|
|
@class AUMIDIBase
|
|
@brief Auxiliary class supporting MIDI events.
|
|
*/
|
|
class AUMIDIBase {
|
|
public:
|
|
explicit AUMIDIBase(AUBase& inBase) : mAUBaseInstance(inBase) {}
|
|
|
|
virtual ~AUMIDIBase() = default;
|
|
|
|
AUMIDIBase(const AUMIDIBase&) = delete;
|
|
AUMIDIBase(AUMIDIBase&&) = delete;
|
|
AUMIDIBase& operator=(const AUMIDIBase&) = delete;
|
|
AUMIDIBase& operator=(AUMIDIBase&&) = delete;
|
|
|
|
virtual OSStatus MIDIEvent(
|
|
UInt32 inStatus, UInt32 inData1, UInt32 inData2, UInt32 inOffsetSampleFrame)
|
|
{
|
|
const UInt32 strippedStatus = inStatus & 0xf0U; // NOLINT
|
|
const UInt32 channel = inStatus & 0x0fU; // NOLINT
|
|
|
|
return HandleMIDIEvent(strippedStatus, channel, inData1, inData2, inOffsetSampleFrame);
|
|
}
|
|
|
|
#if AUSDK_MIDI2_AVAILABLE
|
|
virtual OSStatus MIDIEventList(
|
|
UInt32 /*inOffsetSampleFrame*/, const MIDIEventList* /*eventList*/)
|
|
{
|
|
return kAudio_UnimplementedError;
|
|
}
|
|
#endif
|
|
|
|
virtual OSStatus SysEx(const UInt8* inData, UInt32 inLength);
|
|
|
|
virtual OSStatus DelegateGetPropertyInfo(AudioUnitPropertyID inID, AudioUnitScope inScope,
|
|
AudioUnitElement inElement, UInt32& outDataSize, bool& outWritable);
|
|
virtual OSStatus DelegateGetProperty(AudioUnitPropertyID inID, AudioUnitScope inScope,
|
|
AudioUnitElement inElement, void* outData);
|
|
virtual OSStatus DelegateSetProperty(AudioUnitPropertyID inID, AudioUnitScope inScope,
|
|
AudioUnitElement inElement, const void* inData, UInt32 inDataSize);
|
|
|
|
protected:
|
|
// MIDI dispatch
|
|
virtual OSStatus HandleMIDIEvent(
|
|
UInt8 inStatus, UInt8 inChannel, UInt8 inData1, UInt8 inData2, UInt32 inStartFrame);
|
|
virtual OSStatus HandleNonNoteEvent(
|
|
UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2, UInt32 inStartFrame);
|
|
|
|
// Old name
|
|
AUSDK_DEPRECATED("HandleMIDIEvent")
|
|
OSStatus HandleMidiEvent(
|
|
UInt8 inStatus, UInt8 inChannel, UInt8 inData1, UInt8 inData2, UInt32 inStartFrame)
|
|
{
|
|
return HandleMIDIEvent(inStatus, inChannel, inData1, inData2, inStartFrame);
|
|
}
|
|
|
|
#if AUSDK_HAVE_XML_NAMES
|
|
virtual OSStatus GetXMLNames(CFURLRef* /*outNameDocument*/)
|
|
{
|
|
return kAudioUnitErr_InvalidProperty;
|
|
} // if not overridden, it's unsupported
|
|
#endif
|
|
|
|
// channel messages
|
|
virtual OSStatus HandleNoteOn(
|
|
UInt8 /*inChannel*/, UInt8 /*inNoteNumber*/, UInt8 /*inVelocity*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandleNoteOff(
|
|
UInt8 /*inChannel*/, UInt8 /*inNoteNumber*/, UInt8 /*inVelocity*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandleControlChange(
|
|
UInt8 /*inChannel*/, UInt8 /*inController*/, UInt8 /*inValue*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandlePitchWheel(
|
|
UInt8 /*inChannel*/, UInt8 /*inPitch1*/, UInt8 /*inPitch2*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandleChannelPressure(
|
|
UInt8 /*inChannel*/, UInt8 /*inValue*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandleProgramChange(UInt8 /*inChannel*/, UInt8 /*inValue*/) { return noErr; }
|
|
virtual OSStatus HandlePolyPressure(
|
|
UInt8 /*inChannel*/, UInt8 /*inKey*/, UInt8 /*inValue*/, UInt32 /*inStartFrame*/)
|
|
{
|
|
return noErr;
|
|
}
|
|
virtual OSStatus HandleResetAllControllers(UInt8 /*inChannel*/) { return noErr; }
|
|
virtual OSStatus HandleAllNotesOff(UInt8 /*inChannel*/) { return noErr; }
|
|
virtual OSStatus HandleAllSoundOff(UInt8 /*inChannel*/) { return noErr; }
|
|
|
|
// System messages
|
|
virtual OSStatus HandleSysEx(const UInt8* /*inData*/, UInt32 /*inLength*/) { return noErr; }
|
|
|
|
#if AUSDK_HAVE_MIDI_MAPPING
|
|
void SetMIDIMapper(const std::shared_ptr<AUMIDIMapper>& mapper) { mMIDIMapper = mapper; }
|
|
#endif
|
|
|
|
private:
|
|
AUBase& mAUBaseInstance;
|
|
#if AUSDK_HAVE_MIDI_MAPPING
|
|
std::shared_ptr<AUMIDIMapper> mMIDIMapper;
|
|
#endif
|
|
};
|
|
|
|
} // namespace ausdk
|
|
|
|
#endif // AudioUnitSDK_AUMIDIBase_h
|