Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
    }
}