amalgam/src/wavtest.cpp

53 lines
1.4 KiB
C++

/*
* Filename: wavtest.cpp
*
* Description:
*
*
* Version:
* Created: Mon Mar 9 23:06:08 2020
* Revision: None
* Author: Rachel Fae Fox (foxiepaws),fox@foxiepa.ws
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#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<double,double> st = (*f)();
w->write(toint16(st.first/4.0), toint16(st.second/4.0));
}
w->finalise();
return 0;
}