1 /*
2 Copyright (C) 2016 Apple Inc. All Rights Reserved.
3 See LICENSE.txt for this sample’s licensing information
4 
5 Abstract:
6 Part of Core Audio AUBase Classes
7 */
8 
9 #ifndef __MusicDeviceBase_h__
10 #define __MusicDeviceBase_h__
11 
12 #include "AUMIDIBase.h"
13 
14 // ________________________________________________________________________
15 //	MusicDeviceBase
16 //
17 
18 /*! @class MusicDeviceBase */
19 class MusicDeviceBase : public AUBase, public AUMIDIBase {
20 public:
21 	/*! @ctor MusicDeviceBase */
22 								MusicDeviceBase(		AudioComponentInstance			inInstance,
23 														UInt32							numInputs,
24 														UInt32							numOutputs,
25 														UInt32							numGroups = 0);
26 
27 
MIDIEvent(UInt32 inStatus,UInt32 inData1,UInt32 inData2,UInt32 inOffsetSampleFrame)28 	virtual OSStatus	MIDIEvent(		UInt32 						inStatus,
29 										UInt32 						inData1,
30 										UInt32 						inData2,
31 										UInt32 						inOffsetSampleFrame)
32 	{
33 		return AUMIDIBase::MIDIEvent (inStatus, inData1, inData2, inOffsetSampleFrame);
34 	}
35 
36 	/*! @method SysEx */
SysEx(const UInt8 * inData,UInt32 inLength)37 	virtual OSStatus	SysEx(			const UInt8 *				inData,
38 										UInt32 						inLength)
39 	{
40 		return AUMIDIBase::SysEx (inData, inLength);
41 	}
42 
43 	/*! @method GetPropertyInfo */
44 	virtual OSStatus			GetPropertyInfo(AudioUnitPropertyID			inID,
45 												AudioUnitScope				inScope,
46 												AudioUnitElement			inElement,
47 												UInt32 &					outDataSize,
48 												Boolean &					outWritable);
49 
50 	/*! @method GetProperty */
51 	virtual OSStatus			GetProperty(	AudioUnitPropertyID 		inID,
52 												AudioUnitScope 				inScope,
53 												AudioUnitElement		 	inElement,
54 												void *						outData);
55 
56 	/*! @method SetProperty */
57 	virtual OSStatus			SetProperty(			AudioUnitPropertyID 			inID,
58 														AudioUnitScope 					inScope,
59 														AudioUnitElement 				inElement,
60 														const void *					inData,
61 														UInt32 							inDataSize);
62 
63 	/*! @method HandleNoteOn */
64 	virtual OSStatus			HandleNoteOn(	UInt8 	inChannel,
65 												UInt8 	inNoteNumber,
66 												UInt8 	inVelocity,
67 												UInt32 	inStartFrame);
68 
69 	/*! @method HandleNoteOff */
70 	virtual OSStatus			HandleNoteOff(	UInt8 	inChannel,
71 												UInt8 	inNoteNumber,
72 												UInt8 	inVelocity,
73 												UInt32 	inStartFrame);
74 
75 	/*! @method GetInstrumentCount */
76 	virtual OSStatus			GetInstrumentCount (	UInt32 &outInstCount) const;
77 
78 #if !CA_USE_AUDIO_PLUGIN_ONLY
79 	// component dispatcher
80 	/*! @method ComponentEntryDispatch */
81 	static OSStatus			ComponentEntryDispatch(	ComponentParameters *			params,
82 														MusicDeviceBase *				This);
83 #endif
84 private:
85 	OSStatus				HandleStartNoteMessage (MusicDeviceInstrumentID inInstrument, MusicDeviceGroupID inGroupID, NoteInstanceID *outNoteInstanceID, UInt32 inOffsetSampleFrame, const MusicDeviceNoteParams *inParams);
86 };
87 
88 #endif // __MusicDeviceBase_h__
89