Path: blob/main/audio/alienwah/files/patch-aw.cpp
16462 views
--- aw.cpp.orig 2002-01-25 17:51:03 UTC1+++ aw.cpp2@@ -62,11 +62,11 @@ The output of this effect is the real pa34/*****************************************************************************/56-#include <math.h>7-#include <complex.h>8-#include <stdlib.h>9-#include <string.h>10-#include <stdio.h>11+#include <cmath>12+#include <complex>13+#include <cstdlib>14+#include <cstring>15+#include <cstdio>1617/*****************************************************************************/1819@@ -85,6 +85,8 @@ The output of this effect is the real pa20#define AW_INPUT2 621#define AW_OUTPUT2 72223+#define AW_NUMPORTS 824+25/*****************************************************************************/26/* Make number of samples represented by 'delay' proportional to27* the sample rate, such that delay=1 is 1 sample buffer at28@@ -118,10 +120,10 @@ unsigned long t; //??29unsigned long t2; //??30unsigned long k; // index for delaybuf31unsigned long k2; // index for delaybuf232-float_complex * delaybuf;33-float_complex * delaybuf2;34-float_complex c; //??35-float_complex c2; //??36+std::complex<float> * delaybuf;37+std::complex<float> * delaybuf2;38+std::complex<float> c; //??39+std::complex<float> c2; //??40float freq;41float startphase;42float feedback;43@@ -135,25 +137,61 @@ AW(const long lSampleRate) :44samplerate(lSampleRate),45t(0), t2(0),46k(0), k2(0),47- c(float_complex(0,0)),48- c2(float_complex(0,0)) {49+ c(std::complex<float>(0,0)),50+ c2(std::complex<float>(0,0)) {51}5253+friend LADSPA_Handle instantiateAW(const LADSPA_Descriptor *,54+ unsigned long SampleRate);55+friend void connectPortToAW(LADSPA_Handle instance, unsigned long port,56+ LADSPA_Data * datalocation);57+friend void activateAW(void * pvHandle);58+friend void runAW_Mono(LADSPA_Handle instance, unsigned long samplecount);59+friend void runAW_Stereo(LADSPA_Handle instance, unsigned long samplecount);60+friend void cleanupAW(void *pvHandle);61+62/*63- * simply calls the constructor64+ * Munge some things based upon the settings passed. Set65+ * initial state.66*/67-friend LADSPA_Handle instantiateAW(const LADSPA_Descriptor *,68- unsigned long SampleRate) {69+void initState(int chans) {70+ inited = true;71+ freq = (float)lfreq;72+ feedback = ((float)lfeedback)/4 + 0.74; // whyfor?73+ if (feedback>0.999) feedback=0.999;74+ if (ldelay < 0) ldelay = 1;75+ // swh I think this is wrong delay = (unsigned int) (ldelay * samplerate * NORM);76+ delay = (unsigned int) ldelay;77+printf("delay %d\n", delay);78+ if (delay < 1) delay = 1;79+ if (delay > MAX_DELAY) delay = MAX_DELAY;80+ delaybuf = new std::complex<float>[delay];81+ if (chans == 2) {82+ delaybuf2 = new std::complex<float>[MAX_DELAY+1];83+ }84+ for (unsigned int i =0; i<delay; ++i) {85+ delaybuf[i] = std::complex<float>(0,0);86+ }87+}88+89+};90+9192+/*93+ * simply calls the constructor94+ */95+LADSPA_Handle instantiateAW(const LADSPA_Descriptor *,96+ unsigned long SampleRate)97+{98return new AW(SampleRate);99}100101/*102* get all the pointers to our ports data103*/104-friend void connectPortToAW(LADSPA_Handle instance, unsigned long port,105- LADSPA_Data * datalocation) {106-107+void connectPortToAW(LADSPA_Handle instance, unsigned long port,108+ LADSPA_Data * datalocation)109+{110switch (port) {111case AW_FREQ:112((AW *)instance)->lfreq = *datalocation;113@@ -182,41 +220,19 @@ friend void connectPortToAW(LADSPA_Handl114* connect_port may be called before of after here, so we115* cannot rely upon port data for initialization116*/117-friend void activateAW(void * pvHandle) {118-}119-120-/*121- * Munge some things based upon the settings passed. Set122- * initial state.123- */124-void initState(int chans) {125- inited = true;126- freq = (float)lfreq;127- feedback = ((float)lfeedback)/4 + 0.74; // whyfor?128- if (feedback>0.999) feedback=0.999;129- if (ldelay < 0) ldelay = 1;130- // swh I think this is wrong delay = (unsigned int) (ldelay * samplerate * NORM);131- delay = (unsigned int) ldelay;132-printf("delay %d\n", delay);133- if (delay < 1) delay = 1;134- if (delay > MAX_DELAY) delay = MAX_DELAY;135- delaybuf = new float_complex[delay];136- if (chans == 2) {137- delaybuf2 = new float_complex[MAX_DELAY+1];138- }139- for (unsigned int i =0; i<delay; ++i) {140- delaybuf[i] = float_complex(0,0);141- }142+void activateAW(void * pvHandle)143+{144}145146/*147* Mono effect148* Do the effect. 'i_buf' is transformed into 'o_buf'149*/150-friend void runAW_Mono(LADSPA_Handle instance, unsigned long samplecount) {151+void runAW_Mono(LADSPA_Handle instance, unsigned long samplecount)152+{153AW * me = (AW *)instance;154float lfo;155- float_complex outc;156+ std::complex<float> outc;157float lfoskip = me->freq * 2 * PI / me->samplerate;158159if (! me->inited) me->initState(1);160@@ -224,7 +240,7 @@ friend void runAW_Mono(LADSPA_Handle ins161for(unsigned int i=0; i<samplecount; ++i) {162if ((me->t++ % LFO_SKIPSAMPLES) == 0) {163lfo = 1 + cos(me->t * lfoskip + me->startphase);164- me->c = float_complex(cos(lfo) * me->feedback,165+ me->c = std::complex<float>(cos(lfo) * me->feedback,166sin(lfo) * me->feedback);167}168outc = me->c * me->delaybuf[me->k] + (1 - me->feedback) *169@@ -238,10 +254,11 @@ friend void runAW_Mono(LADSPA_Handle ins170/*171* Stereo effect?172*/173-friend void runAW_Stereo(LADSPA_Handle instance, unsigned long samplecount) {174+void runAW_Stereo(LADSPA_Handle instance, unsigned long samplecount)175+{176AW * me = (AW *)instance;177float lfo;178- float_complex outc;179+ std::complex<float> outc;180float lfoskip = me->freq * 2 * PI / me->samplerate;181182if (! me->inited) me->initState(2);183@@ -249,7 +266,7 @@ friend void runAW_Stereo(LADSPA_Handle i184for(unsigned int i=0; i<samplecount; ++i) {185if ((me->t++ % LFO_SKIPSAMPLES) == 0) {186lfo = 1 + cos(me->t * lfoskip + me->startphase);187- me->c = float_complex(cos(lfo) * me->feedback,188+ me->c = std::complex<float>(cos(lfo) * me->feedback,189sin(lfo) * me->feedback);190}191outc = me->c * me->delaybuf[me->k] + (1 - me->feedback) *192@@ -262,7 +279,7 @@ friend void runAW_Stereo(LADSPA_Handle i193for(unsigned int i=0; i<samplecount; ++i) {194if ((me->t2++ % LFO_SKIPSAMPLES) == 0) {195lfo = 1 + cos(me->t2 * lfoskip);196- me->c2 = float_complex(cos(lfo) * me->feedback,197+ me->c2 = std::complex<float>(cos(lfo) * me->feedback,198sin(lfo) * me->feedback);199}200outc = me->c2 * me->delaybuf2[me->k2] + (1 - me->feedback) *201@@ -273,13 +290,11 @@ friend void runAW_Stereo(LADSPA_Handle i202}203}204205-206-friend void cleanupAW(void *pvHandle) {207- delete (AW *)pvHandle;208+void cleanupAW(void *pvHandle)209+{210+ delete (AW *)pvHandle;211}212213-};214-215/*****************************************************************************/216217typedef char * char_ptr;218@@ -342,7 +357,7 @@ StartupShutdownHandler() {219desc[plug]->PortCount220= 6;221portdesc222- = new LADSPA_PortDescriptor[6];223+ = new LADSPA_PortDescriptor[AW_NUMPORTS];224desc[plug]->PortDescriptors225= (const LADSPA_PortDescriptor *)portdesc;226portdesc[AW_FREQ]227@@ -358,7 +373,7 @@ StartupShutdownHandler() {228portdesc[AW_OUTPUT1]229= LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;230pnames231- = new char_ptr[6];232+ = new char_ptr[AW_NUMPORTS];233desc[plug]->PortNames234= (const char **)pnames;235pnames[AW_FREQ]236@@ -376,7 +391,7 @@ StartupShutdownHandler() {237238/* range hints */239rangehints240- = new LADSPA_PortRangeHint[6];241+ = new LADSPA_PortRangeHint[AW_NUMPORTS];242desc[plug]->PortRangeHints243= (const LADSPA_PortRangeHint *)rangehints;244245@@ -417,7 +432,7 @@ StartupShutdownHandler() {246desc[plug]->PortCount247= 8;248portdesc249- = new LADSPA_PortDescriptor[8];250+ = new LADSPA_PortDescriptor[AW_NUMPORTS];251desc[plug]->PortDescriptors252= (const LADSPA_PortDescriptor *)portdesc;253portdesc[AW_FREQ]254@@ -437,7 +452,7 @@ StartupShutdownHandler() {255portdesc[AW_OUTPUT1]256= LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;257pnames258- = new char_ptr[8];259+ = new char_ptr[AW_NUMPORTS];260desc[plug]->PortNames261= (const char **)pnames;262pnames[AW_FREQ]263@@ -459,7 +474,7 @@ StartupShutdownHandler() {264265/* range hints */266rangehints267- = new LADSPA_PortRangeHint[8];268+ = new LADSPA_PortRangeHint[AW_NUMPORTS];269desc[plug]->PortRangeHints270= (const LADSPA_PortRangeHint *)rangehints;271272273274