/* * Filename: wavtest.cpp * * Description: * * * Version: * Created: Mon Mar 9 23:06:08 2020 * Revision: None * Author: Rachel Fae Fox (foxiepaws),fox@foxiepa.ws * */ #include #include #include #include "FM/Engine.h" #include "WavWriter/WavWriter.h" using namespace amalgam; int16_t toint16(double i) { double temp = i *= 32767; return floor(temp); } int main(int argc, char** argv){ FM::Engine<2> *f = new FM::Engine<2>(); f->getOperator(0)->setAll(2.0,0.0,0.0); f->getOperator(0)->getEnvelope()->setAttackTime(1.0); f->getOperator(0)->getEnvelope()->setDecayTime(0.5); f->getOperator(0)->getEnvelope()->setMaxLevel(1.0); f->getOperator(0)->getEnvelope()->setModMode(true); // play until reset. f->getOperator(1)->getEnvelope()->setReleaseTime(2.5); f->getOperator(1)->setAll(1.0,0.0,0.0); f->setGainMatrix(0,0,0.0); // op1 fbl = 0 f->setGainMatrix(0,1,1.0); // op1 -> op2 = 1 f->setGainMatrix(1,0,0.0); // op2 -> op1 = 0 f->setGainMatrix(1,2,1.0); // op2 -> out = 1 f->freq = 440; f->gate = true; double seconds = 20; // init a new writer WavWriter *w = new WavWriter("wavtest.wav",44100,2,16); for (int s = 0; s < 44100*seconds; s++) { std::pair st = (*f)(); w->write(toint16(st.first/4.0), toint16(st.second/4.0)); } w->finalise(); return 0; }