diff --git a/src/instr_fm.cc b/src/instr_fm.cc index fdaeaa7..7d5c443 100644 --- a/src/instr_fm.cc +++ b/src/instr_fm.cc @@ -7,13 +7,13 @@ namespace Heck { void FM::init() { osc.Init(samplerate); - osc.SetFrequency(100); + osc.SetFrequency(40); osc.SetRatio(0.); osc.SetIndex(0.); volEnv.Init(samplerate); volEnv.SetTime(dsp::ADENV_SEG_ATTACK, .0001); - volEnv.SetTime(dsp::ADENV_SEG_DECAY, 1.); + volEnv.SetTime(dsp::ADENV_SEG_DECAY, 0.7); volEnv.SetMax(1); volEnv.SetMin(0); } @@ -21,26 +21,25 @@ namespace Heck { void FM::trigger() { volEnv.Trigger(); + osc.Reset(); } void FM::ctl(unsigned int ctl_nr, float val) { + float width = 0.1; + switch (ctl_nr) { case 0: - osc.SetFrequency(val * 200.); + osc.SetFrequency(31 + (val * 320.)); break; case 1: volEnv.SetTime(dsp::ADENV_SEG_DECAY, val * 2.); break; case 2: - osc.SetRatio(val * 1.); + osc.SetRatio(1 - (width / 2.) + val * width); break; case 3: - osc.SetIndex(val * 1.); - break; - case 4: - break; - case 5: + osc.SetIndex(val * 0.1); break; } }