Skip to content

Commit 1fd30c7

Browse files
committed
v0.9
1. add note y-axis (optional) 2. UI optimization
1 parent 392f9d3 commit 1fd30c7

File tree

5 files changed

+589
-319
lines changed

5 files changed

+589
-319
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
cmake_minimum_required(VERSION 3.22)
44

5-
project(PerceptoMap VERSION 0.8)
5+
project(PerceptoMap VERSION 0.9)
66

77

88
### Dependency versions ###

Source/PluginEditor.cpp

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
6262
addAndMakeVisible(row1stLabel);
6363
row1stLabel.setText("General:", juce::dontSendNotification);
6464
row1stLabel.setJustificationType(juce::Justification::centredRight);
65-
row1stLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(0.5f));
65+
row1stLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(labelAlpha));
6666
row1stLabel.setInterceptsMouseClicks(false, false);
6767

6868
// Add and configure FPS dropdown
@@ -117,9 +117,9 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
117117

118118
// Label
119119
addAndMakeVisible(row2ndLabel);
120-
row2ndLabel.setText("Modes:", juce::dontSendNotification);
120+
row2ndLabel.setText("Mode:", juce::dontSendNotification);
121121
row2ndLabel.setJustificationType(juce::Justification::centredRight);
122-
row2ndLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(0.5f));
122+
row2ndLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(labelAlpha));
123123
row2ndLabel.setInterceptsMouseClicks(false, false);
124124

125125
// Add and configure colour scheme combo box
@@ -167,16 +167,21 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
167167
spectrogramModeBox.onChange = [this]()
168168
{
169169
auto selectedId = spectrogramModeBox.getSelectedId();
170-
spectrogram.setSpectrogramMode(static_cast<SpectrogramComponent::SpectrogramMode>(selectedId));
170+
auto mode = static_cast<SpectrogramComponent::SpectrogramMode>(selectedId);
171+
spectrogram.setSpectrogramMode(mode);
171172
updateLegendImage();
173+
174+
// Enable/disable controls by mode
175+
MenuDisableControl(mode);
176+
172177
repaint();
173178
};
174179

175180
// Label
176181
addAndMakeVisible(menuDisplayLabel);
177182
menuDisplayLabel.setText("Display:", juce::dontSendNotification);
178183
menuDisplayLabel.setJustificationType(juce::Justification::centredRight);
179-
menuDisplayLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(0.5f));
184+
menuDisplayLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(labelAlpha));
180185
menuDisplayLabel.setInterceptsMouseClicks(false, false);
181186

182187
// Add and configure dB floor slider (lower limit)
@@ -187,7 +192,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
187192
);
188193
floorDbSlider.setRange(-200.0, -1.0, 1.0); // floor dB from -400 to -20
189194
floorDbSlider.setValue(-100.0); // default: -100 dB
190-
floorDbSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 80, 20);
195+
floorDbSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 60, 20);
191196

192197
floorDbSlider.onValueChange = [this]()
193198
{
@@ -208,7 +213,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
208213
normFactorSlider.setRange(0.001, 5.0, 0.001); // allow finer range
209214
normFactorSlider.setSkewFactorFromMidPoint(1.0); // nonlinear feel
210215
normFactorSlider.setValue(1.0); // default
211-
normFactorSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 80, 20);
216+
normFactorSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 60, 20);
212217

213218
normFactorSlider.onValueChange = [this]()
214219
{
@@ -226,7 +231,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
226231
addAndMakeVisible(row3rdLabel);
227232
row3rdLabel.setText("Axes:", juce::dontSendNotification);
228233
row3rdLabel.setJustificationType(juce::Justification::centredRight);
229-
row3rdLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(0.5f));
234+
row3rdLabel.setColour(juce::Label::textColourId, juce::Colours::white.withAlpha(labelAlpha));
230235
row3rdLabel.setInterceptsMouseClicks(false, false);
231236

232237
// Add and configure scroll speed dropdown
@@ -371,7 +376,65 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
371376
if (srNow > 0.0)
372377
refreshYRangeSliderForSampleRate(srNow);
373378

379+
// toggle button for y axis (note)
380+
addAndMakeVisible(noteAxisToggle);
381+
noteAxisToggle.setButtonText("Note Axis");
382+
noteAxisToggle.setTooltip("Show note axis. Note: Not applicable in MFCC / Chroma mode");
383+
noteAxisToggle.onClick = [this]()
384+
{
385+
spectrogram.setShowNoteCAxis(noteAxisToggle.getToggleState());
386+
repaint();
387+
};
388+
}
374389

390+
void SpectrogramAudioProcessorEditor::MenuDisableControl(SpectrogramComponent::SpectrogramMode mode)
391+
{
392+
switch (mode)
393+
{
394+
// Mel
395+
case SpectrogramComponent::SpectrogramMode::Mel:
396+
case SpectrogramComponent::SpectrogramMode::MelPlus:
397+
{
398+
logScaleBox.setEnabled(false);
399+
yRangeSlider.setEnabled(true);
400+
yMinHzEdit.setEnabled(true);
401+
yMaxHzEdit.setEnabled(true);
402+
floorDbSlider.setEnabled(true);
403+
noteAxisToggle.setEnabled(true);
404+
break;
405+
}
406+
// MFCC
407+
case SpectrogramComponent::SpectrogramMode::MFCC:
408+
{
409+
logScaleBox.setEnabled(false);
410+
yRangeSlider.setEnabled(false);
411+
yMinHzEdit.setEnabled(false);
412+
yMaxHzEdit.setEnabled(false);
413+
floorDbSlider.setEnabled(false);
414+
noteAxisToggle.setEnabled(false);
415+
break;
416+
}
417+
// Chroma
418+
case SpectrogramComponent::SpectrogramMode::Chroma:
419+
{
420+
logScaleBox.setEnabled(false);
421+
yRangeSlider.setEnabled(false);
422+
yMinHzEdit.setEnabled(false);
423+
yMaxHzEdit.setEnabled(false);
424+
floorDbSlider.setEnabled(false);
425+
noteAxisToggle.setEnabled(false);
426+
break;
427+
}
428+
// Linear STFT
429+
default:
430+
logScaleBox.setEnabled(true);
431+
yRangeSlider.setEnabled(true);
432+
yMinHzEdit.setEnabled(true);
433+
yMaxHzEdit.setEnabled(true);
434+
floorDbSlider.setEnabled(true);
435+
noteAxisToggle.setEnabled(true);
436+
break;
437+
}
375438
}
376439

377440
SpectrogramAudioProcessorEditor::~SpectrogramAudioProcessorEditor() noexcept
@@ -478,15 +541,16 @@ void SpectrogramAudioProcessorEditor::updateControlsVisibility()
478541
yRangeSlider.setVisible(controlsVisible);
479542
yMinHzEdit.setVisible(controlsVisible);
480543
yMaxHzEdit.setVisible(controlsVisible);
544+
noteAxisToggle.setVisible(controlsVisible);
481545
}
482546

483547
void SpectrogramAudioProcessorEditor::resized()
484548
{
485549
auto area = getLocalBounds();
486550

487551
// fixed small button for menu visibility
488-
const int baseMargin = 6;
489-
toggleUiButton.setBounds(getWidth() - baseMargin - toggleW, baseMargin / 2, toggleW, toggleW);
552+
const int baseMargin = 3;
553+
toggleUiButton.setBounds(getWidth() - baseMargin - toggleW, baseMargin, toggleW, toggleW);
490554

491555
const int rowH = controlsVisible ? kRowHeight : 0;
492556

@@ -499,7 +563,7 @@ void SpectrogramAudioProcessorEditor::resized()
499563
// label
500564
row1stLabel.setBounds(topRow.removeFromLeft(60));
501565
// UI FPS
502-
fpsBox.setBounds(topRow.removeFromLeft(90).reduced(5));
566+
fpsBox.setBounds(topRow.removeFromLeft(100).reduced(5));
503567
// FFT size dropdown
504568
fftSizeBox.setBounds(topRow.removeFromLeft(90).reduced(5));
505569
// overlap
@@ -511,13 +575,13 @@ void SpectrogramAudioProcessorEditor::resized()
511575
if (controlsVisible)
512576
{
513577
// label
514-
row2ndLabel.setBounds(secondRow.removeFromLeft(60));
515-
// colour scheme
516-
colourSchemeBox.setBounds(secondRow.removeFromLeft(100).reduced(5));
578+
row2ndLabel.setBounds(secondRow.removeFromLeft(50));
517579
// spectrogram mode
518580
spectrogramModeBox.setBounds(secondRow.removeFromLeft(100).reduced(5));
519581
// label
520582
menuDisplayLabel.setBounds(secondRow.removeFromLeft(60));
583+
// colour scheme
584+
colourSchemeBox.setBounds(secondRow.removeFromLeft(100).reduced(5));
521585
// slider floor value colour scheme
522586
floorDbSlider.setBounds(secondRow.removeFromLeft(200).reduced(5));
523587
// slider norm factor
@@ -529,15 +593,17 @@ void SpectrogramAudioProcessorEditor::resized()
529593
if (controlsVisible)
530594
{
531595
// label
532-
row3rdLabel.setBounds(thirdRow.removeFromLeft(60));
596+
row3rdLabel.setBounds(thirdRow.removeFromLeft(50));
533597
// x axis scroll speed
534598
scrollSpeedBox.setBounds(thirdRow.removeFromLeft(100).reduced(5));
535599
// y axis type: log or linear (for linear STFT spectrogram)
536600
logScaleBox.setBounds(thirdRow.removeFromLeft(100).reduced(5));
537601
// slider y axis range
538-
yMinHzEdit.setBounds(thirdRow.removeFromLeft(80).reduced(5));
602+
yMinHzEdit.setBounds(thirdRow.removeFromLeft(60).reduced(5));
539603
yRangeSlider.setBounds(thirdRow.removeFromLeft(200).reduced(5));
540-
yMaxHzEdit.setBounds(thirdRow.removeFromLeft(80).reduced(5));
604+
yMaxHzEdit.setBounds(thirdRow.removeFromLeft(60).reduced(5));
605+
// y axis (note)
606+
noteAxisToggle.setBounds(thirdRow.removeFromLeft(130).reduced(5));
541607
}
542608

543609
// rest: spectrogram

Source/PluginEditor.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class SpectrogramAudioProcessorEditor : public juce::AudioProcessorEditor
5252
juce::Image legendImage;
5353
void updateLegendImage();
5454

55+
// Disable/enable controls
56+
void MenuDisableControl(SpectrogramComponent::SpectrogramMode mode);
57+
5558
// display/hide menu button
5659
juce::TextButton toggleUiButton{HideMenuText};
5760
bool controlsVisible = true;
@@ -95,7 +98,11 @@ class SpectrogramAudioProcessorEditor : public juce::AudioProcessorEditor
9598
// min. y range
9699
static constexpr double kMinBandWidthHz = 10.0;
97100

101+
// y axis (note)
102+
juce::ToggleButton noteAxisToggle;
103+
98104
// row labels
105+
float labelAlpha = 0.8f;
99106
juce::Label row1stLabel;
100107
juce::Label row2ndLabel;
101108
juce::Label row3rdLabel;

0 commit comments

Comments
 (0)