Skip to content
This repository has been archived by the owner on Dec 10, 2023. It is now read-only.

Commit

Permalink
1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
crowbait committed Oct 3, 2023
2 parents b55ff98 + 451e405 commit 1f5a9ca
Show file tree
Hide file tree
Showing 22 changed files with 424 additions and 127 deletions.
110 changes: 61 additions & 49 deletions Builds/MacOSX/GnomeDistort.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions Builds/MacOSX/Info-AU.plist
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>NSHumanReadableCopyright</key>
<string>&#169; 2023 Crowbait</string>
<key>NSHighResolutionCapable</key>
Expand All @@ -41,7 +41,7 @@
<key>subtype</key>
<string>GDst</string>
<key>version</key>
<integer>65536</integer>
<integer>65792</integer>
<key>resourceUsage</key>
<dict>
<key>network.client</key>
Expand Down
29 changes: 29 additions & 0 deletions Builds/MacOSX/Info-Standalone_Plugin.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>de.crowbait.gnomedistort</string>
<key>CFBundleName</key>
<string>GnomeDistort</string>
<key>CFBundleDisplayName</key>
<string>GnomeDistort</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.1.0</string>
<key>CFBundleVersion</key>
<string>1.1.0</string>
<key>NSHumanReadableCopyright</key>
<string>&#169; 2023 Crowbait</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
4 changes: 2 additions & 2 deletions Builds/MacOSX/Info-VST3.plist
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>NSHumanReadableCopyright</key>
<string>&#169; 2023 Crowbait</string>
<key>NSHighResolutionCapable</key>
Expand Down
4 changes: 2 additions & 2 deletions Builds/MacOSX/Info-VST3_Manifest_Helper.plist
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
<key>CFBundleSignature</key>
<string></string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<string>1.1.0</string>
<key>NSHumanReadableCopyright</key>
<string>&#169; 2023 Crowbait</string>
<key>NSHighResolutionCapable</key>
Expand Down
12 changes: 8 additions & 4 deletions Builds/VisualStudio2022/GnomeDistort_SharedCode.vcxproj

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions Builds/VisualStudio2022/GnomeDistort_SharedCode.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\UI\DisplayGraph.cpp">
<Filter>GnomeDistort\Source\UI</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\UI\Display.cpp">
<Filter>GnomeDistort\Source\UI</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\UI\DisplayComponent.cpp">
<Filter>GnomeDistort\Source\UI</Filter>
</ClCompile>
Expand Down Expand Up @@ -3162,6 +3168,12 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\UI\DisplayGraph.h">
<Filter>GnomeDistort\Source\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\UI\Display.h">
<Filter>GnomeDistort\Source\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\UI\SimpleTextButton.h">
<Filter>GnomeDistort\Source\UI</Filter>
</ClInclude>
Expand Down
8 changes: 4 additions & 4 deletions Builds/VisualStudio2022/GnomeDistort_StandalonePlugin.vcxproj

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions Builds/VisualStudio2022/GnomeDistort_VST3.vcxproj

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Builds/VisualStudio2022/GnomeDistort_VST3.vcxproj.user
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@
<LocalDebuggerCommandArguments />
<LocalDebuggerAttach>false</LocalDebuggerAttach>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerCommand>F:\ownCloud\traxx.li\VSTs\.JUCE\extras\AudioPluginHost\Builds\VisualStudio2022\x64\Debug\App\AudioPluginHost.exe</LocalDebuggerCommand>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions Builds/VisualStudio2022/resources.rc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <windows.h>

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
FILEVERSION 1,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
Expand All @@ -18,9 +18,9 @@ BEGIN
VALUE "CompanyName", "Crowbait\0"
VALUE "LegalCopyright", "© 2023 Crowbait\0"
VALUE "FileDescription", "GnomeDistort\0"
VALUE "FileVersion", "1.0.0\0"
VALUE "FileVersion", "1.1.0\0"
VALUE "ProductName", "GnomeDistort\0"
VALUE "ProductVersion", "1.0.0\0"
VALUE "ProductVersion", "1.1.0\0"
END
END

Expand Down
7 changes: 6 additions & 1 deletion GnomeDistort.jucer
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>

<JUCERPROJECT id="RuvOwm" name="GnomeDistort" projectType="audioplug" useAppConfig="0"
addUsingNamespaceToJuceHeader="0" jucerFormatVersion="1" version="1.0.0"
addUsingNamespaceToJuceHeader="0" jucerFormatVersion="1" version="1.1.0"
companyName="Crowbait" companyCopyright="&#169; 2023 Crowbait"
companyWebsite="crowbait.de" companyEmail="[email protected]"
bundleIdentifier="de.crowbait.gnomedistort" pluginFormats="buildAU,buildVST3"
Expand All @@ -21,6 +21,11 @@
</GROUP>
<GROUP id="{90ED5E9F-AA5E-20A2-C944-3AE53E8FFA07}" name="Source">
<GROUP id="{2A901812-6B5E-9B86-6E49-E4ACD7A65DC1}" name="UI">
<FILE id="DCedsv" name="DisplayGraph.h" compile="0" resource="0" file="Source/UI/DisplayGraph.h"/>
<FILE id="H5Lby4" name="DisplayGraph.cpp" compile="1" resource="0"
file="Source/UI/DisplayGraph.cpp"/>
<FILE id="xnBnRd" name="Display.h" compile="0" resource="0" file="Source/UI/Display.h"/>
<FILE id="u7JRnG" name="Display.cpp" compile="1" resource="0" file="Source/UI/Display.cpp"/>
<FILE id="aAx2Ad" name="SimpleTextButton.h" compile="0" resource="0"
file="Source/UI/SimpleTextButton.h"/>
<FILE id="WqL9Bk" name="GlobalConsts.h" compile="0" resource="0" file="Source/UI/GlobalConsts.h"/>
Expand Down
31 changes: 16 additions & 15 deletions Source/PluginEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ GnomeDistortAudioProcessorEditor::GnomeDistortAudioProcessorEditor(GnomeDistortA
LoCutSlopeSelect.setSelectedId(audioProcessor.apvts.getRawParameterValue("LoCutSlope")->load() + 1);
HiCutSlopeSelect.addItemList(slopeOptions, 1);
HiCutSlopeSelect.setSelectedId(audioProcessor.apvts.getRawParameterValue("HiCutSlope")->load() + 1);
WaveshapeSelect.addItemList(GnomeDistortAudioProcessor::getWaveshaperOptions(), 1);
WaveshapeSelect.addItemList(WaveShaperOptions, 1);
WaveshapeSelect.setSelectedId(audioProcessor.apvts.getRawParameterValue("WaveShapeFunction")->load() + 1);

LoCutSlopeSelect.setLookAndFeel(&ComboBoxLNF);
Expand All @@ -66,7 +66,7 @@ GnomeDistortAudioProcessorEditor::GnomeDistortAudioProcessorEditor(GnomeDistortA
// Make sure that before the constructor has finished, you've set the
// editor's size to whatever you need it to be.

knobOverlay = juce::ImageCache::getFromMemory(BinaryData::knob_overlay_128_png, BinaryData::knob_overlay_128_pngSize);
knobOverlay = juce::ImageCache::getFromMemory(BinaryData::knob_overlay_128_png, BinaryData::knob_overlay_128_pngSize);

for (auto* comp : getComponents()) {
addAndMakeVisible(comp);
Expand All @@ -75,14 +75,14 @@ GnomeDistortAudioProcessorEditor::GnomeDistortAudioProcessorEditor(GnomeDistortA
// add onclicks for switches
auto safePtr = juce::Component::SafePointer<GnomeDistortAudioProcessorEditor>(this);
DisplayONSwitch.onClick = [safePtr]() {
if (auto* comp = safePtr.getComponent()) comp->displayComp.isEnabled = comp->DisplayONSwitch.getToggleState();
if (auto* comp = safePtr.getComponent()) comp->displayComp.DisplayComp.isEnabled = comp->DisplayONSwitch.getToggleState();
};
DisplayHQSwitch.onClick = [safePtr]() {
if (auto* comp = safePtr.getComponent()) {
bool state = comp->DisplayHQSwitch.getToggleState();
comp->displayComp.isHQ = state;
comp->displayComp.parametersChanged.set(true);
comp->displayComp.hasQualityChanged.set(true);
comp->displayComp.DisplayComp.isHQ = state;
comp->displayComp.DisplayComp.parametersChanged.set(true);
comp->displayComp.DisplayComp.hasQualityChanged.set(true);
}
};
LinkGithubButton.onClick = []() {
Expand All @@ -92,15 +92,14 @@ GnomeDistortAudioProcessorEditor::GnomeDistortAudioProcessorEditor(GnomeDistortA
juce::URL("https://ko-fi.com/crowbait").launchInDefaultBrowser();
};

setSize(400, 600);
setSize(420, 600);
}

//==============================================================================
void GnomeDistortAudioProcessorEditor::paint(juce::Graphics& g) {
// (Our component is opaque, so we must completely fill the background with a solid colour)
// g.fillAll(getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId));

// juce::Image background = juce::ImageCache::getFromMemory(BinaryData::bg_png, BinaryData::bg_pngSize);
g.drawImageAt(background, 0, 0);
}

Expand All @@ -115,9 +114,8 @@ void GnomeDistortAudioProcessorEditor::paintBackground() {
g.setColour(COLOR_BG);
g.fillRect(getLocalBounds().toFloat());

g.drawImageWithin(
ImageCache::getFromMemory(BinaryData::grundge_overlay_png, BinaryData::grundge_overlay_pngSize),
0, 0, getWidth(), getHeight(), RectanglePlacement::fillDestination, false);
g.drawImageWithin(ImageCache::getFromMemory(BinaryData::grundge_overlay_png, BinaryData::grundge_overlay_pngSize),
0, 0, getWidth(), getHeight(), RectanglePlacement::fillDestination, false);
Image gnome = ImageCache::getFromMemory(BinaryData::gnome_dark_png, BinaryData::gnome_dark_pngSize);
g.drawImageAt(gnome, 0, getHeight() - gnome.getHeight());

Expand Down Expand Up @@ -238,7 +236,7 @@ void GnomeDistortAudioProcessorEditor::paintBackground() {
return std::vector<Path> { topEdge, rightEdge, bottomEdge, leftEdge };
};

auto displayCorners = get3DCorners(comps[compIndex::displayComp]->getBounds(), comps[compIndex::displayComp]->getX() / 2);
auto displayCorners = get3DCorners(comps[compIndex::displayComp]->getBounds(), 8);
g.setColour(COLOR_BG_DARK);
g.fillPath(displayCorners[0]);
g.setColour(COLOR_BG_MID);
Expand Down Expand Up @@ -308,8 +306,8 @@ void GnomeDistortAudioProcessorEditor::resized() {
const int selectHeight = 24;

auto bounds = getLocalBounds();
bounds.removeFromLeft(padding * 2);
bounds.removeFromRight(padding * 2);
bounds.removeFromLeft(padding);
bounds.removeFromRight(padding);
auto switchesArea = bounds.removeFromTop(padding * 2);
bounds.removeFromBottom(padding * 2);

Expand All @@ -325,6 +323,9 @@ void GnomeDistortAudioProcessorEditor::resized() {
LinkDonateButton.setBounds(switchesArea.removeFromRight(padding * 5));
LinkGithubButton.setBounds(switchesArea.removeFromRight(padding * 5));

bounds.removeFromLeft(padding);
bounds.removeFromRight(padding);

auto filterArea = bounds.removeFromTop(bounds.getHeight() * 0.33f); // 75*0.33=25%
auto leftFilterArea = filterArea.removeFromLeft(filterArea.getWidth() * 0.25f);
auto rightFilterArea = filterArea.removeFromRight(filterArea.getWidth() * 0.33f);
Expand All @@ -349,7 +350,7 @@ void GnomeDistortAudioProcessorEditor::resized() {
BiasSlider.setBounds(bounds.removeFromTop(bounds.getHeight() * 0.33f));
WaveshapeSelect.setBounds(bounds.removeFromBottom(selectHeight));
WaveShapeAmountSlider.setBounds(bounds);

paintBackground();
}

Expand Down
4 changes: 2 additions & 2 deletions Source/PluginEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include <JuceHeader.h>
#include "PluginProcessor.h"
#include "UI/GlobalConsts.h"
#include "UI/DisplayComponent.h"
#include "UI/Display.h"
#include "UI/SliderKnobLabeledValue.h"
#include "UI/SimpleTextSwitch.h"
#include "UI/SimpleTextButton.h"
Expand Down Expand Up @@ -54,7 +54,7 @@ class GnomeDistortAudioProcessorEditor : public juce::AudioProcessorEditor {
GnomeDistortAudioProcessor& audioProcessor;

juce::LookAndFeel_V4 ComboBoxLNF;
DisplayComponent displayComp;
Display displayComp;
SliderKnobLabeledValues LoCutFreqSlider, PeakFreqSlider, PeakGainSlider, PeakQSlider, HiCutFreqSlider, PreGainSlider, BiasSlider, WaveShapeAmountSlider, PostGainSlider, DryWetSlider;
juce::ComboBox LoCutSlopeSelect, HiCutSlopeSelect, WaveshapeSelect;
SimpleTextSwitch DisplayONSwitch, DisplayHQSwitch;
Expand Down
68 changes: 41 additions & 27 deletions Source/PluginProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,22 +98,13 @@ juce::StringArray GnomeDistortAudioProcessor::getSlopeOptions() {
}
return result;
}
juce::StringArray GnomeDistortAudioProcessor::getWaveshaperOptions() {
return {
"HardClip",
"SoftClip",
"Cracked",
"GNOME",
"Warm",
"Quantize",
"Fuzz",
"Hollowing"
};
}



std::function<float(float)> getWaveshaperFunction(WaveShaperFunction& func, float& amount) {
switch (func) {
case HardClip:
return [amount](float x) { return juce::jlimit(0.f - (1.f - amount), 1.f - amount, x); };
return [amount](float x) { return juce::jlimit(0.f - (1.f - amount), 1.f - amount, x) + (x < 0 ? -amount : amount); };
break;
case SoftClip: // x * sqrt(1+a²) - scaling factor 5
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x * sqrt(1 + ((amount * 5) * (amount * 5)))); };
Expand All @@ -122,13 +113,13 @@ std::function<float(float)> getWaveshaperFunction(WaveShaperFunction& func, floa
return [amount](float x) { return juce::jlimit(-1.f, 1.f, (float)(pow(x, 3) * pow((cos(x * amount * 9.4f)), 3))); };
break;
case GNOME: // x - (a/x)
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x - (amount / x)); };
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x == 0 ? 0 : x - (amount / x)); };
break;
case Warm: // x < 0: x*a -- x > 0: x*(1+a)
return [amount](float x) {
if (x <= 0) return juce::jlimit(-1.f, 1.f, x * (1.f - amount));
return juce::jlimit(-1.f, 1.f, x * (1.f + amount));
}; break;
}; break;
case Quantize: {
int numSteps = 1 + std::floor((1 / (amount + 0.01f)) * 2);
return [numSteps](float x) {
Expand All @@ -140,8 +131,40 @@ std::function<float(float)> getWaveshaperFunction(WaveShaperFunction& func, floa
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x + (amount * sin(10 * amount * x))); };
break;
case Hollowing: // x * (3a * sin(x)) - x - a
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x*(3*amount*sin(x))-x-amount); };
return [amount](float x) { return juce::jlimit(-1.f, 1.f, x * (3 * amount * sin(x)) - x - amount); };
break;
case Sin:
return [amount](float x) { return juce::jlimit(-1.f, 1.f, 2 * amount * sin(x * 100 * amount) + ((1 - amount) * x)); };
break;
case Rash: { // -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
const float noise[] = { 2.22f, 3.21f, 1.38f, 0.21f, 3.66f, 1.51f, 3.41f, 2.14f, 2.09f, 0.31f, 1.15f, 3.15f, 2.58f, 0.91f, 1.18f, 4.29f, 3.24f, 0.11f, 0.05f, 2.11f, 1.77f };
return [amount, noise](float x) {
const float factor =
(x < -0.9f) ? noise[0] : (x < -0.8f) ? noise[1] :
(x < -0.7f) ? noise[2] : (x < -0.6f) ? noise[3] :
(x < -0.5f) ? noise[4] : (x < -0.4f) ? noise[5] :
(x < -0.3f) ? noise[6] : (x < -0.2f) ? noise[7] :
(x < -0.1f) ? noise[8] : (x < 0.f) ? noise[9] :
(x < 0.1f) ? noise[10] : (x < 0.2f) ? noise[11] :
(x < 0.3f) ? noise[12] : (x < 0.4f) ? noise[13] :
(x < 0.5f) ? noise[14] : (x < 0.6f) ? noise[15] :
(x < 0.7f) ? noise[16] : (x < 0.8f) ? noise[17] :
(x < 0.9f) ? noise[18] : (x < 1.f) ? noise[19] : noise[20];
return juce::jlimit(-1.f, 1.f, (factor * x * amount) + (x * (1.f - amount)));
};
} break;
case Spiked: {
const float pi3p16 = 3 * 3.14159f / 16;
return [amount, pi3p16](float x) {
float ret;
if (x < -pi3p16) return juce::jlimit(-1.f, 1.f, amount + (x * (1.f - amount)));
if (x < 0) return juce::jlimit(-1.f, 1.f, (sin(8 * x) * amount) + (x * (1.f - amount)));
if (x < 0.25f) return juce::jlimit(-1.f, 1.f, ((sin(10 * x) + 0.25f) * amount) + (x * (1.f - amount)));
if (x < 0.5f) return juce::jlimit(-1.f, 1.f, ((sin(10 * x + 1) + 0.25f) * amount) + (x * (1.f - amount)));
if (x < 0.75f) return juce::jlimit(-1.f, 1.f, ((sin(10 * x + 2) + 0.25f) * amount) + (x * (1.f - amount)));
return juce::jlimit(-1.f, 1.f, x * (1.f - amount) + amount);
};
} break;
}
}

Expand Down Expand Up @@ -179,15 +202,6 @@ void updateSettings(ChainSettings& chainSettings, double sampleRate, MonoChain&
auto& waveShaperFunction = getWaveshaperFunction(waveShapeFunction, chainSettings.WaveShapeAmount);
leftChain.get<ChainPositions::DistWaveshaper>().functionToUse = waveShaperFunction;
rightChain.get<ChainPositions::DistWaveshaper>().functionToUse = waveShaperFunction;
// makeup-gain after waveshaper for following functions
if (waveShapeFunction == WaveShaperFunction::HardClip) {
float makeupGain = 16.f * 2 * chainSettings.WaveShapeAmount * chainSettings.WaveShapeAmount;
leftChain.get<ChainPositions::WaveshaperMakeupGain>().setGainDecibels(makeupGain);
rightChain.get<ChainPositions::WaveshaperMakeupGain>().setGainDecibels(makeupGain);
} else {
leftChain.get<ChainPositions::WaveshaperMakeupGain>().setGainDecibels(0);
rightChain.get<ChainPositions::WaveshaperMakeupGain>().setGainDecibels(0);
}

// post-gain
leftChain.get<ChainPositions::PostGain>().setGainDecibels(chainSettings.PostGain);
Expand Down Expand Up @@ -327,7 +341,7 @@ void GnomeDistortAudioProcessor::getStateInformation(juce::MemoryBlock& destData
// You should use this method to store your parameters in the memory block.
// You could do that either as raw data, or use the XML or ValueTree classes
// as intermediaries to make it easy to save and load complex data.

juce::MemoryOutputStream mos(destData, true);
apvts.state.writeToStream(mos);
}
Expand Down Expand Up @@ -367,7 +381,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout GnomeDistortAudioProcessor::
layout.add(std::make_unique<juce::AudioParameterFloat>("PreGain", "PreGain", juce::NormalisableRange<float>(-8.f, 32.f, 0.5f, 1.f), 0.f));
layout.add(std::make_unique<juce::AudioParameterFloat>("Bias", "Bias", juce::NormalisableRange<float>(-1.f, 1.f, 0.01f, 1.f), 0.f));
layout.add(std::make_unique<juce::AudioParameterFloat>("WaveShapeAmount", "WaveShapeAmount", juce::NormalisableRange<float>(0.f, 0.990f, 0.01f, 0.75f), 0.f));
layout.add(std::make_unique<juce::AudioParameterChoice>("WaveShapeFunction", "WaveShapeFunction", getWaveshaperOptions(), 0));
layout.add(std::make_unique<juce::AudioParameterChoice>("WaveShapeFunction", "WaveShapeFunction", WaveShaperOptions, 0));
layout.add(std::make_unique<juce::AudioParameterFloat>("PostGain", "PostGain", juce::NormalisableRange<float>(-32.f, 8.f, 0.5f, 1.f), 0.f));
layout.add(std::make_unique<juce::AudioParameterFloat>("DryWet", "DryWet", juce::NormalisableRange<float>(0.f, 1.f, 0.01f, 1.f), 1.f));

Expand Down
Loading

0 comments on commit 1f5a9ca

Please sign in to comment.