mirror of https://github.com/dcoredump/dexed.git
parent
0f99ea3c00
commit
57aa7c472b
@ -0,0 +1,108 @@ |
|||||||
|
#include "EngineMkI.h" |
||||||
|
#include "EngineOpl.h" |
||||||
|
#include "msfa/exp2.h" |
||||||
|
#include "msfa/sin.h" |
||||||
|
#include "msfa/freqlut.h" |
||||||
|
#include "msfa/controllers.h" |
||||||
|
#include "msfa/dx7note.h" |
||||||
|
#include "msfa/lfo.h" |
||||||
|
#include "msfa/synth.h" |
||||||
|
#include "msfa/fm_core.h" |
||||||
|
|
||||||
|
#include <cstdint> |
||||||
|
#include <limits> |
||||||
|
|
||||||
|
template<class T> float normalize(const T x) { |
||||||
|
const float valMin = std::numeric_limits<T>::min(); |
||||||
|
const float valMax = std::numeric_limits<T>::max(); |
||||||
|
return 2 * (x - valMin) / (valMax - valMin) - 1; // note: 0 does not become 0.
|
||||||
|
} |
||||||
|
|
||||||
|
struct ProcessorVoice { |
||||||
|
int midi_note; |
||||||
|
bool keydown; |
||||||
|
bool sustained; |
||||||
|
bool live; |
||||||
|
Dx7Note *dx7_note; |
||||||
|
}; |
||||||
|
|
||||||
|
// GLOBALS
|
||||||
|
FmCore engineMsfa; |
||||||
|
EngineMkI engineMkI; |
||||||
|
EngineOpl engineOpl; |
||||||
|
|
||||||
|
Lfo lfo; |
||||||
|
Controllers controllers; |
||||||
|
const int rate=44100; |
||||||
|
const uint8_t init_voice[] = |
||||||
|
{ 99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 99, 99, 99, 00, 39, 0, 0, 0, 0, 0, 0, 0, 99, 0, 1, 0, 7, |
||||||
|
99, 99, 99, 99, 50, 50, 50, 50, 0, 0, 1, 35, 0, 0, 0, 1, 0, 3, 24, |
||||||
|
73, 78, 73, 84, 32, 86, 79, 73, 67, 69 }; |
||||||
|
uint8_t data[156]; // program data
|
||||||
|
ProcessorVoice voice; |
||||||
|
uint8_t feedback_bitdepth=11; |
||||||
|
|
||||||
|
int main(int argc, char **argv) |
||||||
|
{ |
||||||
|
Exp2::init(); |
||||||
|
Tanh::init(); |
||||||
|
Sin::init(); |
||||||
|
Freqlut::init(rate); |
||||||
|
Lfo::init(rate); |
||||||
|
PitchEnv::init(rate); |
||||||
|
Env::init_sr(rate); |
||||||
|
|
||||||
|
uint32_t i; |
||||||
|
|
||||||
|
for(i=0;i<sizeof(init_voice);i++) { |
||||||
|
data[i] = init_voice[i]; |
||||||
|
} |
||||||
|
|
||||||
|
controllers.values_[kControllerPitchRange] = 3; |
||||||
|
controllers.values_[kControllerPitchStep] = 0; |
||||||
|
controllers.masterTune = 0; |
||||||
|
controllers.values_[kControllerPitch] = 0x2000; |
||||||
|
controllers.modwheel_cc = 0; |
||||||
|
controllers.foot_cc = 0; |
||||||
|
controllers.breath_cc = 0; |
||||||
|
controllers.aftertouch_cc = 0; |
||||||
|
controllers.core=&engineMsfa; |
||||||
|
|
||||||
|
lfo.reset(data + 137); |
||||||
|
|
||||||
|
voice.dx7_note=new Dx7Note; |
||||||
|
|
||||||
|
unsigned char key=64; |
||||||
|
unsigned char velocity=100; |
||||||
|
|
||||||
|
voice.midi_note=key+data[144] - 24; |
||||||
|
voice.keydown=true; |
||||||
|
voice.live=false; |
||||||
|
voice.sustained=false; |
||||||
|
lfo.keydown(); |
||||||
|
|
||||||
|
if(voice.live==false) |
||||||
|
{ |
||||||
|
voice.dx7_note->init(data, key, velocity, feedback_bitdepth); |
||||||
|
voice.live=true; |
||||||
|
} |
||||||
|
if(data[136]) |
||||||
|
voice.dx7_note->oscSync(); |
||||||
|
|
||||||
|
int32_t s; |
||||||
|
for(i=0;i<256;++i) |
||||||
|
{ |
||||||
|
if(voice.live==true) |
||||||
|
{ |
||||||
|
voice.dx7_note->compute(&s, lfo.getsample(), lfo.getdelay(), &controllers); |
||||||
|
float fs=normalize(s); |
||||||
|
printf("%f %d %d\n",fs, lfo.getsample(), lfo.getdelay()); |
||||||
|
} |
||||||
|
}
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,6 @@ |
|||||||
|
set -x |
||||||
|
make |
||||||
|
g++ -std=c++11 -c dexed-test.cpp |
||||||
|
g++ -std=c++11 dexed-test.o fm_core.o env.o lfo.o dx7note.o sin.o pitchenv.o fm_op_kernel.o freqlut.o exp2.o EngineMkI.o EngineOpl.o -lm -o dexed-test |
||||||
|
./dexed-test |
||||||
|
|
Loading…
Reference in new issue