GUI: add metronome volume setting

This commit is contained in:
tildearrow 2022-04-13 02:29:07 -05:00
parent 2cd454a59d
commit 2e2fafd878
5 changed files with 28 additions and 5 deletions

View file

@ -2025,6 +2025,10 @@ void DivEngine::setMetronome(bool enable) {
metroAmp=0;
}
void DivEngine::setMetronomeVol(float vol) {
metroVol=vol;
}
void DivEngine::setConsoleMode(bool enable) {
consoleMode=enable;
}
@ -2196,6 +2200,9 @@ bool DivEngine::initAudioBackend() {
lowQuality=getConfInt("audioQuality",0);
forceMono=getConfInt("forceMono",0);
metroVol=(float)(getConfInt("metroVol",100))/100.0f;
if (metroVol<0.0f) metroVol=0.0f;
if (metroVol>2.0f) metroVol=2.0f;
switch (audioEngine) {
case DIV_AUDIO_JACK:

View file

@ -252,6 +252,7 @@ class DivEngine {
size_t metroTickLen;
float metroFreq, metroPos;
float metroAmp;
float metroVol;
size_t totalProcessed;
@ -622,6 +623,9 @@ class DivEngine {
// set metronome
void setMetronome(bool enable);
// set metronome volume (1.0 = 100%)
void setMetronomeVol(float vol);
// halt now
void halt();
@ -772,6 +776,7 @@ class DivEngine {
metroFreq(0),
metroPos(0),
metroAmp(0.0f),
metroVol(1.0f),
totalProcessed(0),
oscBuf{NULL,NULL},
oscSize(1),

View file

@ -1925,8 +1925,8 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
metroAmp=0.7f;
}
if (metroAmp>0.0f) {
out[0][i]+=(sin(metroPos*2*M_PI))*metroAmp;
out[1][i]+=(sin(metroPos*2*M_PI))*metroAmp;
out[0][i]+=(sin(metroPos*2*M_PI))*metroAmp*metroVol;
out[1][i]+=(sin(metroPos*2*M_PI))*metroAmp*metroVol;
}
metroAmp-=0.0003f;
if (metroAmp<0.0f) metroAmp=0.0f;

View file

@ -810,6 +810,7 @@ class FurnaceGUI {
int oscBorder;
int separateFMColors;
int insEditColorize;
int metroVol;
unsigned int maxUndoSteps;
String mainFontPath;
String patFontPath;
@ -876,6 +877,7 @@ class FurnaceGUI {
oscBorder(1),
separateFMColors(0),
insEditColorize(0),
metroVol(100),
maxUndoSteps(100),
mainFontPath(""),
patFontPath(""),

View file

@ -198,9 +198,6 @@ struct MappedInput {
scan(s), val(v) {}
};
// TODO:
// - add metronome volume setting
// - maybe add metronome sound setting
void FurnaceGUI::drawSettings() {
if (nextWindow==GUI_WINDOW_SETTINGS) {
settingsOpen=true;
@ -385,6 +382,14 @@ void FurnaceGUI::drawSettings() {
ImGui::SameLine();
ImGui::Combo("##Quality",&settings.audioQuality,audioQualities,2);
ImGui::Text("Metronome volume");
ImGui::SameLine();
if (ImGui::SliderInt("##MetroVol",&settings.metroVol,0,200,"%d%%")) {
if (settings.metroVol<0) settings.metroVol=0;
if (settings.metroVol>200) settings.metroVol=200;
e->setMetronomeVol(((float)settings.metroVol)/100.0f);
}
bool forceMonoB=settings.forceMono;
if (ImGui::Checkbox("Force mono audio",&forceMonoB)) {
settings.forceMono=forceMonoB;
@ -1562,6 +1567,7 @@ void FurnaceGUI::syncSettings() {
settings.oscBorder=e->getConfInt("oscBorder",1);
settings.separateFMColors=e->getConfInt("separateFMColors",0);
settings.insEditColorize=e->getConfInt("insEditColorize",0);
settings.metroVol=e->getConfInt("metroVol",100);
clampSetting(settings.mainFontSize,2,96);
clampSetting(settings.patFontSize,2,96);
@ -1617,6 +1623,7 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.sampleLayout,0,1);
clampSetting(settings.separateFMColors,0,1);
clampSetting(settings.insEditColorize,0,1);
clampSetting(settings.metroVol,0,200);
// keybinds
for (int i=0; i<GUI_ACTION_MAX; i++) {
@ -1632,6 +1639,7 @@ void FurnaceGUI::syncSettings() {
midiMap.compile();
e->setMidiDirect(midiMap.directChannel);
e->setMetronomeVol(((float)settings.metroVol)/100.0f);
}
void FurnaceGUI::commitSettings() {
@ -1698,6 +1706,7 @@ void FurnaceGUI::commitSettings() {
e->setConf("oscBorder",settings.oscBorder);
e->setConf("separateFMColors",settings.separateFMColors);
e->setConf("insEditColorize",settings.insEditColorize);
e->setConf("metroVol",settings.metroVol);
// colors
for (int i=0; i<GUI_COLOR_MAX; i++) {