aboutsummaryrefslogtreecommitdiff
path: root/stksitar~
diff options
context:
space:
mode:
Diffstat (limited to 'stksitar~')
-rw-r--r--stksitar~/Makefile4
-rw-r--r--stksitar~/README2
-rw-r--r--stksitar~/help-stksitar~.pd73
-rw-r--r--stksitar~/sitar.cc35
-rw-r--r--stksitar~/sitar.h31
-rw-r--r--stksitar~/stksitar~.cc4
6 files changed, 108 insertions, 41 deletions
diff --git a/stksitar~/Makefile b/stksitar~/Makefile
index 5314a78..f23c21b 100644
--- a/stksitar~/Makefile
+++ b/stksitar~/Makefile
@@ -21,8 +21,8 @@ LINUXINCLUDE = -I../../src -I/usr/local/include
.cc.pd_linux: sitar.o
g++ -O3 -Wall -D__OS_Linux_ -g -I$(STK_HOME)/include -c sitar.cc
g++ $(LINUXCCFLAGS) $(LINUXINCLUDE) -I$(STK_HOME)/include -o $*.o -c $*.cc
- ld -export_dynamic -shared -o $*.pd_linux *.o $(STK_HOME)/src/stklib.a -lc -lm -lstdc++ -lg++
- #strip --strip-unneeded $*.pd_linux
+ g++ -export_dynamic -shared -o $*.pd_linux *.o $(STK_HOME)/src/libstk.a -lc -lm -lpthread
+ strip --strip-unneeded $*.pd_linux
rm -f *.o ../$*.pd_linux
ln -s $*/$*.pd_linux ..
diff --git a/stksitar~/README b/stksitar~/README
index bb3db3d..39766e1 100644
--- a/stksitar~/README
+++ b/stksitar~/README
@@ -1,5 +1,5 @@
*****************************************************************************
-Version 0.01
+Version 0.2
embedding Perry Cook's ragamatic in Pure Data
copyright 2001 by Perry Cook
copyleft 2001 by Yves Degoyon
diff --git a/stksitar~/help-stksitar~.pd b/stksitar~/help-stksitar~.pd
new file mode 100644
index 0000000..75f6225
--- /dev/null
+++ b/stksitar~/help-stksitar~.pd
@@ -0,0 +1,73 @@
+#N canvas 33 1 784 529 10;
+#X obj 112 311 dac~;
+#X obj 115 248 stksitar~;
+#X obj 114 278 *~;
+#X floatatom 147 278 5 0 0 0 - - -;
+#X msg 162 172 stop;
+#X floatatom 196 200 5 52 100000 0 - - -;
+#X floatatom 238 248 5 5 35 0 - - -;
+#X text 247 335 stksitar~ : Object to embed stk-based sitar synthesis
+;
+#X text 247 360 Comments and bugs @ ydegoyon@free.fr;
+#X msg 113 346 \; pd dsp 1;
+#X msg 179 346 \; pd dsp 0;
+#X msg 24 34 bang;
+#X msg 93 99 play;
+#X msg 113 173 play;
+#X obj 195 248 / 100;
+#X text 276 279 Master level;
+#X obj 23 99 metro 2000;
+#X floatatom 52 75 5 0 0 0 - - -;
+#X obj 134 78 / 1000;
+#X obj 134 98 + 0.05;
+#X floatatom 182 98 5 0 0 0 - - -;
+#X obj 217 278 loadbang;
+#X text 301 258 ( min=0.05 \, max=0.35 \, default = 0.25 );
+#X text 303 248 Strength of plucking;
+#X text 239 205 ( min=52Hz \, default=250 Hz );
+#X text 241 195 Frequency;
+#X obj 231 77 qlist;
+#X msg 274 76 read sitar-freqs;
+#X msg 231 55 next;
+#X msg 274 55 rewind;
+#X text 247 348 Originally written by Perry Cook for STK/ragamatic
+;
+#X obj 386 76 loadbang;
+#X msg 189 278 40;
+#X obj 24 75 + 0;
+#X text 21 12 Ready for meditation ??;
+#X text 240 398 And now another message from Nancy Reagan : "Drugs
+destroy your brain";
+#X obj 134 59 random 200;
+#X obj 24 57 random 1000;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 2 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 1;
+#X connect 6 0 14 0;
+#X connect 11 0 16 0;
+#X connect 11 0 37 0;
+#X connect 12 0 1 0;
+#X connect 13 0 1 0;
+#X connect 14 0 1 2;
+#X connect 16 0 12 0;
+#X connect 16 0 28 0;
+#X connect 16 0 36 0;
+#X connect 16 0 37 0;
+#X connect 17 0 16 1;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 0 1 2;
+#X connect 21 0 32 0;
+#X connect 26 0 5 0;
+#X connect 26 1 29 0;
+#X connect 27 0 26 0;
+#X connect 28 0 26 0;
+#X connect 29 0 26 0;
+#X connect 31 0 27 0;
+#X connect 32 0 3 0;
+#X connect 33 0 17 0;
+#X connect 36 0 18 0;
+#X connect 37 0 33 0;
diff --git a/stksitar~/sitar.cc b/stksitar~/sitar.cc
index 11cf35b..291c5f2 100644
--- a/stksitar~/sitar.cc
+++ b/stksitar~/sitar.cc
@@ -9,18 +9,13 @@
#include "sitar.h"
-#ifndef MY_FLOAT
-#warning "weird : MY_FLOAT undefined"
-#define MY_FLOAT double
-#endif
-
-sitar :: sitar(MY_FLOAT lowestFreq)
+sitar :: sitar(StkFloat lowestFreq)
{
length = (long) (SRATE / lowestFreq + 1);
- loopGain = (MY_FLOAT) 0.999;
+ loopGain = (StkFloat) 0.999;
loopFilt = new OneZero();
- loopFilt->setCoeff(0.01);
- delayLine = new DLineA(length);
+ loopFilt->setZero(0.01);
+ delayLine = new DelayA(0.5 * length, length);
delay = length/2;
delayTarg = delay;
envelope = new ADSR();
@@ -43,21 +38,21 @@ void sitar :: clear()
delayLine->clear();
}
-void sitar :: setFreq(MY_FLOAT frequency)
+void sitar :: setFreq(StkFloat frequency)
{
delayTarg = (SRATE / frequency);
delay = delayTarg * (1.0 + (0.05 * noise->tick()));
delayLine->setDelay(delay);
- loopGain = (MY_FLOAT) 0.995 + (frequency * (MY_FLOAT) 0.000001);
- if (loopGain>1.0) loopGain = (MY_FLOAT) 0.9995;
+ loopGain = (StkFloat) 0.995 + (frequency * (StkFloat) 0.000001);
+ if (loopGain>1.0) loopGain = (StkFloat) 0.9995;
}
-void sitar :: pluck(MY_FLOAT amplitude)
+void sitar :: pluck(StkFloat amplitude)
{
envelope->keyOn();
}
-void sitar :: noteOn(MY_FLOAT freq, MY_FLOAT amp)
+void sitar :: noteOn(StkFloat freq, StkFloat amp)
{
this->setFreq(freq);
this->pluck(amp);
@@ -67,17 +62,17 @@ void sitar :: noteOn(MY_FLOAT freq, MY_FLOAT amp)
#endif
}
-void sitar :: noteOff(MY_FLOAT amp)
+void sitar :: noteOff(StkFloat amp)
{
- loopGain = (MY_FLOAT) 1.0 - amp;
+ loopGain = (StkFloat) 1.0 - amp;
#if defined(_debug_)
printf("sitar : NoteOff: Amp=%lf\n",amp);
#endif
}
-MY_FLOAT sitar :: tick()
+StkFloat sitar :: tick()
{
- MY_FLOAT temp;
+ StkFloat temp;
temp = delayLine->lastOut();
if (fabs(temp) > 1.0) {
@@ -97,9 +92,9 @@ MY_FLOAT sitar :: tick()
delayLine->setDelay(delay);
}
- lastOutput = delayLine->tick(loopFilt->tick(temp)
+ lastOutput_ = delayLine->tick(loopFilt->tick(temp)
+ (amPluck * envelope->tick() * noise->tick()));
- return lastOutput;
+ return lastOutput_;
}
diff --git a/stksitar~/sitar.h b/stksitar~/sitar.h
index d787211..1144c86 100644
--- a/stksitar~/sitar.h
+++ b/stksitar~/sitar.h
@@ -10,34 +10,33 @@
#if !defined(__sitar_h)
#define __sitar_h
-#include "Instrmnt.h"
-#include "DLineA.h"
+#include "Instrmnt.h"
+#include "DelayA.h"
#include "OneZero.h"
-#include "ADSR.h"
-#include "Noise.h"
-#include "Object.h"
+#include "Noise.h"
+#include "ADSR.h"
class sitar : public Instrmnt
{
protected:
- DLineA *delayLine;
+ DelayA *delayLine;
OneZero *loopFilt;
ADSR *envelope;
Noise *noise;
long length;
- MY_FLOAT loopGain;
- MY_FLOAT amPluck;
- MY_FLOAT delay;
- MY_FLOAT delayTarg;
+ StkFloat loopGain;
+ StkFloat amPluck;
+ StkFloat delay;
+ StkFloat delayTarg;
public:
- sitar(MY_FLOAT lowestFreq);
+ sitar(StkFloat lowestFreq);
~sitar();
void clear();
- virtual void setFreq(MY_FLOAT frequency);
- void pluck(MY_FLOAT amplitude);
- virtual void noteOn(MY_FLOAT freq, MY_FLOAT amp);
- virtual void noteOff(MY_FLOAT amp);
- virtual MY_FLOAT tick();
+ virtual void setFreq(StkFloat frequency);
+ void pluck(StkFloat amplitude);
+ virtual void noteOn(StkFloat freq, StkFloat amp);
+ virtual void noteOff(StkFloat amp);
+ virtual StkFloat tick();
};
#endif
diff --git a/stksitar~/stksitar~.cc b/stksitar~/stksitar~.cc
index bd47817..bfa7a54 100644
--- a/stksitar~/stksitar~.cc
+++ b/stksitar~/stksitar~.cc
@@ -49,7 +49,7 @@ static void stksitar_freq(t_stksitar* x, t_float ffreq)
post("stksitar~ : wrong frequency" );
return;
}
- x->x_stksitar->setFreq( (MY_FLOAT) ffreq );
+ x->x_stksitar->setFreq( (StkFloat) ffreq );
x->x_freq = ffreq;
}
@@ -60,7 +60,7 @@ static void stksitar_pluck(t_stksitar* x, t_float fpluck)
post("stksitar~ : wrong pluck argument" );
return;
}
- x->x_stksitar->pluck( (MY_FLOAT) fpluck );
+ x->x_stksitar->pluck( (StkFloat) fpluck );
x->x_pluck = fpluck;
}