From 295d8b9c3c9b038f9c2369d036c3135beb6bc8e6 Mon Sep 17 00:00:00 2001 From: bruce Date: Wed, 6 Nov 2013 00:50:37 +0800 Subject: [PATCH] Hack in OPL3 waveforms. --- Source/PluginGui.cpp | 346 ++++++++++++++++++++++++++++++++----- Source/PluginGui.h | 16 ++ Source/PluginProcessor.cpp | 45 ++--- Source/dbopl.cpp | 4 +- Source/hiopl.cpp | 10 +- Source/hiopl.h | 1 + 6 files changed, 346 insertions(+), 76 deletions(-) diff --git a/Source/PluginGui.cpp b/Source/PluginGui.cpp index 774d6a2..3460a6b 100644 --- a/Source/PluginGui.cpp +++ b/Source/PluginGui.cpp @@ -30,21 +30,38 @@ void PluginGui::updateFromParameters() halfsineImageButton->setToggleState(false, false); abssineImageButton->setToggleState(false, false); quartersineImageButton->setToggleState(false, false); + alternatingsineImageButton->setToggleState(false, false); + camelsineImageButton->setToggleState(false, false); + squareImageButton->setToggleState(false, false); + logsawImageButton->setToggleState(false, false); switch(processor->getEnumParameter("Modulator Wave")) { case 0: sineImageButton->setToggleState(true, false); break; case 1: halfsineImageButton->setToggleState(true, false); break; case 2: abssineImageButton->setToggleState(true, false); break; case 3: quartersineImageButton->setToggleState(true, false); break; + case 4: alternatingsineImageButton->setToggleState(true, false); break; + case 5: camelsineImageButton->setToggleState(true, false); break; + case 6: squareImageButton->setToggleState(true, false); break; + case 7: logsawImageButton->setToggleState(true, false); break; + } sineImageButton2->setToggleState(false, false); halfsineImageButton2->setToggleState(false, false); abssineImageButton2->setToggleState(false, false); quartersineImageButton2->setToggleState(false, false); + alternatingsineImageButton2->setToggleState(false, false); + camelsineImageButton2->setToggleState(false, false); + squareImageButton2->setToggleState(false, false); + logsawImageButton2->setToggleState(false, false); switch(processor->getEnumParameter("Carrier Wave")) { case 0: sineImageButton2->setToggleState(true, false); break; case 1: halfsineImageButton2->setToggleState(true, false); break; case 2: abssineImageButton2->setToggleState(true, false); break; case 3: quartersineImageButton2->setToggleState(true, false); break; + case 4: alternatingsineImageButton2->setToggleState(true, false); break; + case 5: camelsineImageButton2->setToggleState(true, false); break; + case 6: squareImageButton2->setToggleState(true, false); break; + case 7: logsawImageButton2->setToggleState(true, false); break; } frequencyComboBox->setSelectedItemIndex(processor->getEnumParameter("Modulator Frequency Multiplier"), true); @@ -676,6 +693,86 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) attenuationLabel4->setColour (TextEditor::textColourId, Colours::black); attenuationLabel4->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + addAndMakeVisible (alternatingsineImageButton = new ImageButton ("alternating sine image button")); + alternatingsineImageButton->setTooltip ("alternating sine"); + alternatingsineImageButton->setButtonText ("Alternating Sine"); + alternatingsineImageButton->setRadioGroupId (1); + alternatingsineImageButton->addListener (this); + + alternatingsineImageButton->setImages (false, true, true, + ImageCache::getFromMemory (alternating_sine_png, alternating_sine_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (camelsineImageButton = new ImageButton ("camel sine image button")); + camelsineImageButton->setTooltip ("camel sine"); + camelsineImageButton->setButtonText ("Camel Sine"); + camelsineImageButton->setRadioGroupId (1); + camelsineImageButton->addListener (this); + + camelsineImageButton->setImages (false, true, true, + ImageCache::getFromMemory (camel_sine_png, camel_sine_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (squareImageButton = new ImageButton ("square image button")); + squareImageButton->setTooltip ("square"); + squareImageButton->setButtonText ("Square"); + squareImageButton->setRadioGroupId (1); + squareImageButton->addListener (this); + + squareImageButton->setImages (false, true, true, + ImageCache::getFromMemory (square_png, square_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (logsawImageButton = new ImageButton ("logsaw image button")); + logsawImageButton->setTooltip ("logarithmic sawtooth"); + logsawImageButton->setButtonText ("Logarithmic Sawtooth"); + logsawImageButton->setRadioGroupId (1); + logsawImageButton->addListener (this); + + logsawImageButton->setImages (false, true, true, + ImageCache::getFromMemory (logarithmic_saw_png, logarithmic_saw_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (alternatingsineImageButton2 = new ImageButton ("alternating sine image button")); + alternatingsineImageButton2->setTooltip ("alternating sine"); + alternatingsineImageButton2->setButtonText ("Alternating Sine"); + alternatingsineImageButton2->setRadioGroupId (2); + alternatingsineImageButton2->addListener (this); + + alternatingsineImageButton2->setImages (false, true, true, + ImageCache::getFromMemory (alternating_sine_png, alternating_sine_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (camelsineImageButton2 = new ImageButton ("camel sine image button")); + camelsineImageButton2->setTooltip ("camel sine"); + camelsineImageButton2->setButtonText ("Camel Sine"); + camelsineImageButton2->setRadioGroupId (2); + camelsineImageButton2->addListener (this); + + camelsineImageButton2->setImages (false, true, true, + ImageCache::getFromMemory (camel_sine_png, camel_sine_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (squareImageButton2 = new ImageButton ("square image button")); + squareImageButton2->setTooltip ("square"); + squareImageButton2->setButtonText ("Square"); + squareImageButton2->setRadioGroupId (2); + squareImageButton2->addListener (this); + + squareImageButton2->setImages (false, true, true, + ImageCache::getFromMemory (square_png, square_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (logsawImageButton2 = new ImageButton ("logsaw image button")); + logsawImageButton2->setTooltip ("logarithmic sawtooth"); + logsawImageButton2->setButtonText ("Logarithmic Sawtooth"); + logsawImageButton2->setRadioGroupId (2); + logsawImageButton2->addListener (this); + + logsawImageButton2->setImages (false, true, true, + ImageCache::getFromMemory (logarithmic_saw_png, logarithmic_saw_pngSize), 0.500f, Colour (0x00000000), + Image(), 0.500f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); //[UserPreSize] frequencyComboBox->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); @@ -736,6 +833,15 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) halfsineImageButton->setRepaintsOnMouseActivity(false); quartersineImageButton->setClickingTogglesState(true); quartersineImageButton->setRepaintsOnMouseActivity(false); + alternatingsineImageButton->setClickingTogglesState(true); + alternatingsineImageButton->setRepaintsOnMouseActivity(false); + camelsineImageButton->setClickingTogglesState(true); + camelsineImageButton->setRepaintsOnMouseActivity(false); + squareImageButton->setClickingTogglesState(true); + squareImageButton->setRepaintsOnMouseActivity(false); + logsawImageButton->setClickingTogglesState(true); + logsawImageButton->setRepaintsOnMouseActivity(false); + sineImageButton2->setClickingTogglesState(true); sineImageButton2->setRepaintsOnMouseActivity(false); abssineImageButton2->setClickingTogglesState(true); @@ -744,6 +850,14 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) halfsineImageButton2->setRepaintsOnMouseActivity(false); quartersineImageButton2->setClickingTogglesState(true); quartersineImageButton2->setRepaintsOnMouseActivity(false); + alternatingsineImageButton2->setClickingTogglesState(true); + alternatingsineImageButton2->setRepaintsOnMouseActivity(false); + camelsineImageButton2->setClickingTogglesState(true); + camelsineImageButton2->setRepaintsOnMouseActivity(false); + squareImageButton2->setClickingTogglesState(true); + squareImageButton2->setRepaintsOnMouseActivity(false); + logsawImageButton2->setClickingTogglesState(true); + logsawImageButton2->setRepaintsOnMouseActivity(false); tremoloButton->setColour(TextButton::buttonColourId, Colour(COLOUR_MID)); vibratoButton->setColour(TextButton::buttonColourId, Colour(COLOUR_MID)); @@ -833,6 +947,14 @@ PluginGui::~PluginGui() attenuationLabel3 = nullptr; velocityComboBox2 = nullptr; attenuationLabel4 = nullptr; + alternatingsineImageButton = nullptr; + camelsineImageButton = nullptr; + squareImageButton = nullptr; + logsawImageButton = nullptr; + alternatingsineImageButton2 = nullptr; + camelsineImageButton2 = nullptr; + squareImageButton2 = nullptr; + logsawImageButton2 = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -867,11 +989,11 @@ void PluginGui::resized() attenuationSlider->setBounds (312, 200, 72, 96); attenuationLabel->setBounds (312, 304, 96, 24); dbLabel->setBounds (376, 272, 40, 24); - sineImageButton->setBounds (128, 40, 34, 30); - halfsineImageButton->setBounds (184, 40, 34, 30); - abssineImageButton->setBounds (240, 40, 34, 30); - quartersineImageButton->setBounds (296, 40, 34, 30); - waveLabel->setBounds (32, 40, 80, 24); + sineImageButton->setBounds (88, 40, 34, 30); + halfsineImageButton->setBounds (128, 40, 34, 30); + abssineImageButton->setBounds (168, 40, 34, 30); + quartersineImageButton->setBounds (208, 40, 34, 30); + waveLabel->setBounds (32, 40, 48, 24); tremoloButton->setBounds (144, 120, 96, 24); vibratoButton->setBounds (40, 120, 96, 24); sustainButton->setBounds (40, 304, 96, 24); @@ -893,11 +1015,11 @@ void PluginGui::resized() attenuationSlider2->setBounds (312, 544, 72, 96); attenuationLabel2->setBounds (312, 648, 96, 24); dbLabel3->setBounds (376, 616, 40, 24); - sineImageButton2->setBounds (128, 384, 34, 30); - halfsineImageButton2->setBounds (184, 384, 34, 30); - abssineImageButton2->setBounds (240, 384, 34, 30); - quartersineImageButton2->setBounds (296, 384, 34, 30); - waveLabel2->setBounds (32, 384, 80, 24); + sineImageButton2->setBounds (88, 384, 34, 30); + halfsineImageButton2->setBounds (128, 384, 34, 30); + abssineImageButton2->setBounds (168, 384, 34, 30); + quartersineImageButton2->setBounds (208, 384, 34, 30); + waveLabel2->setBounds (32, 384, 48, 24); tremoloButton2->setBounds (152, 464, 96, 24); vibratoButton2->setBounds (40, 464, 96, 24); sustainButton2->setBounds (40, 648, 96, 24); @@ -918,6 +1040,14 @@ void PluginGui::resized() attenuationLabel3->setBounds (272, 168, 64, 24); velocityComboBox2->setBounds (336, 512, 72, 24); attenuationLabel4->setBounds (272, 512, 64, 24); + alternatingsineImageButton->setBounds (288, 40, 34, 30); + camelsineImageButton->setBounds (248, 40, 34, 30); + squareImageButton->setBounds (328, 40, 34, 30); + logsawImageButton->setBounds (368, 40, 34, 30); + alternatingsineImageButton2->setBounds (290, 385, 34, 30); + camelsineImageButton2->setBounds (250, 385, 34, 30); + squareImageButton2->setBounds (330, 385, 34, 30); + logsawImageButton2->setBounds (370, 385, 34, 30); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -1163,6 +1293,54 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked) processor->setEnumParameter("Carrier Keyscale Rate", buttonThatWasClicked->getToggleState() ? 1 : 0); //[/UserButtonCode_keyscaleEnvButton2] } + else if (buttonThatWasClicked == alternatingsineImageButton) + { + //[UserButtonCode_alternatingsineImageButton] -- add your button handler code here.. + processor->setEnumParameter("Modulator Wave", 4); + //[/UserButtonCode_alternatingsineImageButton] + } + else if (buttonThatWasClicked == camelsineImageButton) + { + //[UserButtonCode_camelsineImageButton] -- add your button handler code here.. + processor->setEnumParameter("Modulator Wave", 5); + //[/UserButtonCode_camelsineImageButton] + } + else if (buttonThatWasClicked == squareImageButton) + { + //[UserButtonCode_squareImageButton] -- add your button handler code here.. + processor->setEnumParameter("Modulator Wave", 6); + //[/UserButtonCode_squareImageButton] + } + else if (buttonThatWasClicked == logsawImageButton) + { + //[UserButtonCode_logsawImageButton] -- add your button handler code here.. + processor->setEnumParameter("Modulator Wave", 7); + //[/UserButtonCode_logsawImageButton] + } + else if (buttonThatWasClicked == alternatingsineImageButton2) + { + //[UserButtonCode_alternatingsineImageButton2] -- add your button handler code here.. + processor->setEnumParameter("Carrier Wave", 4); + //[/UserButtonCode_alternatingsineImageButton2] + } + else if (buttonThatWasClicked == camelsineImageButton2) + { + //[UserButtonCode_camelsineImageButton2] -- add your button handler code here.. + processor->setEnumParameter("Carrier Wave", 5); + //[/UserButtonCode_camelsineImageButton2] + } + else if (buttonThatWasClicked == squareImageButton2) + { + //[UserButtonCode_squareImageButton2] -- add your button handler code here.. + processor->setEnumParameter("Carrier Wave", 6); + //[/UserButtonCode_squareImageButton2] + } + else if (buttonThatWasClicked == logsawImageButton2) + { + //[UserButtonCode_logsawImageButton2] -- add your button handler code here.. + processor->setEnumParameter("Carrier Wave", 7); + //[/UserButtonCode_logsawImageButton2] + } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] @@ -1261,31 +1439,31 @@ BEGIN_JUCER_METADATA editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>