53 lines
1.4 KiB
C++
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;
|
|
}
|
|
|
|
|