-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMenuLFO.cpp
60 lines (55 loc) · 1.45 KB
/
MenuLFO.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
MINI VIRTUAL ANALOG SYNTHESIZER
Copyright 2014 Kenneth D. Miller III
Low-Frequency Oscillator Menu
*/
#include "StdAfx.h"
#include "MenuLFO.h"
#include "Console.h"
#include "OscillatorLFO.h"
namespace Menu
{
LFO menu_lfo({ 41, page_pos.Y, 41 + 18, page_pos.Y + LFO::COUNT }, "LFO", LFO::COUNT);
void LFO::Update(int index, int sign, DWORD modifiers)
{
switch (index)
{
case TITLE:
lfo_config.enable = sign > 0;
break;
case WAVETYPE:
lfo_config.SetWaveType(Wave((lfo_config.wavetype + WAVE_COUNT + sign) % WAVE_COUNT));
lfo_state.Reset();
break;
case WAVEPARAM:
UpdatePercentageProperty(lfo_config.waveparam, sign, modifiers, 0, 1);
break;
case FREQUENCY:
UpdatePitchProperty(lfo_config.frequency_base, sign, modifiers, -8, 14);
lfo_config.frequency = powf(2.0f, lfo_config.frequency_base);
break;
default:
__assume(0);
}
}
void LFO::Print(int index, HANDLE hOut, COORD pos, DWORD flags)
{
switch (index)
{
case TITLE:
PrintTitle(hOut, lfo_config.enable, flags, " ON", "OFF");
break;
case WAVETYPE:
PrintItemString(hOut, pos, flags, "%-18s", wave_name[lfo_config.wavetype]);
break;
case WAVEPARAM:
PrintItemFloat(hOut, pos, flags, "Width: % 6.1f%%", lfo_config.waveparam * 100.0f);
break;
case FREQUENCY:
PrintItemFloat(hOut, pos, flags, "Freq: %10.3fHz", lfo_config.frequency);
break;
default:
__assume(0);
}
}
}