Esempio n. 1
0
// ---------------------------------------------------------------------------
// Return key event.
// ---------------------------------------------------------------------------
//
EXPORT_C const TKeyEvent& TAlfEvent::KeyEvent() const
    {
    __ASSERT_ALWAYS( IsKeyEvent(), USER_INVARIANT() );
    return iKeyEvent;
    }
Esempio n. 2
0
// The CALLER of this method must ensure that the status byte's MIDI Command matches!!!
bool	CAAUMIDIMap::MIDI_Matches (UInt8 inChannel, UInt8 inData1, UInt8 inData2, Float32 &outLinear) const
{
	// see if the channels match first
	SInt8 chan = Channel();
	// channel matches (if chan is less than zero, "Any Channel" flag is set)
	if (chan >= 0 && chan != inChannel)
		return false;

	// match the special cases first
	if (IsKeyEvent()) {
		// we're using this key event as an on/off type switch
		if (IsBipolar()) {
			if (IsKeyPressure()){
				if (IsBipolar_OnValue()) {
					if (inData2 > 63) {
						outLinear = 1;
						return true;
					}
				} else {
					if (inData2 < 64) {
						outLinear = 0;
						return true;
					}
				}
				return false;
			}
			else {
				if (IsBipolar_OnValue()) {
					if (inData1 > 63) {
						outLinear = 1;
						return true;
					}
				} else {
					if (inData1 < 64) {
						outLinear = 0;
						return true;
					}
				}
				return false;
			}
		}
		if (IsAnyNote()) {
// not quite sure how to interpret this...
			if (IsKeyPressure())
				outLinear = inData2 / 127.0;
			else
				outLinear = inData1 / 127.0;
			return true;
		}
		if (mData1 == inData1) {
			if (IsKeyPressure())
				outLinear = inData2 / 127.0;
			else
				outLinear = 1;
			return true;
		}
		return false;
	}
	else if (IsControlChange()) {
		// controller ID matches
		if (mData1 == inData1) {
			if (IsBipolar()) {
				if (IsBipolar_OnValue()) {
					if (inData2 > 63) {
						outLinear = 1;
						return true;
					}
				} else {
					if (inData2 < 64) {
						outLinear = 0;
						return true;
					}
				}
				return false;
			}
			//printf("this in midi matches %X with ", this); 
			outLinear = inData2 / 127.; 
			return true;
		}
		return false;
	}
	
		// this just matches on the patch change value itself...
	if (IsPatchChange()) {
		if (mData1 == inData1) {
			outLinear = 1;
			return true;
		}
		return false;
	}

	// finally, for the other two, just check the bi-polar matching conditions
	// pitch bend and after touch
	if (IsBipolar()) {
		if (IsBipolar_OnValue()) {
			if (inData1 > 63) {
				outLinear = 1;
				return true;
			}
		} else {
			if (inData1 < 64) {
				outLinear = 0;
				return true;
			}
		}
		return false;
	}

	if (IsPitchBend()) {
		UInt16 value = (inData2 << 7) | inData1;
		outLinear = value / 16383.;
	}
	else if (IsChannelPressure()) {
		outLinear = inData1 / 127.0;
	}

	return true;
}
Esempio n. 3
0
// ---------------------------------------------------------------------------
// Return key event code.
// ---------------------------------------------------------------------------
//
EXPORT_C const TEventCode& TAlfEvent::Code() const
    {
    __ASSERT_ALWAYS( IsKeyEvent(), USER_INVARIANT() );
    return iCode;
    }