/** Copyright (c) 2013-2015 Pascal Gauthier. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DEXED_H_INCLUDED #define DEXED_H_INCLUDED #include #include "controllers.h" #include "dx7note.h" #include "lfo.h" #include "synth.h" #include "fm_core.h" //#include "PluginFx.h" #include "EngineMkI.h" #include "EngineOpl.h" #define PARAM_CHANGE_LEVEL 10 // when a sound change is recognized struct ProcessorVoice { uint8_t midi_note; uint8_t velocity; bool keydown; bool sustained; bool live; Dx7Note *dx7_note; }; enum DexedEngineResolution { DEXED_ENGINE_MODERN, // 0 DEXED_ENGINE_MARKI, // 1 DEXED_ENGINE_OPL // 2 }; // GLOBALS //============================================================================== class Dexed { public: Dexed(int rate); ~Dexed(); void activate(void); void deactivate(void); uint8_t getEngineType(); void setEngineType(uint8_t tp); bool isMonoMode(void); void setMonoMode(bool mode); void set_params(void); void GetSamples(uint16_t n_samples, int16_t* buffer); bool ProcessMidiMessage(uint8_t type, uint8_t data1, uint8_t data2); void panic(void); void notes_off(void); void setMaxNotes(uint8_t n); Controllers controllers; VoiceStatus voiceStatus; uint8_t data[173] = { 95, 29, 20, 50, 99, 95, 00, 00, 41, 00, 19, 00, 00, 03, 00, 06, 79, 00, 01, 00, 14, // OP6 eg_rate_1-4, level_1-4, kbd_lev_scl_brk_pt, kbd_lev_scl_lft_depth, kbd_lev_scl_rht_depth, kbd_lev_scl_lft_curve, kbd_lev_scl_rht_curve, kbd_rate_scaling, amp_mod_sensitivity, key_vel_sensitivity, operator_output_level, osc_mode, osc_freq_coarse, osc_freq_fine, osc_detune 95, 20, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 00, 99, 00, 01, 00, 00, // OP5 95, 29, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 06, 89, 00, 01, 00, 07, // OP4 95, 20, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 02, 99, 00, 01, 00, 07, // OP3 95, 50, 35, 78, 99, 75, 00, 00, 00, 00, 00, 00, 00, 03, 00, 07, 58, 00, 14, 00, 07, // OP2 96, 25, 25, 67, 99, 75, 00, 00, 00, 00, 00, 00, 00, 03, 00, 02, 99, 00, 01, 00, 10, // OP1 94, 67, 95, 60, 50, 50, 50, 50, // 4 * pitch EG rates, 4 *pitch EG level 04, 06, 00, // algorithm, feedback, osc sync 34, 33, 00, 00, 00, 04, // lfo speed, lfo delay, lfo pitch_mod_depth, lfo_amp_mod_depth, lfo_sync, lfo_waveform 03, 24, // pitch_mod_sensitivity, transpose 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 10 * char for name 01, 00, 99, 00, 99, 00, 99, 00, 99, 00, // pitch_bend_range, pitch_bend_step, mod_wheel_range, mod_wheel_assign, foot_ctrl_range, foot_ctrl_assign, breath_ctrl_range, breath_ctrl_assign, aftertouch_range, aftertouch_assign 00, // master tune 01, 01, 01, 01, 01, 01, // OP1-6 enable 16 // number of voices }; // FM-Piano protected: //void onParam(uint8_t param_num,float param_val); void keyup(uint8_t pitch); void keydown(uint8_t pitch, uint8_t velo); static const uint8_t MAX_ACTIVE_NOTES = 16; uint8_t max_notes = MAX_ACTIVE_NOTES; ProcessorVoice voices[MAX_ACTIVE_NOTES]; uint8_t currentNote; bool sustain; bool monoMode; bool refreshVoice; uint8_t engineType; Lfo lfo; FmCore* engineMsfa; EngineMkI* engineMkI; EngineOpl* engineOpl; private: uint8_t _k_rate_counter; uint8_t _param_change_counter; }; #endif // PLUGINPROCESSOR_H_INCLUDED