feat: log-scale frequency control

This commit is contained in:
2023-09-08 11:41:06 +04:00
parent 28ceaec23a
commit 6dc3de1eda
2 changed files with 10 additions and 7 deletions

View File

@@ -1,6 +1,6 @@
#pragma once #pragma once
#include "Filter.h"
#include "ADSR.h" #include "ADSR.h"
#include "Filter.h"
#include "Synth.h" #include "Synth.h"
#include "SynthGuiState.h" #include "SynthGuiState.h"
#include "raylib.h" #include "raylib.h"
@@ -21,7 +21,9 @@ class Renderer {
void draw_adsr_panel(ADSR* adsr, ADSRGuiState& gui_adsr, void draw_adsr_panel(ADSR* adsr, ADSRGuiState& gui_adsr,
const Rectangle& panel_bounds, float panel_y_offset); const Rectangle& panel_bounds, float panel_y_offset);
void draw_second_panel(Rectangle& bounds); void draw_second_panel(Rectangle& bounds);
float draw_filter_panel(Filter* filter, FilterGuiState& gui_filter, const Rectangle& panel_bounds); float draw_filter_panel(Filter* filter, FilterGuiState& gui_filter,
const Rectangle& panel_bounds);
public: public:
Renderer(/* args */); Renderer(/* args */);
~Renderer(); ~Renderer();

View File

@@ -190,7 +190,8 @@ void Renderer::draw_second_panel(Rectangle& bounds) {
GuiPanel(bounds, ""); GuiPanel(bounds, "");
} }
float Renderer::draw_filter_panel(Filter* filter, FilterGuiState& gui_filter, const Rectangle& panel_bounds) { float Renderer::draw_filter_panel(Filter* filter, FilterGuiState& gui_filter,
const Rectangle& panel_bounds) {
float panel_y_offset = 0; float panel_y_offset = 0;
// Draw Filter Panel // Draw Filter Panel
@@ -211,11 +212,11 @@ float Renderer::draw_filter_panel(Filter* filter, FilterGuiState& gui_filter, co
.height = 25.f}; .height = 25.f};
// Frequency slider // Frequency slider
float freq = gui_filter.freq; float freq = log10f(gui_filter.freq);
char freq_slider_label[32]; char freq_slider_label[32];
snprintf(freq_slider_label, 10, "%.1f hz", freq); snprintf(freq_slider_label, 10, "%.1f hz", powf(10.f, freq));
freq = GuiSlider(el_rect, freq_slider_label, "", freq, 0.0f, 16000.f); freq = GuiSlider(el_rect, freq_slider_label, "", freq, 0.f, 4.f);
gui_filter.freq = freq; gui_filter.freq = powf(10.f, freq);
el_rect.y += el_rect.height + el_spacing; el_rect.y += el_rect.height + el_spacing;
// Resonance slider // Resonance slider