Exemplo n.º 1
0
void MidiBlackKeyFilter::processMidiEvents (VstMidiEventVec *inputs, VstMidiEventVec *outputs, VstInt32 sampleFrames) 
{
	const int listenchannel = FLOAT_TO_CHANNEL(param[kInChannel]);
	int BlackChannel		= FLOAT_TO_CHANNEL(param[kBlackChannel]);
	int WhiteChannel		= FLOAT_TO_CHANNEL(param[kWhiteChannel]);

	// process incoming events
	for (unsigned int i=0;i<inputs[0].size();i++) {
		//copying event "i" from input (with all its fields)
		VstMidiEvent tomod = inputs[0][i];

		unsigned int status  = tomod.midiData[0] & 0xf0;   // scraping  channel
		const int channel    = tomod.midiData[0] & 0x0f;   // isolating channel
		const int data1      = tomod.midiData[1] & 0x7f;
		const int data2		 = tomod.midiData[2] & 0x7f;

		// make zero-velocity noteons look like "real" noteoffs
		if (status==MIDI_NOTEON && data2==0) status=MIDI_NOTEOFF; 

		if (channel == listenchannel || listenchannel == -1) {
			if (status == MIDI_NOTEON) {
				if (isBlackKey(data1)) {
					if (BlackChannel==ANY_CHANNEL) BlackChannel = channel;
					tomod.midiData[0] = MIDI_NOTEON | BlackChannel;
					tomod.midiData[2] = midiLimit(roundToInt((float)data2 * 2.f * param[kBlackVelocity]));
				}
				else {
					if (WhiteChannel==ANY_CHANNEL) WhiteChannel = channel;
					tomod.midiData[0] = MIDI_NOTEON | WhiteChannel;
					tomod.midiData[2] = midiLimit(roundToInt((float)data2 * 2.f * param[kWhiteVelocity]));
				}
				if (tomod.midiData[2]>0) playingOnChannel[data1][channel] = tomod.midiData[0]&0x0f;
			}
			else if (status == MIDI_NOTEOFF) {
				if (isBlackKey(data1)) {
					if (BlackChannel==ANY_CHANNEL) BlackChannel = channel;
					tomod.midiData[0] = MIDI_NOTEOFF | BlackChannel;
				}
				else {
					if (WhiteChannel==ANY_CHANNEL) WhiteChannel = channel;
					tomod.midiData[0] = MIDI_NOTEOFF | WhiteChannel;
				}
				playingOnChannel[data1][channel] = -1;
			}
		}
		outputs[0].push_back(tomod);
	}
}
Exemplo n.º 2
0
//have fun modifying this one!
void MidiGain::processMidiEvents (VstMidiEventVec *inputs, VstMidiEventVec *outputs)
{
	// process incoming events
	VstMidiEventVec::iterator it;
	for (it=inputs[0].begin(); it<inputs[0].end(); it++)
	{
        const int status	= it->midiData[0] & 0xf0;  // scraping channel
        const int channel	= it->midiData[0] & 0x0f;  // isolating channel (0-15)
        const int data1		= it->midiData[1] & 0x7f;  // note/cc number, etc
        const int data2		= it->midiData[2] & 0x7f;  // velocity/cc value, etc

        if (isNoteOn(*it)) 
		{
			int newVelocity = roundToInt(2.f * param[kGain] * (float)data2);
			it->midiData[2] = midiLimit(newVelocity);
        }
        outputs[0].push_back(*it);
    }
}
Exemplo n.º 3
0
void MidiKeySplit4::processMidiEvents(VstMidiEventVec *inputs, VstMidiEventVec *outputs, VstInt32 sampleFrames) 
{
    const char ch = FLOAT_TO_CHANNEL015(param[kInChannel]);
    signed char ch1 = FLOAT_TO_CHANNEL(param[kOutChannel1]);
    signed char ch2 = FLOAT_TO_CHANNEL(param[kOutChannel2]);
    signed char ch3 = FLOAT_TO_CHANNEL(param[kOutChannel3]);
    signed char ch4 = FLOAT_TO_CHANNEL(param[kOutChannel4]);
    const char split1 = FLOAT_TO_MIDI_X(param[kSplit1]);
    const char split2 = FLOAT_TO_MIDI_X(param[kSplit2]);
    const char split3 = FLOAT_TO_MIDI_X(param[kSplit3]);
    const char transp1 = roundToInt(96.f*param[kTransp1])-48;
    const char transp2 = roundToInt(96.f*param[kTransp2])-48;
    const char transp3 = roundToInt(96.f*param[kTransp3])-48;
    const char transp4 = roundToInt(96.f*param[kTransp4])-48;

	// process incoming events
    for (unsigned int i=0;i<inputs[0].size();i++) {
        //copying event "i" from input (with all its fields)
		VstMidiEvent tomod = inputs[0][i];

        int status     = tomod.midiData[0] & 0xf0;   // scraping  channel
        int channel    = tomod.midiData[0] & 0x0f;   // isolating channel
        int data1      = tomod.midiData[1] & 0x7f;
        int data2		 = tomod.midiData[2] & 0x7f;

        if (status==MIDI_NOTEON && data2==0) status=MIDI_NOTEOFF;
        
        if (ch1==-1) ch1=channel;
        if (ch2==-1) ch2=channel;
        if (ch3==-1) ch3=channel;
        if (ch4==-1) ch4=channel;

		if (channel==ch) { 
            if (status==MIDI_NOTEON) {
                if (split1==learn) {
                    setParameterAutomated(kSplit1,MIDI_TO_FLOAT_X(data1));
                }
                if (split2==learn) {
                    setParameterAutomated(kSplit2,MIDI_TO_FLOAT_X(data1));
                }
                if (split3==learn) {
                    setParameterAutomated(kSplit3,MIDI_TO_FLOAT_X(data1));
                }

                if (data1<split1) {
                    transposed[data1] = transp1;
                    tomod.midiData[0] = status | ch1;
                    tomod.midiData[1] = midiLimit(data1+transp1);
                }
                else if (data1<split2) {
                    transposed[data1] = transp2;
                    tomod.midiData[0] = status | ch2;
                    tomod.midiData[1] = midiLimit(data1+transp2);
                }
                else if (data1<split3) {
                    transposed[data1] = transp3;
                    tomod.midiData[0] = status | ch3;
                    tomod.midiData[1] = midiLimit(data1+transp3);
                }
                else {
                    transposed[data1] = transp4;
                    tomod.midiData[0] = status | ch4;
                    tomod.midiData[1] = midiLimit(data1+transp4);
                }
            }
            else if (status==MIDI_NOTEOFF) {
                if (data1<split1) {
                    tomod.midiData[0] = status | ch1;
                    tomod.midiData[1] = midiLimit(data1+transposed[data1]);
                    transposed[data1]=-999;
                }
                else if (data1<split2) {
                    tomod.midiData[0] = status | ch2;
                    tomod.midiData[1] = midiLimit(data1+transposed[data1]);
                    transposed[data1]=-999;
                }
                else if (data1<split3) {
                    tomod.midiData[0] = status | ch3;
                    tomod.midiData[1] = midiLimit(data1+transposed[data1]);
                    transposed[data1]=-999;
                }
                else {
                    tomod.midiData[0] = status | ch4;
                    tomod.midiData[1] = midiLimit(data1+transposed[data1]);
                    transposed[data1]=-999;
                }
            }
            if (status==MIDI_POLYKEYPRESSURE) {
                if (data1<split1) {
					tomod.midiData[0] = status | ch1;
                    tomod.midiData[1] = midiLimit(data1+transp1);
                }
                else if (data1<split2) {
                    tomod.midiData[0] = status | ch2;
                    tomod.midiData[1] = midiLimit(data1+transp2);
                }
                else if (data1<split3) {
                    tomod.midiData[0] = status | ch3;
                    tomod.midiData[1] = midiLimit(data1+transp3);
                }
                else {
                    tomod.midiData[0] = status | ch4;
                    tomod.midiData[1] = midiLimit(data1+transp4);
                }
            }
		}
	    outputs[0].push_back(tomod);
    }
}
Exemplo n.º 4
0
int nextHenon(double alpha, double beta, double& x, double& xx) {
   double xxx = xx;
   xx  = x;
   x   = 1 + alpha * xx * xx + beta * xxx;
   return midiLimit((int)((x + 1.0)/2.0 * 127.0 + 0.5));
}