From ecfc83df476064026dcc29012f12d51c6f3e9832 Mon Sep 17 00:00:00 2001 From: Bruce Sutherland Date: Thu, 1 Jan 2015 20:55:03 +0900 Subject: [PATCH] Add support for percussion mode. --- JuceOPLVSTi.jucer | 2 +- Source/PluginGui.cpp | 91 +++++++++++++++++++++++------- Source/PluginGui.h | 2 + Source/PluginProcessor.cpp | 111 ++++++++++++++++++++++++------------- Source/hiopl.cpp | 13 +++++ Source/hiopl.h | 8 +++ readme.md | 47 ++++++++-------- 7 files changed, 191 insertions(+), 83 deletions(-) diff --git a/JuceOPLVSTi.jucer b/JuceOPLVSTi.jucer index 02bf28e..8b56992 100644 --- a/JuceOPLVSTi.jucer +++ b/JuceOPLVSTi.jucer @@ -1,6 +1,6 @@ -setSelectedItemIndex(processor->getEnumParameter("Algorithm"), true); + percussionComboBox->setSelectedItemIndex(processor->getEnumParameter("Percussion Mode"), true); + tooltipWindow.setColour(tooltipWindow.backgroundColourId, Colour(0x0)); tooltipWindow.setColour(tooltipWindow.textColourId, Colour(COLOUR_MID)); } @@ -601,7 +603,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) addAndMakeVisible (dbLabel5 = new Label ("db label", TRANS("dB"))); dbLabel5->setFont (Font (15.00f, Font::plain)); - dbLabel5->setJustificationType (Justification::centred); + dbLabel5->setJustificationType (Justification::centredLeft); dbLabel5->setEditable (false, false, false); dbLabel5->setColour (Label::textColourId, Colour (0xff007f00)); dbLabel5->setColour (Label::outlineColourId, Colour (0x00000000)); @@ -633,7 +635,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) TRANS("cents\n"))); dbLabel6->setTooltip (TRANS("A unit of pitch; 100 cents per semitone")); dbLabel6->setFont (Font (15.00f, Font::plain)); - dbLabel6->setJustificationType (Justification::centred); + dbLabel6->setJustificationType (Justification::centredLeft); dbLabel6->setEditable (false, false, false); dbLabel6->setColour (Label::textColourId, Colour (0xff007f00)); dbLabel6->setColour (Label::outlineColourId, Colour (0x00000000)); @@ -873,6 +875,29 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) recordButton->addListener (this); recordButton->setColour (ToggleButton::textColourId, Colour (0xff007f00)); + addAndMakeVisible (percussionComboBox = new ComboBox ("percussion combo box")); + percussionComboBox->setEditableText (false); + percussionComboBox->setJustificationType (Justification::centredLeft); + percussionComboBox->setTextWhenNothingSelected (String::empty); + percussionComboBox->setTextWhenNoChoicesAvailable (TRANS("(no choices)")); + percussionComboBox->addItem (TRANS("Off"), 1); + percussionComboBox->addItem (TRANS("Bass drum"), 2); + percussionComboBox->addItem (TRANS("Snare"), 3); + percussionComboBox->addItem (TRANS("Tom"), 4); + percussionComboBox->addItem (TRANS("Cymbal"), 5); + percussionComboBox->addItem (TRANS("Hi-hat"), 6); + percussionComboBox->addListener (this); + + addAndMakeVisible (percussionLabel = new Label ("percussion label", + TRANS("Percussion mode"))); + percussionLabel->setTooltip (TRANS("Enable percussion instruments instead of oscillators")); + percussionLabel->setFont (Font (15.00f, Font::plain)); + percussionLabel->setJustificationType (Justification::centredLeft); + percussionLabel->setEditable (false, false, false); + percussionLabel->setColour (Label::textColourId, Colour (0xff007f00)); + percussionLabel->setColour (TextEditor::textColourId, Colours::black); + percussionLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + //[UserPreSize] frequencyComboBox->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); @@ -942,6 +967,12 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) keyscaleAttenuationComboBox2->setColour (ComboBox::buttonColourId, Colours::black); keyscaleAttenuationComboBox2->setColour (ComboBox::backgroundColourId, Colours::black); + percussionComboBox->setColour(ComboBox::textColourId, Colour(COLOUR_MID)); + percussionComboBox->setColour(ComboBox::outlineColourId, Colour(COLOUR_MID)); + percussionComboBox->setColour(ComboBox::arrowColourId, Colour(COLOUR_MID)); + percussionComboBox->setColour(ComboBox::buttonColourId, Colours::black); + percussionComboBox->setColour(ComboBox::backgroundColourId, Colours::black); + sineImageButton->setClickingTogglesState(true); sineImageButton->setRepaintsOnMouseActivity(false); abssineImageButton->setClickingTogglesState(true); @@ -1002,7 +1033,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) } //[/UserPreSize] - setSize (860, 516); + setSize (860, 550); //[Constructor] You can add your own custom stuff here.. @@ -1097,6 +1128,8 @@ PluginGui::~PluginGui() emulatorLabel = nullptr; emulatorLabel2 = nullptr; recordButton = nullptr; + percussionComboBox = nullptr; + percussionLabel = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -1169,13 +1202,13 @@ void PluginGui::resized() sustainButton2->setBounds (464, 384, 96, 24); keyscaleEnvButton2->setBounds (552, 384, 184, 24); frequencyLabel4->setBounds (672, 184, 152, 24); - groupComponent3->setBounds (16, 432, 832, 64); - tremoloSlider->setBounds (344, 456, 112, 24); - frequencyLabel5->setBounds (224, 456, 152, 24); - dbLabel5->setBounds (456, 448, 40, 40); - vibratoSlider->setBounds (672, 456, 112, 24); - frequencyLabel6->setBounds (560, 456, 152, 24); - dbLabel6->setBounds (784, 448, 47, 40); + groupComponent3->setBounds (16, 432, 832, 96); + tremoloSlider->setBounds (632, 456, 112, 24); + frequencyLabel5->setBounds (472, 456, 152, 24); + dbLabel5->setBounds (752, 448, 40, 40); + vibratoSlider->setBounds (632, 488, 112, 24); + frequencyLabel6->setBounds (472, 488, 152, 24); + dbLabel6->setBounds (752, 480, 47, 40); feedbackSlider->setBounds (112, 232, 136, 24); frequencyLabel7->setBounds (32, 232, 80, 24); velocityComboBox->setBounds (336, 232, 72, 24); @@ -1201,6 +1234,8 @@ void PluginGui::resized() emulatorLabel->setBounds (112, 32, 72, 24); emulatorLabel2->setBounds (248, 32, 72, 24); recordButton->setBounds (40, 456, 128, 24); + percussionComboBox->setBounds (256, 488, 112, 24); + percussionLabel->setBounds (40, 488, 163, 24); //[UserResized] Add your own custom resize handling here.. for (unsigned int i = 0; i < channels.size(); ++i) channels[i]->setBounds(456+44*i+4, 36, 16, 16); @@ -1264,6 +1299,13 @@ void PluginGui::comboBoxChanged (ComboBox* comboBoxThatHasChanged) processor->setEnumParameter("Modulator Keyscale Level", id); //[/UserComboBoxCode_keyscaleAttenuationComboBox] } + else if (comboBoxThatHasChanged == percussionComboBox) + { + //[UserComboBoxCode_percussionComboBox] -- add your combo box handling code here.. + int id = comboBoxThatHasChanged->getSelectedId() - 1; + processor->setEnumParameter("Percussion Mode", id); + //[/UserComboBoxCode_percussionComboBox] + } //[UsercomboBoxChanged_Post] //[/UsercomboBoxChanged_Post] @@ -1600,7 +1642,7 @@ BEGIN_JUCER_METADATA parentClasses="public AudioProcessorEditor, public FileDragAndDropTarget, public DragAndDropContainer, public Timer" constructorParams="JuceOplvstiAudioProcessor* ownerFilter" variableInitialisers=" AudioProcessorEditor (ownerFilter)" snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330" - fixedSize="0" initialWidth="860" initialHeight="516"> + fixedSize="0" initialWidth="860" initialHeight="550">