//--------------------------------------------------- void Snare_trigger(const uint8_t vel, const uint8_t note) { lfo_retrigger(3); //update velocity modulation modNode_updateValue(&velocityModulators[3],vel/127.f); float offset = 1; if(snareVoice.transGen.waveform==1) //offset mode { offset -= snareVoice.transGen.volume; } if(snareVoice.osc.waveform == SINE) snareVoice.osc.phase = (0x3ff<<20)*offset;//voiceArray[voiceNr].osc.startPhase ; else if(snareVoice.osc.waveform > SINE && snareVoice.osc.waveform <= REC) snareVoice.osc.phase = (0xff<<20)*offset; else snareVoice.osc.phase = 0; DecayEg_trigger(&snareVoice.oscPitchEg); slopeEg2_trigger(&snareVoice.oscVolEg); snareVoice.velo = vel/127.f; osc_setBaseNote(&snareVoice.osc,note); //TODO noise muss mit transponiert werden transient_trigger(&snareVoice.transGen); SnapEg_trigger(&snareVoice.snapEg); }
//--------------------------------------------------- void Drum_trigger(const uint8_t voiceNr, const uint8_t vol, const uint8_t note) { lfo_retrigger(voiceNr); //update velocity modulation modNode_updateValue(&velocityModulators[voiceNr],vol/127.f); //only reset phase if envelope is closed #ifdef USE_AMP_FILTER if((voiceArray[voiceNr].volEgValueBlock[15]<=0.01f) || (voiceArray[voiceNr].transGen.waveform==1)) #else // if((voiceArray[voiceNr].ampFilterInput<=0.01f) || (voiceArray[voiceNr].transGen.waveform==1)) #endif { float offset = 1; if(voiceArray[voiceNr].transGen.waveform==1) //offset mode { offset -= voiceArray[voiceNr].transGen.volume; #ifdef USE_AMP_FILTER setOnePoleCoef(&voiceArray[voiceNr].ampFilter,1.0f); //turn off amp filter for super snappy attack } else { setOnePoleCoef(&voiceArray[voiceNr].ampFilter,ampSmoothValue); #endif } if(voiceArray[voiceNr].osc.waveform == SINE) voiceArray[voiceNr].osc.phase = 1024 + ( (0x3ff<<20) - 1024)*offset;//voiceArray[voiceNr].osc.startPhase ; else if(voiceArray[voiceNr].osc.waveform > SINE && voiceArray[voiceNr].osc.waveform <= REC) voiceArray[voiceNr].osc.phase = (0xff<<20)*offset; else voiceArray[voiceNr].osc.phase = 0; } osc_setBaseNote(&voiceArray[voiceNr].osc,note); osc_setBaseNote(&voiceArray[voiceNr].modOsc,note); DecayEg_trigger(&voiceArray[voiceNr].oscPitchEg); slopeEg2_trigger(&voiceArray[voiceNr].oscVolEg); voiceArray[voiceNr].velo = vol/127.f; transient_trigger(&voiceArray[voiceNr].transGen); SnapEg_trigger(&voiceArray[voiceNr].snapEg); }