You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MicroDexed/dexed.h

119 lines
3.3 KiB

6 years ago
/**
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
*/
6 years ago
#ifndef DEXED_H_INCLUDED
#define DEXED_H_INCLUDED
#include "controllers.h"
#include "dx7note.h"
#include "lfo.h"
#include "synth.h"
#include "fm_core.h"
6 years ago
//#include "PluginFx.h"
6 years ago
#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;
6 years ago
};
enum DexedEngineResolution {
DEXED_ENGINE_MODERN, // 0
DEXED_ENGINE_MARKI, // 1
DEXED_ENGINE_OPL // 2
6 years ago
};
// GLOBALS
//==============================================================================
6 years ago
class Dexed
6 years ago
{
public:
6 years ago
Dexed(uint16_t rate);
6 years ago
~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);
6 years ago
void GetSamples(uint32_t n_samples, int16_t* buffer);
bool ProcessMidiMessage(uint8_t cmd, uint8_t data1, uint8_t data2);
6 years ago
Controllers controllers;
VoiceStatus voiceStatus;
protected:
6 years ago
//void onParam(uint8_t param_num,float param_val);
6 years ago
void keyup(uint8_t pitch);
void keydown(uint8_t pitch, uint8_t velo);
void panic(void);
void notes_off(void);
static const uint8_t MAX_ACTIVE_NOTES = 32;
uint8_t max_notes = MAX_ACTIVE_NOTES;
6 years ago
ProcessorVoice voices[MAX_ACTIVE_NOTES];
uint8_t currentNote;
bool sustain;
bool monoMode;
bool refreshVoice;
uint8_t engineType;
6 years ago
//PluginFx fx;
6 years ago
Lfo lfo;
FmCore* engineMsfa;
EngineMkI* engineMkI;
EngineOpl* engineOpl;
float* outbuf_;
uint32_t bufsize_;
private:
6 years ago
uint16_t _rate;
6 years ago
uint8_t _k_rate_counter;
uint8_t _param_change_counter;
uint8_t data[173] = {
6 years ago
95, 29, 20, 50, 99, 95, 00, 00, 41, 00, 19, 00, 00, 03, 00, 06, 79, 00, 01, 00, 14,
95, 20, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 00, 99, 00, 01, 00, 00,
95, 29, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 06, 89, 00, 01, 00, 07,
95, 20, 20, 50, 99, 95, 00, 00, 00, 00, 00, 00, 00, 03, 00, 02, 99, 00, 01, 00, 07,
95, 50, 35, 78, 99, 75, 00, 00, 00, 00, 00, 00, 00, 03, 00, 07, 58, 00, 14, 00, 07,
96, 25, 25, 67, 99, 75, 00, 00, 00, 00, 00, 00, 00, 03, 00, 02, 99, 00, 01, 00, 10,
94, 67, 95, 60, 50, 50, 50, 50,
04, 06, 00,
34, 33, 00, 00, 00, 04,
03, 24,
00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
01, 00, 99, 00, 99, 00, 99, 00, 99, 00,
00,
01, 01, 01, 01, 01, 01,
16
};
6 years ago
};
#endif // PLUGINPROCESSOR_H_INCLUDED