mirror of
https://codeberg.org/armin/chromaflock.git
synced 2026-09-01 04:10:47 +02:00
Add distortion Symmetry and Tone knobs
This commit is contained in:
parent
2a1feaaea9
commit
1abf4f4b60
2 changed files with 21 additions and 5 deletions
|
|
@ -8,10 +8,12 @@ class Distortion {
|
||||||
public:
|
public:
|
||||||
void prepare(double /*sr*/) {}
|
void prepare(double /*sr*/) {}
|
||||||
|
|
||||||
void setParameters(DistortionType type, float amount, float mix) {
|
void setParameters(DistortionType type, float amount, float symmetry, float tone) {
|
||||||
distType = type;
|
distType = type;
|
||||||
distAmount = amount;
|
distAmount = amount;
|
||||||
dryWet = mix;
|
distSymmetry = symmetry;
|
||||||
|
distTone = tone;
|
||||||
|
dryWet = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
float process(float input) {
|
float process(float input) {
|
||||||
|
|
@ -58,7 +60,15 @@ public:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (distAmount < 0.001f)
|
// Asymmetry: bias the signal before/after shaping for even-harmonic grit
|
||||||
|
wet += distSymmetry * 0.5f;
|
||||||
|
|
||||||
|
// Tone: one-pole low-pass to tame harsh high harmonics
|
||||||
|
float lpCoeff = distTone * 0.9f + 0.05f;
|
||||||
|
toneState += lpCoeff * (wet - toneState);
|
||||||
|
wet = toneState;
|
||||||
|
|
||||||
|
if (distAmount < 0.001f && std::abs(distSymmetry) < 0.001f)
|
||||||
return input;
|
return input;
|
||||||
|
|
||||||
return input + (wet - input) * dryWet;
|
return input + (wet - input) * dryWet;
|
||||||
|
|
@ -67,5 +77,8 @@ public:
|
||||||
private:
|
private:
|
||||||
DistortionType distType = DistortionType::SoftClip;
|
DistortionType distType = DistortionType::SoftClip;
|
||||||
float distAmount = 0.0f;
|
float distAmount = 0.0f;
|
||||||
float dryWet = 0.0f;
|
float distSymmetry = 0.0f;
|
||||||
|
float distTone = 1.0f;
|
||||||
|
float dryWet = 1.0f;
|
||||||
|
float toneState = 0.0f;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
|
||||||
juce::AudioProcessorValueTreeState::ParameterLayout layout;
|
juce::AudioProcessorValueTreeState::ParameterLayout layout;
|
||||||
|
|
||||||
auto zeroOne = juce::NormalisableRange<float>(0.0f, 1.0f, 0.01f);
|
auto zeroOne = juce::NormalisableRange<float>(0.0f, 1.0f, 0.01f);
|
||||||
|
auto minusOneOne = juce::NormalisableRange<float>(-1.0f, 1.0f, 0.01f);
|
||||||
|
|
||||||
// LFO1 depth: fine 0.001 step, with a skew of 2.0 (value = p^2) so the
|
// LFO1 depth: fine 0.001 step, with a skew of 2.0 (value = p^2) so the
|
||||||
// lower knob range resolves much finer and the 0.001 step only applies
|
// lower knob range resolves much finer and the 0.001 step only applies
|
||||||
|
|
@ -153,7 +154,9 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
|
||||||
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
||||||
juce::ParameterID{"distAmount", 1}, "Dist Amount", zeroOne, 0.0f));
|
juce::ParameterID{"distAmount", 1}, "Dist Amount", zeroOne, 0.0f));
|
||||||
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
||||||
juce::ParameterID{"distMix", 1}, "Dist Mix", zeroOne, 0.0f));
|
juce::ParameterID{"distSymmetry", 1}, "Dist Symmetry", minusOneOne, 0.0f));
|
||||||
|
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
||||||
|
juce::ParameterID{"distTone", 1}, "Dist Tone", zeroOne, 1.0f));
|
||||||
|
|
||||||
// COMPRESSOR
|
// COMPRESSOR
|
||||||
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
layout.add(std::make_unique<juce::AudioParameterFloat>(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue