Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
#include "public.sdk/source/vst/vstaudioeffect.h"
#include <cmath>
using namespace Steinberg::Vst;
class Waveshaper : public AudioEffect {
public:
Waveshaper() {}
// Initialize the plugin
tresult PLUGIN_API initialize(FUnknown* context) SMTG_OVERRIDE {
tresult result = AudioEffect::initialize(context);
if (result != kResultOk) return result;
// Add audio inputs/outputs
addAudioInput(USTRING("Stereo In"), SpeakerArr::kStereo);
addAudioOutput(USTRING("Stereo Out"), SpeakerArr::kStereo);
// Add parameters
parameters.addParameter(USTRING("A"), nullptr, 0, 0.5, ParameterInfo::kCanAutomate, 0);
parameters.addParameter(USTRING("A+"), nullptr, 0, 0.5, ParameterInfo::kCanAutomate, 1);
parameters.addParameter(USTRING("A-"), nullptr, 0, 0.5, ParameterInfo::kCanAutomate, 2);
parameters.addParameter(USTRING("L+"), nullptr, 0, 5.0, ParameterInfo::kCanAutomate, 3);
parameters.addParameter(USTRING("L-"), nullptr, 0, 5.0, ParameterInfo::kCanAutomate, 4);
return kResultOk;
}
// Process audio
tresult PLUGIN_API process(ProcessData& data) SMTG_OVERRIDE {
if (data.numInputs == 0 || data.numOutputs == 0) return kResultOk;
float* in = data.inputs[0].channelBuffers32[0];
float* out = data.outputs[0].channelBuffers32[0];
int32 numSamples = data.numSamples;
// Get parameters
float A = parameters.getParameter(0)->getNormalized();
float A_plus = parameters.getParameter(1)->getNormalized();
float A_minus = parameters.getParameter(2)->getNormalized();
float L_plus = parameters.getParameter(3)->getNormalized();
float L_minus = parameters.getParameter(4)->getNormalized();
for (int32 i = 0; i < numSamples; i++) {
float input = in;
// Apply waveshaping formula
float amp = 2.0f * (5.0f - A) * input;
float dist_plus = 2.5f * A_plus * saturate((input / 1.0f) + (L_plus - 5.0f));
float dist_minus = -1.4f * A_minus * saturate((input / -1.0f) + (L_minus - 5.0f));
out = amp + dist_plus + dist_minus;
}
return kResultOk;
}
// Saturation function
float saturate(float x) {
return std::tanh(x);
}
static FUnknown* createInstance(void*) { return (IAudioProcessor*)new Waveshaper(); }
};
// Factory setup
BEGIN_FACTORY_DEF("YourCompany", "yourcompany.com - Diese Website steht zum Verkauf! - Informationen zum Thema yourcompany.", "contact@yourcompany.com")
DEF_CLASS2(INLINE_UID_FROM_FUID(FUID(0x12345678, 0x12345678, 0x12345678, 0x1234567),
PClassInfo::kManyInstances,
kVstAudioEffectClass,
"Waveshaper",
Vst::kDistributable,
"Fx|Waveshaper",
"1.0.0",
"VST 3.7.1",
Waveshaper::createInstance)
END_FACTORY
declare name "Distortion_Waveshaper";
import("maths.lib");
import("filters.lib");
a_plus = hslider("[1]A+", 0,-5,+5, 0.0001);
l_plus = hslider("[2]L+", 5, 0,10, 0.0001);
a = hslider("[3]A ", 5, 0,10, 0.0001);
l_min = hslider("[4]L-", 5, 0,10, 0.0001);
a_min = hslider("[5]A-", 0,-5,+5, 0.0001);
amp(x) = 2*(5-a)*x;
ramp(x) = max(x,0);
dist_plus(x) = +2.5*a_plus*ramp( x + (l_plus - 5));
dist_min(x) = -1.4*a_min *ramp(-x + (l_min - 5));
y(x) = amp(x) + dist_plus(x) + dist_min(x);
safety(x) = tanh(dcblocker(x));
process = safety(y);
Een Distortion/Waveshaper plugin met SynthCraft, FAUST, etc.
