ofxPDSPMidiKeys::ofxPDSPMidiKeys(){ gates.reserve(16); values.reserve(16); outs_trig.reserve(32); outs_pitch.reserve(32); unisonPitchDetune.reserve(32); voiceUnisonMod.reserve(32); out_singletrigger.setSingleTrigger(true); setUnisonDetune(0.3f); portamentoMode = Off; portamentoTime = 200.0f; slewMode = pdsp::Time; setSlew(40.0f); setPitchBend(-2, 2); setPolyMode(8, 1); }
void Analogue::handle_midi(uint32_t size, unsigned char* data) { //discard invalid midi messages if (size < 2) { return; } //receive on all channels switch(data[0] & 0xf0) { //note off case 0x80: { //discard invalid midi messages if (size != 3) { return; } off(data[1], data[2]); } break; //note on case 0x90: { //discard invalid midi messages if (size != 3) { return; } on(data[1], data[2]); } break; //pitch bend case 0xE0: { //discard invalid midi messages if (size != 3) { return; } setPitchBend(scale_pitchbend_to_f(data[1], data[2])); } break; case 0xB0: //controller //WIP: control preset parameters with assigned controllers { /*signed char param_id = -1; param_id = get_param_id_from_controller(data[1]); if (param_id >= 0) { float new_value = scale_midi_to_f(data[2]); setParameter(param_id, new_value); }*/ } // standard controller stuff switch(data[1]) { //mod wheel case 0x01: //discard invalid midi messages if (size != 3) { return; } //scale the mod value to cover the range [0..1] // DO NOTHING std::cout << "mod " << (int)data[2] << std::endl; break; // breath case 0x02: //discard invalid midi messages if (size != 3) { return; } setBreathControl(scale_midi_to_f(data[2])); break; //volume case 0x07: //discard invalid midi messages if (size != 3) { return; } setVolumeControl(scale_midi_to_f(data[2])); break; default: // TODO break; } break; default: break; } }