17 const std::string kTuningNames[] = {
25 const std::string kFrequencyDisplayNames[] = {
34 strings_[i] = kTuningNames[i];
43 if (e.mods.isPopupMenu()) {
65 if (findParentComponentOfClass<SynthGuiInterface>())
66 loadTuning(
static_cast<TuningStyle>((
int)getValue()));
70 setCustomString(getTuningName().toStdString());
75 if (tuning != getValue())
81void TuningSelector::loadTuning(TuningStyle tuning) {
93 text = String(BinaryData::_7_Limit_scl, BinaryData::_7_Limit_sclSize);
94 lines.addTokens(text,
"\n",
"");
98 text = String(BinaryData::_5_Limit_scl, BinaryData::_5_Limit_sclSize);
99 lines.addTokens(text,
"\n",
"");
103 text = String(BinaryData::Pythagorean_scl, BinaryData::Pythagorean_sclSize);
104 lines.addTokens(text,
"\n",
"");
113void TuningSelector::loadTuningFile() {
114 setCustomString(
"Custom");
116 if (load_box.browseForFileToOpen())
117 loadTuningFile(load_box.getResult());
119 setCustomString(getTuningName().toStdString());
122void TuningSelector::loadTuningFile(
const File& file) {
127String TuningSelector::getTuningName() {
143 mpe_enabled_ = std::make_unique<SynthButton>(
"mpe_enabled");
146 mpe_enabled_->setButtonText(
"MPE ENABLED");
148 voice_priority_ = std::make_unique<TextSelector>(
"voice_priority");
150 voice_priority_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
154 voice_override_ = std::make_unique<TextSelector>(
"voice_override");
156 voice_override_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
160 tuning_ = std::make_unique<TuningSelector>(
"tuning");
161 addAndMakeVisible(tuning_.get());
164 tuning_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
166 tuning_->setLongStringLookup(kTuningNames);
168 voice_tune_ = std::make_unique<SynthSlider>(
"voice_tune");
170 voice_tune_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
173 voice_transpose_ = std::make_unique<SynthSlider>(
"voice_transpose");
175 voice_transpose_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
208 int width = getWidth() - 2 * widget_margin;
209 int x = widget_margin;
210 int y = title_width + widget_margin;
212 int width_left = (width - widget_margin) / 2;
213 int voice_y = getHeight() - widget_margin - component_height;
214 voice_tune_->setBounds(x, voice_y, width_left, component_height);
216 int x_right = x + width_left + widget_margin;
217 int width_right = getWidth() - x_right - widget_margin;
218 voice_transpose_->setBounds(x_right, voice_y, width_right, component_height);
221 mpe_enabled_->setBounds(x, voice_y - mpe_height - widget_margin, width, mpe_height);
223 int remaining_height = mpe_enabled_->getY() - y;
224 int override_y = y + remaining_height / 3;
225 int tuning_y = y + (2 * remaining_height) / 3;
226 voice_priority_->setBounds(x, y, width, override_y - y - widget_margin);
227 voice_override_->setBounds(x, override_y, width, tuning_y - override_y - widget_margin);
228 tuning_->setBounds(x, tuning_y, width, mpe_enabled_->getY() - tuning_y - widget_margin);
232 if (clicked_button == mpe_enabled_.get())
233 setMpeEnabled(mpe_enabled_->getToggleState());
240 setMpeEnabled(mpe_enabled_->getToggleState());
244 void setMpeEnabled(
bool enabled) {
245 mpe_enabled_->setToggleState(enabled, NotificationType::dontSendNotification);
252 std::unique_ptr<SynthButton> mpe_enabled_;
253 std::unique_ptr<TextSelector> voice_priority_;
254 std::unique_ptr<TextSelector> voice_override_;
255 std::unique_ptr<TuningSelector> tuning_;
257 std::unique_ptr<SynthSlider> voice_tune_;
258 std::unique_ptr<SynthSlider> voice_transpose_;
268 oversampling_1x_ = std::make_unique<OpenGlToggleButton>(
"");
269 oversampling_1x_->addListener(
this);
271 oversampling_1x_->setButtonText(
"1x (Draft)");
272 addAndMakeVisible(oversampling_1x_.get());
275 oversampling_2x_ = std::make_unique<OpenGlToggleButton>(
"");
276 oversampling_2x_->addListener(
this);
278 oversampling_2x_->setButtonText(
"2x (Recommended)");
279 addAndMakeVisible(oversampling_2x_.get());
282 oversampling_4x_ = std::make_unique<OpenGlToggleButton>(
"");
283 oversampling_4x_->addListener(
this);
285 oversampling_4x_->setButtonText(
"4x (High CPU)");
286 addAndMakeVisible(oversampling_4x_.get());
289 oversampling_8x_ = std::make_unique<OpenGlToggleButton>(
"");
290 oversampling_8x_->addListener(
this);
292 oversampling_8x_->setButtonText(
"8x (Ultra CPU)");
293 addAndMakeVisible(oversampling_8x_.get());
299 setSelectedOversamplingButton(controls[
"oversampling"]->value());
307 g.fillRoundedRectangle(oversampling_1x_->getBounds().toFloat(), rounding);
308 g.fillRoundedRectangle(oversampling_2x_->getBounds().toFloat(), rounding);
309 g.fillRoundedRectangle(oversampling_4x_->getBounds().toFloat(), rounding);
310 g.fillRoundedRectangle(oversampling_8x_->getBounds().toFloat(), rounding);
320 int width = getWidth() - 2 * widget_margin;
321 int x = widget_margin;
322 int y = title_width + widget_margin;
323 int oversampling_bottom = getHeight();
324 int oversampling_height = oversampling_bottom - y;
325 int oversample_2x_y = y + oversampling_height / 4;
326 int oversample_4x_y = y + (2 * oversampling_height) / 4;
327 int oversample_8x_y = y + (3 * oversampling_height) / 4;
328 oversampling_1x_->setBounds(x, y, width, oversample_2x_y - y - widget_margin);
329 oversampling_2x_->setBounds(x, oversample_2x_y, width, oversample_4x_y - oversample_2x_y - widget_margin);
330 oversampling_4x_->setBounds(x, oversample_4x_y, width, oversample_8x_y - oversample_4x_y - widget_margin);
331 oversampling_8x_->setBounds(x, oversample_8x_y, width, oversampling_bottom - oversample_8x_y - widget_margin);
335 if (clicked_button == oversampling_1x_.get())
336 setOversamplingAmount(0);
337 else if (clicked_button == oversampling_2x_.get())
338 setOversamplingAmount(1);
339 else if (clicked_button == oversampling_4x_.get())
340 setOversamplingAmount(2);
341 else if (clicked_button == oversampling_8x_.get())
342 setOversamplingAmount(3);
346 void setSelectedOversamplingButton(
int oversampling_amount) {
347 oversampling_1x_->setToggleState(oversampling_amount == 0, NotificationType::dontSendNotification);
348 oversampling_2x_->setToggleState(oversampling_amount == 1, NotificationType::dontSendNotification);
349 oversampling_4x_->setToggleState(oversampling_amount == 2, NotificationType::dontSendNotification);
350 oversampling_8x_->setToggleState(oversampling_amount == 3, NotificationType::dontSendNotification);
353 void setOversamplingAmount(
int oversampling_amount) {
354 setSelectedOversamplingButton(oversampling_amount);
363 std::unique_ptr<OpenGlToggleButton> oversampling_1x_;
364 std::unique_ptr<OpenGlToggleButton> oversampling_2x_;
365 std::unique_ptr<OpenGlToggleButton> oversampling_4x_;
366 std::unique_ptr<OpenGlToggleButton> oversampling_8x_;
376 frequency_display_ = std::make_unique<TextSelector>(
"frequency_display");
377 frequency_display_->setRange(0.0, 1.0, 1.0);
380 frequency_display_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
382 frequency_display_->setStringLookup(kFrequencyDisplayNames);
383 frequency_display_->setLongStringLookup(kFrequencyDisplayNames);
388 if (default_skin.exists()) {
390 for (
int i = 0; i < skins_.size(); ++i) {
391 if (skins_[i].getFileNameWithoutExtension() == skin_name)
394 if (skin_value_ == 0)
395 skin_value_ = skins_.size() + 1;
398 short_skin_strings_ = std::make_unique<std::string[]>(skins_.size() + 2);
399 long_skin_strings_ = std::make_unique<std::string[]>(skins_.size() + 2);
400 short_skin_strings_[0] =
"Default";
401 long_skin_strings_[0] =
"Default";
402 short_skin_strings_[skins_.size() + 1] =
"Custom";
403 long_skin_strings_[skins_.size() + 1] =
"Load Custom Skin...";
405 for (
int i = 0; i < skins_.size(); ++i) {
406 short_skin_strings_[i + 1] = skins_[i].getFileNameWithoutExtension().toStdString();
407 long_skin_strings_[i + 1] = skins_[i].getFileNameWithoutExtension().toStdString();
410 skin_ = std::make_unique<TextSelector>(
"skin");
411 skin_->setRange(0.0, skins_.size() + 1, 1);
412 skin_->setValue(skin_value_, dontSendNotification);
413 skin_->setScrollEnabled(
false);
415 skin_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
417 skin_->setStringLookup(short_skin_strings_.get());
418 skin_->setLongStringLookup(long_skin_strings_.get());
437 int width = getWidth() - 2 * widget_margin;
438 int x = widget_margin;
440 int y = title_width + widget_margin;
441 int bottom = getHeight() - widget_margin;
443 int frequency_height = (bottom - y - widget_margin) / 2;
445 frequency_display_->setBounds(x, y, width, frequency_height);
446 int skin_y = y + frequency_height + widget_margin;
447 skin_->setBounds(x, skin_y, width, bottom - skin_y);
452 if (parent && parent->
getGui())
457 SynthSection::parentHierarchyChanged();
462 FullInterface* full_interface = findParentComponentOfClass<FullInterface>();
467 if (changed_slider == frequency_display_.get()) {
471 else if (changed_slider == skin_.get()) {
473 if (skin_->getValue() == 0.0f) {
474 if (default_skin.exists() && default_skin.hasWriteAccess())
475 default_skin.deleteFile();
481 else if (skin_->getValue() == skins_.size() + 1) {
483 if (open_box.browseForFileToOpen()) {
484 File skin_file = open_box.getResult();
494 File skin_file = skins_[skin_->getValue() - 1];
495 if (!skin_file.exists())
499 skin_file.copyFileTo(default_skin);
503 skin_value_ = skin_->getValue();
508 std::unique_ptr<TextSelector> frequency_display_;
509 std::unique_ptr<TextSelector> skin_;
513 std::unique_ptr<std::string[]> short_skin_strings_;
514 std::unique_ptr<std::string[]> long_skin_strings_;
524 oscilloscope_ = std::make_unique<Oscilloscope>();
527 spectrogram_ = std::make_unique<Spectrogram>();
537 int x = widget_margin;
538 int width = getWidth() - 2 * widget_margin;
540 int oscilloscope_height = (getHeight() - oscilloscope_y) / 2;
541 oscilloscope_->setBounds(x, oscilloscope_y, width, oscilloscope_height);
543 int spectrogram_y = oscilloscope_->getBottom() + widget_margin;
544 int spectrogram_height = getHeight() - spectrogram_y - widget_margin;
545 spectrogram_->setBounds(x, spectrogram_y, width, spectrogram_height);
549 oscilloscope_->setOscilloscopeMemory(memory);
553 spectrogram_->setAudioMemory(memory);
557 std::unique_ptr<Oscilloscope> oscilloscope_;
558 std::unique_ptr<Spectrogram> spectrogram_;
570 oscillator_advanceds_[i] = std::make_unique<OscillatorAdvancedSection>(i + 1, mono_modulations,
577 voice_settings_ = std::make_unique<VoiceSettings>();
580 oversample_settings_ = std::make_unique<OversampleSettings>();
583 display_settings_ = std::make_unique<DisplaySettings>();
586 output_displays_ = std::make_unique<OutputDisplays>();
603 int settings_top = padding;
609 int settings_height = getHeight() - settings_top;
610 int panel_width = getWidth() * 0.22f;
613 voice_settings_->setBounds(0, settings_top, panel_width, settings_height);
615 int oversample_x = voice_settings_->getRight() + padding;
617 int oversample_height = settings_height - display_height - padding;
620 oversample_settings_->setBounds(oversample_x, settings_top, panel_width, oversample_height);
622 int display_y = oversample_settings_->getBottom() + padding;
623 display_settings_->setBounds(oversample_x, display_y, panel_width, display_height);
625 int displays_x = display_settings_->getRight() + padding;
626 int displays_width = getWidth() - displays_x;
628 output_displays_->setBounds(displays_x, settings_top, displays_width, settings_height);
632 oscillator_advanceds_[index]->passOscillatorSection(oscillator);
636 output_displays_->setOscilloscopeMemory(memory);
640 output_displays_->setAudioMemory(memory);
Definition master_controls_interface.cpp:371
void loadSkin(Skin &skin)
Definition master_controls_interface.cpp:461
DisplaySettings()
Definition master_controls_interface.cpp:373
void parentHierarchyChanged() override
Definition master_controls_interface.cpp:456
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition master_controls_interface.cpp:422
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition master_controls_interface.cpp:432
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition master_controls_interface.cpp:421
void sliderValueChanged(Slider *changed_slider) override
Called when a slider value changes. Updates the synth parameter accordingly.
Definition master_controls_interface.cpp:466
void setDisplayValue(Skin::ValueId id, float value)
Definition master_controls_interface.cpp:450
The main GUI container for the entire synthesizer interface.
Definition full_interface.h:61
void reloadSkin(const Skin &skin)
Reloads and applies a new skin, then adjusts layout accordingly.
Definition full_interface.cpp:276
static std::string getLoadedSkin()
Retrieves the currently loaded skin name.
Definition load_save.cpp:1572
static bool displayHzFrequency()
Determines if frequencies should be displayed in Hz.
Definition load_save.cpp:1590
static void getAllSkins(Array< File > &skins)
Retrieves all skins from skin directories.
Definition load_save.cpp:1843
static void saveDisplayHzFrequency(bool display_hz)
Saves the preference to display frequency in Hz.
Definition load_save.cpp:1312
static File getDefaultSkin()
Retrieves the file specifying the default skin.
Definition load_save.cpp:1168
static void saveLoadedSkin(const std::string &name)
Saves the currently loaded skin name to the config.
Definition load_save.cpp:1300
MasterControlsInterface(const vital::output_map &mono_modulations, const vital::output_map &poly_modulations, bool synth)
Constructs a MasterControlsInterface.
Definition master_controls_interface.cpp:563
void paintBackground(Graphics &g) override
Paints the background of the interface.
Definition master_controls_interface.cpp:595
void setOscilloscopeMemory(const vital::poly_float *memory)
Sets the oscilloscope memory for audio visualization.
Definition master_controls_interface.cpp:635
void resized() override
Resizes and lays out all child components (oscillators, voice settings, etc.).
Definition master_controls_interface.cpp:599
void passOscillatorSection(int index, const OscillatorSection *oscillator)
Passes an oscillator section model to the corresponding advanced section UI.
Definition master_controls_interface.cpp:631
virtual ~MasterControlsInterface()
Destructor.
Definition master_controls_interface.cpp:593
void setAudioMemory(const vital::StereoMemory *memory)
Sets the audio memory for spectrogram analysis.
Definition master_controls_interface.cpp:639
virtual void valueChanged() override
Called when the slider value changes. Redraws the image to reflect the new value.
Definition synth_slider.h:80
void parentHierarchyChanged() override
Called when the parent hierarchy changes. Used for retrieving parent sections.
Definition synth_slider.h:86
SynthSection * parent_
The parent SynthSection.
Definition synth_slider.h:289
A UI section representing an oscillator in the synthesizer.
Definition oscillator_section.h:32
Definition master_controls_interface.cpp:519
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition master_controls_interface.cpp:533
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition master_controls_interface.cpp:531
void setAudioMemory(const vital::StereoMemory *memory)
Definition master_controls_interface.cpp:552
OutputDisplays()
Definition master_controls_interface.cpp:521
void setOscilloscopeMemory(const vital::poly_float *memory)
Definition master_controls_interface.cpp:548
Definition master_controls_interface.cpp:263
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition master_controls_interface.cpp:313
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition master_controls_interface.cpp:315
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition master_controls_interface.cpp:302
OversampleSettings()
Definition master_controls_interface.cpp:265
void buttonClicked(Button *clicked_button) override
Called when a button is clicked. Updates the synth parameter accordingly.
Definition master_controls_interface.cpp:334
void setAllValues(vital::control_map &controls) override
Sets values for all known parameters from a control map.
Definition master_controls_interface.cpp:297
Manages the overall color and value theme (or "skin") of the user interface.
Definition skin.h:24
bool loadFromFile(File source)
Loads skin state from a file.
Definition skin.cpp:435
ValueId
Identifiers for various UI scaling/spacing values and configuration constants.
Definition skin.h:70
@ kPadding
Definition skin.h:81
@ kLargePadding
Definition skin.h:82
@ kTextButtonHeight
Definition skin.h:87
@ kLabelBackgroundRounding
Definition skin.h:74
@ kFrequencyDisplay
Definition skin.h:116
@ kTextComponentBackground
Definition skin.h:147
@ kAdvanced
Definition skin.h:59
void loadDefaultSkin()
Loads a default built-in skin.
Definition skin.cpp:195
void valueChangedInternal(const std::string &name, vital::mono_float value)
Handles internal value changes, updating the parameter and optionally notifying the host.
Definition synth_base.cpp:54
Tuning * getTuning()
Returns a pointer to the synth's Tuning object.
Definition synth_base.h:554
void setMpeEnabled(bool enabled)
Enables or disables MPE (MIDI Polyphonic Expression) mode.
Definition synth_base.cpp:560
void loadTuningFile(const File &file)
Loads a tuning file into the synthesizer’s tuning system.
Definition synth_base.cpp:312
void notifyOversamplingChanged()
Notifies that oversampling settings have changed, reinitializing the engine if needed.
Definition synth_base.cpp:734
An interface class linking the Vital synthesizer backend (SynthBase) with a GUI.
Definition synth_gui_interface.h:56
FullInterface * getGui()
Gets the FullInterface GUI component if it exists.
Definition synth_gui_interface.h:223
SynthBase * getSynth()
Returns the SynthBase instance this interface is managing.
Definition synth_gui_interface.h:85
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
void drawTextComponentBackground(Graphics &g, Rectangle< int > bounds, bool extend_to_label)
Draws a background for a text component area.
Definition synth_section.cpp:319
virtual void buttonClicked(Button *clicked_button) override
Called when a button is clicked. Updates the synth parameter accordingly.
Definition synth_section.cpp:398
void addSlider(SynthSlider *slider, bool show=true, bool listen=true)
Definition synth_section.cpp:445
void addSubSection(SynthSection *section, bool show=true)
Adds a subsection (another SynthSection) as a child.
Definition synth_section.cpp:457
void setSidewaysHeading(bool sideways)
Definition synth_section.h:771
virtual void resized() override
Called when the component is resized. Arranges layout of child components.
Definition synth_section.cpp:35
static constexpr double kTransposeMouseSensitivity
Definition synth_section.h:204
void paintChildrenBackgrounds(Graphics &g)
Paints the backgrounds for all child sections.
Definition synth_section.cpp:274
void drawLabelForComponent(Graphics &g, String text, Component *component, bool text_component=false)
Draws a label for a given component.
Definition synth_section.h:548
void setLabelFont(Graphics &g)
Sets the Graphics context font and color for labels.
Definition synth_section.cpp:740
void showPopupSelector(Component *source, Point< int > position, const PopupItems &options, std::function< void(int)> callback, std::function< void()> cancel={ })
Shows a popup selector with options.
Definition synth_section.cpp:119
void addButton(OpenGlToggleButton *button, bool show=true)
Definition synth_section.cpp:428
float findValue(Skin::ValueId value_id) const
Finds a value in the skin overrides or from the parent if not found locally.
Definition synth_section.cpp:18
virtual void paintBackground(Graphics &g)
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition synth_section.cpp:77
float getKnobSectionHeight()
Definition synth_section.cpp:633
void addOpenGlComponent(OpenGlComponent *open_gl_component, bool to_beginning=false)
Definition synth_section.cpp:489
virtual void setAllValues(vital::control_map &controls)
Sets values for all known parameters from a control map.
Definition synth_section.cpp:827
float getTitleWidth()
Definition synth_section.cpp:629
void setSkinOverride(Skin::SectionOverride skin_override)
Definition synth_section.h:303
void setSkinValue(Skin::ValueId id, float value)
Sets a single skin value override.
Definition synth_section.h:748
virtual void paintTabShadow(Graphics &g)
Paints a tab-like shadow effect around the component.
Definition synth_section.cpp:188
float getWidgetMargin()
Definition synth_section.cpp:676
void setStringLookup(const std::string *lookup)
Definition synth_slider.h:470
virtual void mouseDown(const MouseEvent &e) override
Mouse event overrides for custom behavior.
Definition synth_slider.cpp:234
const std::string * string_lookup_
Definition synth_slider.h:763
static TextLookAndFeel * instance()
Singleton instance access.
Definition text_look_and_feel.h:106
A specialized SynthSlider that displays a popup menu of text options.
Definition text_selector.h:14
const std::string * long_lookup_
Optional alternate lookup table for longer strings.
Definition text_selector.h:37
void setName(const std::string &name)
Sets a custom name for the current tuning, clearing any mapping name.
Definition tuning.h:170
static String allFileExtensions()
Returns a string listing all supported tuning file extensions.
Definition tuning.cpp:93
void loadScalaFile(const StringArray &scala_lines)
Loads a Scala (.scl) file from a set of lines.
Definition tuning.cpp:160
std::string getName() const
Gets the name of the current tuning, combining tuning and mapping names if both exist.
Definition tuning.h:157
void setDefaultTuning()
Resets the tuning to the default 12-tone equal temperament with a standard reference pitch.
Definition tuning.cpp:354
void mouseDown(const MouseEvent &e) override
Handles mouse down events, including showing a popup menu for selecting tunings.
Definition master_controls_interface.cpp:42
void valueChanged() override
Called when the value of the selector changes.
Definition master_controls_interface.cpp:63
void setTuning(int tuning)
Sets the current tuning style.
Definition master_controls_interface.cpp:74
TuningSelector(String name)
Constructs a TuningSelector with a given name.
Definition master_controls_interface.cpp:31
virtual ~TuningSelector()
Destructor.
Definition master_controls_interface.cpp:40
void parentHierarchyChanged() override
Called when the component's parent hierarchy changes.
Definition master_controls_interface.cpp:69
TuningStyle
Enumerates the available tuning styles.
Definition master_controls_interface.h:30
@ k5Limit
Just intonation with a 5-limit scale.
Definition master_controls_interface.h:33
@ kNumTunings
Number of available tuning styles.
Definition master_controls_interface.h:35
@ k7Limit
Just intonation with a 7-limit scale.
Definition master_controls_interface.h:32
@ kPythagorean
Pythagorean tuning.
Definition master_controls_interface.h:34
Definition master_controls_interface.cpp:138
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition master_controls_interface.cpp:202
void buttonClicked(Button *clicked_button) override
Called when a button is clicked. Updates the synth parameter accordingly.
Definition master_controls_interface.cpp:231
VoiceSettings()
Definition master_controls_interface.cpp:140
void setAllValues(vital::control_map &controls) override
Sets values for all known parameters from a control map.
Definition master_controls_interface.cpp:238
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition master_controls_interface.cpp:180
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition master_controls_interface.cpp:200
A specialized MemoryTemplate for two-channel (stereo) audio.
Definition memory.h:216
const std::string kVoicePriorityNames[]
Voice allocation priority modes (e.g., newest, oldest note).
Definition synth_strings.h:339
const std::string kVoiceOverrideNames[]
Behavior of what happens when voice limit is exceeded (kill or steal).
Definition synth_strings.h:351
constexpr int kNumOscillators
Number of oscillators available in Vital.
Definition synth_constants.h:16
const std::string kSkinExtension
File extension for Vital skin/theme files.
Definition synth_constants.h:97
std::map< std::string, Output * > output_map
Maps parameter names to Output pointers, representing output signals from various modules.
Definition synth_types.h:229
std::map< std::string, Value * > control_map
Maps parameter names to Value pointers representing synth control parameters.
Definition synth_types.h:214
Represents a vector of floating-point values using SIMD instructions.
Definition poly_values.h:600
Declares the SynthSlider and related classes, providing various slider styles and functionality in th...
Declares the TextSelector class and PaintPatternSelector class for selecting text-based options and d...