// generated from file '../src/plugins/ts9sim.dsp' by dsp2cc: // Code generated with Faust (https://faust.grame.fr) #include "gx_faust_support.h" #include "gx_plugin.h" #include "ts9nonlin.h" namespace pluginlib { namespace ts9sim { class Dsp: public PluginDef { private: gx_resample::FixedRateResampler smp; int sample_rate; int fSampleRate; double fConst1; FAUSTFLOAT fHslider0; double fVec0[2]; double fConst3; double fConst4; double fConst5; FAUSTFLOAT fHslider1; double fRec1[2]; double fVec1[2]; double fRec0[2]; FAUSTFLOAT fHslider2; double fRec2[2]; void clear_state_f(); int load_ui_f(const UiBuilder& b, int form); static const char *glade_def; void init(unsigned int sample_rate); void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0); int register_par(const ParamReg& reg); static void clear_state_f_static(PluginDef*); static int load_ui_f_static(const UiBuilder& b, int form); static void init_static(unsigned int sample_rate, PluginDef*); static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginDef*); static int register_params_static(const ParamReg& reg); static void del_instance(PluginDef *p); public: Dsp(); ~Dsp(); }; Dsp::Dsp() : PluginDef() { version = PLUGINDEF_VERSION; flags = 0; id = "ts9sim"; name = N_("Tube Screamer"); groups = 0; description = ""; // description (tooltip) category = N_("Distortion"); // category shortname = ""; // shortname mono_audio = compute_static; stereo_audio = 0; set_samplerate = init_static; activate_plugin = 0; register_params = register_params_static; load_ui = load_ui_f_static; clear_state = clear_state_f_static; delete_instance = del_instance; } Dsp::~Dsp() { } inline void Dsp::clear_state_f() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) fVec0[l0] = 0.0; for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) fRec1[l1] = 0.0; for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) fVec1[l2] = 0.0; for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) fRec0[l3] = 0.0; for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) fRec2[l4] = 0.0; } void Dsp::clear_state_f_static(PluginDef *p) { static_cast(p)->clear_state_f(); } inline void Dsp::init(unsigned int RsamplingFreq) { sample_rate = 96000; smp.setup(RsamplingFreq, sample_rate); fSampleRate = sample_rate; double fConst0 = std::min(192000.0, std::max(1.0, double(fSampleRate))); fConst1 = (3.1415926535897931 / fConst0); double fConst2 = (0.00044179999999999995 * fConst0); fConst3 = (1.0 / (fConst2 + 1.0)); fConst4 = (1.0 - fConst2); fConst5 = (9.3999999999999995e-08 * fConst0); clear_state_f(); } void Dsp::init_static(unsigned int sample_rate, PluginDef *p) { static_cast(p)->init(sample_rate); } void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0) { FAUSTFLOAT buf[smp.max_out_count(count)]; int ReCount = smp.up(count, input0, buf); double fSlow0 = (1.0 / std::tan((fConst1 * double(fHslider0)))); double fSlow1 = (1.0 / (fSlow0 + 1.0)); double fSlow2 = (1.0 - fSlow0); double fSlow3 = (fConst5 * ((500000.0 * double(fHslider1)) + 55700.0)); double fSlow4 = (fSlow3 + 1.0); double fSlow5 = (1.0 - fSlow3); double fSlow6 = (0.0010000000000000009 * std::pow(10.0, (0.050000000000000003 * double(fHslider2)))); for (int i0 = 0; (i0 < ReCount); i0 = (i0 + 1)) { double fTemp0 = double(buf[i0]); fVec0[0] = fTemp0; fRec1[0] = (0.0 - (fConst3 * ((fConst4 * fRec1[1]) - ((fSlow4 * fTemp0) + (fSlow5 * fVec0[1]))))); double fTemp1 = (fTemp0 - double(ts9nonlin(double((fRec1[0] - fTemp0))))); fVec1[0] = fTemp1; fRec0[0] = (0.0 - (fSlow1 * ((fSlow2 * fRec0[1]) - (fTemp1 + fVec1[1])))); fRec2[0] = (fSlow6 + (0.999 * fRec2[1])); buf[i0] = FAUSTFLOAT((fRec0[0] * fRec2[0])); fVec0[1] = fVec0[0]; fRec1[1] = fRec1[0]; fVec1[1] = fVec1[0]; fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; } smp.down(buf, output0); } void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginDef *p) { static_cast(p)->compute(count, input0, output0); } int Dsp::register_par(const ParamReg& reg) { reg.registerFloatVar("ts9sim.drive",N_("Drive"),"S","",&fHslider1, 0.5, 0.0, 1.0, 0.01, 0); reg.registerFloatVar("ts9sim.level",N_("Level"),"S","",&fHslider2, -16.0, -20.0, 4.0, 0.10000000000000001, 0); reg.registerFloatVar("ts9sim.tone",N_("Tone"),"SL","",&fHslider0, 400.0, 100.0, 1000.0, 1.03, 0); return 0; } int Dsp::register_params_static(const ParamReg& reg) { return static_cast(reg.plugin)->register_par(reg); } const char *Dsp::glade_def = "\ \n\ \n\ \n\ \n\ \n\ \n\ False\n\ \n\ \n\ \n\ \n\ \n\ True\n\ False\n\ vertical\n\ \n\ \n\ True\n\ False\n\ 4\n\ \n\ \n\ True\n\ False\n\ 10\n\ \n\ \n\ True\n\ False\n\ vertical\n\ \n\ \n\ True\n\ False\n\ label\n\ \n\ \n\ False\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ True\n\ True\n\ ts9sim.drive\n\ label1:rack_label\n\ \n\ \n\ False\n\ False\n\ 1\n\ \n\ \n\ \n\ \n\ False\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ vertical\n\ \n\ \n\ True\n\ False\n\ label\n\ \n\ \n\ False\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ True\n\ True\n\ ts9sim.level\n\ label2:rack_label\n\ \n\ \n\ False\n\ False\n\ 1\n\ \n\ \n\ \n\ \n\ False\n\ False\n\ 1\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ vertical\n\ \n\ \n\ True\n\ False\n\ label\n\ \n\ \n\ False\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ True\n\ True\n\ ts9sim.tone\n\ label3:rack_label\n\ \n\ \n\ False\n\ False\n\ 1\n\ \n\ \n\ \n\ \n\ False\n\ False\n\ 2\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ end\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ 4\n\ \n\ \n\ True\n\ True\n\ True\n\ 0\n\ ts9sim.drive\n\ False\n\ right\n\ 0.52000000000000002\n\ label0:rack_label\n\ \n\ \n\ False\n\ False\n\ 0\n\ \n\ \n\ \n\ \n\ True\n\ False\n\ Drive\n\ 0\n\ \n\ \n\ False\n\ False\n\ 1\n\ \n\ \n\ \n\ \n\ True\n\ True\n\ 1\n\ \n\ \n\ \n\ \n\ \n\ \n\ "; inline int Dsp::load_ui_f(const UiBuilder& b, int form) { if (form & UI_FORM_GLADE) { b.load_glade(glade_def); return 0; } if (form & UI_FORM_STACK) { #define PARAM(p) ("ts9sim" "." p) b.openHorizontalhideBox(""); b.create_master_slider(PARAM("drive"), "drive"); b.closeBox(); b.openHorizontalBox(""); b.insertSpacer(); b.create_small_rackknobr(PARAM("drive"), "drive"); b.create_small_rackknob(PARAM("level"), "level"); b.create_small_rackknob(PARAM("tone"), "tone"); b.insertSpacer(); b.closeBox(); #undef PARAM return 0; } return -1; } int Dsp::load_ui_f_static(const UiBuilder& b, int form) { return static_cast(b.plugin)->load_ui_f(b, form); } PluginDef *plugin() { return new Dsp(); } void Dsp::del_instance(PluginDef *p) { delete static_cast(p); } } // end namespace ts9sim } // end namespace pluginlib