OSStatus 	SinSynthWithMidi::HandleMidiEvent(UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2, UInt32 inStartFrame) 
{
	// snag the midi event and then store it in a vector	
	mCallbackHelper.AddMIDIEvent(status, channel, data1, data2, inStartFrame);
	
	return AUMIDIBase::HandleMidiEvent(status, channel, data1, data2, inStartFrame);
}
Ejemplo n.º 2
0
OSStatus	SinSynthWithMidi::Render(   AudioUnitRenderActionFlags &		ioActionFlags,
												const AudioTimeStamp &		inTimeStamp,
												UInt32						inNumberFrames) {
	OSStatus result = AUInstrumentBase::Render(ioActionFlags, inTimeStamp, inNumberFrames);
	if (result == noErr) {
		mCallbackHelper.FireAtTimeStamp(inTimeStamp);
	} 
	return result;
}
Ejemplo n.º 3
0
OSStatus CC2Note::HandleMidiEvent(UInt8 status, UInt8 channel, UInt8 data1,
                                       UInt8 data2, UInt32 inStartFrame) {
    // data1 : note number, data2 : velocity
    
#ifdef DEBUG
    DEBUGLOG_B("HandleMidiEvent - status:"
               << (int)status << " ch:" << (int)channel << "/"
               << (Globals()->GetParameter(kParameter_Ch) - 1)
               << " data1:" << (int)data1 << " data2:" << (int)data2 << endl);
    DEBUGLOG_B("noteNumber = " << noteNumber << ", isNoteOff = " << isNoteOff << endl);
#endif
    
    int _ch = Globals()->GetParameter(kParameter_Ch);
    int _cc = Globals()->GetParameter(kParameter_CC);
    if (channel + 1 == _ch && status == kControlChange && data1 == _cc)
    {
        // ijiru
        if (isNoteOff && data2 > 0){
            isNoteOff = false;
            
            int min = Globals()->GetParameter(kParameter_NoteMin);
            int max = Globals()->GetParameter(kParameter_NoteMax);
            int velocity = Globals()->GetParameter(kParameter_Velocity);
                
            if(noteNumber > max || noteNumber < min)
                noteNumber = min;
                
            mCallbackHelper.AddMIDIEvent(kNoteOn, channel, noteNumber, velocity, inStartFrame);
            
        } else if(!isNoteOff && data2 == 0){
            mCallbackHelper.AddMIDIEvent(kNoteOff, channel, noteNumber, 0, inStartFrame);
            noteNumber++;
            isNoteOff = true;
        }
    } else
        mCallbackHelper.AddMIDIEvent(status, channel, data1, data2, inStartFrame);
    
    return AUMIDIBase::HandleMidiEvent(status, channel, data1, data2,
                                       inStartFrame);
}
Ejemplo n.º 4
0
OSStatus			SinSynthWithMidi::SetProperty(	AudioUnitPropertyID 			inID,
													AudioUnitScope 					inScope,
													AudioUnitElement 				inElement,
													const void *					inData,
													UInt32 							inDataSize)
{
	if (inScope == kAudioUnitScope_Global) {
		if (inID == kAudioUnitProperty_MIDIOutputCallback) {
			if (inDataSize < sizeof(AUMIDIOutputCallbackStruct)) return kAudioUnitErr_InvalidPropertyValue;
			
			AUMIDIOutputCallbackStruct *callbackStruct = (AUMIDIOutputCallbackStruct *)inData;
			mCallbackHelper.SetCallbackInfo(callbackStruct->midiOutputCallback, callbackStruct->userData);
			return noErr;
		}
	}
	return SinSynth::SetProperty(inID, inScope, inElement, inData, inDataSize);
}
Ejemplo n.º 5
0
OSStatus CC2Note::SetProperty(AudioUnitPropertyID inID,
                                   AudioUnitScope inScope,
                                   AudioUnitElement inElement,
                                   const void *inData, UInt32 inDataSize) {
#ifdef DEBUG
    DEBUGLOG_B("SetProperty" << endl);
#endif
    if (inScope == kAudioUnitScope_Global) {
        if (inID == kAudioUnitProperty_MIDIOutputCallback) {
            if (inDataSize < sizeof(AUMIDIOutputCallbackStruct))
                return kAudioUnitErr_InvalidPropertyValue;
            
            AUMIDIOutputCallbackStruct *callbackStruct =
            (AUMIDIOutputCallbackStruct *)inData;
            mCallbackHelper.SetCallbackInfo(callbackStruct->midiOutputCallback,
                                            callbackStruct->userData);
            return noErr;
        }
    }
    return AUMonotimbralInstrumentBase::SetProperty(inID, inScope, inElement,
                                                    inData, inDataSize);
}