Skip to content

Commit

Permalink
added wave control stuff to APVTS
Browse files Browse the repository at this point in the history
  • Loading branch information
hsetlik committed Jun 4, 2021
1 parent 8eb00cc commit 7bdec92
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Source/OperatorComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
OperatorComponent::OperatorComponent(int index, juce::AudioProcessorValueTreeState* pTree) :
opIndex(index),
envGraph(&delaySlider, &attackSlider, &holdSlider, &decaySlider, &sustainSlider, &releaseSlider),
waveButtons(index),
waveButtons(index, pTree),
levelSlider(index),
ratioSlider(index),
ratioLabel(&ratioSlider.slider, ""),
Expand Down
1 change: 1 addition & 0 deletions Source/PluginProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ synthFilter(juce::dsp::IIR::Coefficients<float>::makeLowPass(44100.0f, 2500.0f,
modIndexIds.push_back("indexParam" + iStr);
audibleIds.push_back("audibleParam" + iStr);
panIds.push_back("panParam" + iStr);
waveIds.push_back("waveParam" + iStr);

delayIds.push_back("delayParam" + iStr);
attackIds.push_back("attackParam" + iStr);
Expand Down
1 change: 1 addition & 0 deletions Source/PluginProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class HexFmAudioProcessor : public juce::AudioProcessor
std::vector<juce::String> levelIds;
std::vector<juce::String> modIndexIds;
std::vector<juce::String> audibleIds;
std::vector<juce::String> waveIds;

std::vector<juce::String> delayIds;
std::vector<juce::String> attackIds;
Expand Down
53 changes: 52 additions & 1 deletion Source/WaveTypeSelector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ void ImageToggle::paintButton(juce::Graphics &g, bool down, bool highlighted)
}
//==============================================================================

WaveButtonSet::WaveButtonSet(int opIndex) :
WaveButtonSet::WaveButtonSet(int opIndex, juce::AudioProcessorValueTreeState* tree) :
currentType(Sine),
sineButton(ImageToggle::getForWave(Sine, true), ImageToggle::getForWave(Sine, false)),
squareButton(ImageToggle::getForWave(Square, true), ImageToggle::getForWave(Square, false)),
sawButton(ImageToggle::getForWave(Saw, true), ImageToggle::getForWave(Saw, false)),
Expand All @@ -33,11 +34,25 @@ triButton(ImageToggle::getForWave(Tri, true), ImageToggle::getForWave(Tri, false
addAndMakeVisible(&squareButton);
addAndMakeVisible(&sawButton);
addAndMakeVisible(&triButton);
sineButton.addListener(this);
squareButton.addListener(this);
sawButton.addListener(this);
triButton.addListener(this);

addAndMakeVisible(&hiddenBox);
hiddenBox.addListener(this);
hiddenBox.addItem("Sine", 1);
hiddenBox.addItem("Square", 2);
hiddenBox.addItem("Saw", 3);
hiddenBox.addItem("Tri", 4);

int radioNum = 60 + opIndex;
sineButton.setRadioGroupId(radioNum);
squareButton.setRadioGroupId(radioNum);
sawButton.setRadioGroupId(radioNum);
triButton.setRadioGroupId(radioNum);
auto waveId = "waveParam" + juce::String(opIndex);
waveAttach.reset(new juce::AudioProcessorValueTreeState::ComboBoxAttachment(*tree, waveId, hiddenBox));
}

void WaveButtonSet::resized()
Expand All @@ -50,3 +65,39 @@ void WaveButtonSet::resized()
triButton.setBounds(bounds);
}

void WaveButtonSet::buttonClicked(juce::Button *b)
{
if(b == &sineButton)
{
currentType = Sine;
hiddenBox.setSelectedId(1);
}
else if(b == &squareButton)
{
currentType = Square;
hiddenBox.setSelectedId(2);
}
else if(b == &sawButton)
{
currentType = Saw;
hiddenBox.setSelectedId(3);
}
else if(b == &triButton)
{
currentType = Tri;
hiddenBox.setSelectedId(4);
}
}

void WaveButtonSet::comboBoxChanged(juce::ComboBox *box)
{
auto waveId = box->getSelectedId();
if(waveId == 1 && !sineButton.getToggleState())
sineButton.triggerClick();
else if(waveId == 2 && !squareButton.getToggleState())
squareButton.triggerClick();
else if(waveId == 3 && !sawButton.getToggleState())
sawButton.triggerClick();
else if(waveId == 4 && !triButton.getToggleState())
triButton.triggerClick();
}
12 changes: 10 additions & 2 deletions Source/WaveTypeSelector.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,22 @@ class ImageToggle : public juce::ImageButton
};


class WaveButtonSet : public juce::Component
class WaveButtonSet :
public juce::Component,
public juce::Button::Listener,
public juce::ComboBox::Listener
{
public:
WaveButtonSet(int opIndex);
WaveButtonSet(int opIndex, juce::AudioProcessorValueTreeState* tree);
void resized() override;
void buttonClicked(juce::Button* b) override;
void comboBoxChanged(juce::ComboBox* box) override;
private:
WaveType currentType;
ImageToggle sineButton;
ImageToggle squareButton;
ImageToggle sawButton;
ImageToggle triButton;
juce::ComboBox hiddenBox;
std::unique_ptr<juce::AudioProcessorValueTreeState::ComboBoxAttachment> waveAttach;
};

0 comments on commit 7bdec92

Please sign in to comment.