@@ -62,7 +62,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
62
62
addAndMakeVisible (row1stLabel);
63
63
row1stLabel.setText (" General:" , juce::dontSendNotification);
64
64
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 ));
66
66
row1stLabel.setInterceptsMouseClicks (false , false );
67
67
68
68
// Add and configure FPS dropdown
@@ -117,9 +117,9 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
117
117
118
118
// Label
119
119
addAndMakeVisible (row2ndLabel);
120
- row2ndLabel.setText (" Modes :" , juce::dontSendNotification);
120
+ row2ndLabel.setText (" Mode :" , juce::dontSendNotification);
121
121
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 ));
123
123
row2ndLabel.setInterceptsMouseClicks (false , false );
124
124
125
125
// Add and configure colour scheme combo box
@@ -167,16 +167,21 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
167
167
spectrogramModeBox.onChange = [this ]()
168
168
{
169
169
auto selectedId = spectrogramModeBox.getSelectedId ();
170
- spectrogram.setSpectrogramMode (static_cast <SpectrogramComponent::SpectrogramMode>(selectedId));
170
+ auto mode = static_cast <SpectrogramComponent::SpectrogramMode>(selectedId);
171
+ spectrogram.setSpectrogramMode (mode);
171
172
updateLegendImage ();
173
+
174
+ // Enable/disable controls by mode
175
+ MenuDisableControl (mode);
176
+
172
177
repaint ();
173
178
};
174
179
175
180
// Label
176
181
addAndMakeVisible (menuDisplayLabel);
177
182
menuDisplayLabel.setText (" Display:" , juce::dontSendNotification);
178
183
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 ));
180
185
menuDisplayLabel.setInterceptsMouseClicks (false , false );
181
186
182
187
// Add and configure dB floor slider (lower limit)
@@ -187,7 +192,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
187
192
);
188
193
floorDbSlider.setRange (-200.0 , -1.0 , 1.0 ); // floor dB from -400 to -20
189
194
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 );
191
196
192
197
floorDbSlider.onValueChange = [this ]()
193
198
{
@@ -208,7 +213,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
208
213
normFactorSlider.setRange (0.001 , 5.0 , 0.001 ); // allow finer range
209
214
normFactorSlider.setSkewFactorFromMidPoint (1.0 ); // nonlinear feel
210
215
normFactorSlider.setValue (1.0 ); // default
211
- normFactorSlider.setTextBoxStyle (juce::Slider::TextBoxRight, false , 80 , 20 );
216
+ normFactorSlider.setTextBoxStyle (juce::Slider::TextBoxRight, false , 60 , 20 );
212
217
213
218
normFactorSlider.onValueChange = [this ]()
214
219
{
@@ -226,7 +231,7 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
226
231
addAndMakeVisible (row3rdLabel);
227
232
row3rdLabel.setText (" Axes:" , juce::dontSendNotification);
228
233
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 ));
230
235
row3rdLabel.setInterceptsMouseClicks (false , false );
231
236
232
237
// Add and configure scroll speed dropdown
@@ -371,7 +376,65 @@ SpectrogramAudioProcessorEditor::SpectrogramAudioProcessorEditor(SpectrogramAudi
371
376
if (srNow > 0.0 )
372
377
refreshYRangeSliderForSampleRate (srNow);
373
378
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
+ }
374
389
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
+ }
375
438
}
376
439
377
440
SpectrogramAudioProcessorEditor::~SpectrogramAudioProcessorEditor () noexcept
@@ -478,15 +541,16 @@ void SpectrogramAudioProcessorEditor::updateControlsVisibility()
478
541
yRangeSlider.setVisible (controlsVisible);
479
542
yMinHzEdit.setVisible (controlsVisible);
480
543
yMaxHzEdit.setVisible (controlsVisible);
544
+ noteAxisToggle.setVisible (controlsVisible);
481
545
}
482
546
483
547
void SpectrogramAudioProcessorEditor::resized ()
484
548
{
485
549
auto area = getLocalBounds ();
486
550
487
551
// 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);
490
554
491
555
const int rowH = controlsVisible ? kRowHeight : 0 ;
492
556
@@ -499,7 +563,7 @@ void SpectrogramAudioProcessorEditor::resized()
499
563
// label
500
564
row1stLabel.setBounds (topRow.removeFromLeft (60 ));
501
565
// UI FPS
502
- fpsBox.setBounds (topRow.removeFromLeft (90 ).reduced (5 ));
566
+ fpsBox.setBounds (topRow.removeFromLeft (100 ).reduced (5 ));
503
567
// FFT size dropdown
504
568
fftSizeBox.setBounds (topRow.removeFromLeft (90 ).reduced (5 ));
505
569
// overlap
@@ -511,13 +575,13 @@ void SpectrogramAudioProcessorEditor::resized()
511
575
if (controlsVisible)
512
576
{
513
577
// label
514
- row2ndLabel.setBounds (secondRow.removeFromLeft (60 ));
515
- // colour scheme
516
- colourSchemeBox.setBounds (secondRow.removeFromLeft (100 ).reduced (5 ));
578
+ row2ndLabel.setBounds (secondRow.removeFromLeft (50 ));
517
579
// spectrogram mode
518
580
spectrogramModeBox.setBounds (secondRow.removeFromLeft (100 ).reduced (5 ));
519
581
// label
520
582
menuDisplayLabel.setBounds (secondRow.removeFromLeft (60 ));
583
+ // colour scheme
584
+ colourSchemeBox.setBounds (secondRow.removeFromLeft (100 ).reduced (5 ));
521
585
// slider floor value colour scheme
522
586
floorDbSlider.setBounds (secondRow.removeFromLeft (200 ).reduced (5 ));
523
587
// slider norm factor
@@ -529,15 +593,17 @@ void SpectrogramAudioProcessorEditor::resized()
529
593
if (controlsVisible)
530
594
{
531
595
// label
532
- row3rdLabel.setBounds (thirdRow.removeFromLeft (60 ));
596
+ row3rdLabel.setBounds (thirdRow.removeFromLeft (50 ));
533
597
// x axis scroll speed
534
598
scrollSpeedBox.setBounds (thirdRow.removeFromLeft (100 ).reduced (5 ));
535
599
// y axis type: log or linear (for linear STFT spectrogram)
536
600
logScaleBox.setBounds (thirdRow.removeFromLeft (100 ).reduced (5 ));
537
601
// slider y axis range
538
- yMinHzEdit.setBounds (thirdRow.removeFromLeft (80 ).reduced (5 ));
602
+ yMinHzEdit.setBounds (thirdRow.removeFromLeft (60 ).reduced (5 ));
539
603
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 ));
541
607
}
542
608
543
609
// rest: spectrogram
0 commit comments