1 // interface for STK Effects
2 
3 #include <stdlib.h>
4 
5 #include "stkint.h"
6 
7 #include "NRev.h"
8 #include "JCRev.h"
9 #include "PRCRev.h"
10 
11 using namespace Nyq;
12 
13 // Reverb Effects ==========================================================
14 
15 struct stkEffect {
16   Effect * effectPtr;
17 };
18 
initStkEffect(int eff_type,::StkFloat trev,int sample_rate)19 struct stkEffect *initStkEffect(int eff_type, ::StkFloat trev, int sample_rate) {
20   struct stkEffect * eff = (struct stkEffect *) malloc(sizeof(struct stkEffect));
21   Stk::setSampleRate(sample_rate);
22   switch(eff_type) {
23   case NREV:
24     eff->effectPtr = new NRev(trev);
25     break;
26   case JCREV:
27     eff->effectPtr = new JCRev(trev);
28     break;
29   case PRCREV:
30     eff->effectPtr = new PRCRev(trev);
31     break;
32   default:
33     return NULL;
34   }
35   return eff;
36 }
37 
deleteStkEffect(struct stkEffect * eff)38 int deleteStkEffect(struct stkEffect * eff) {
39   delete(eff->effectPtr);
40   free(eff);
41   return 0;
42 }
43 
stkEffectTick(struct stkEffect * eff,::StkFloat s)44 ::StkFloat stkEffectTick(struct stkEffect * eff, ::StkFloat s) {
45   return eff->effectPtr->tick(s);
46 }
47 
stkEffectSetMix(struct stkEffect * eff,::StkFloat mix)48 void stkEffectSetMix (struct stkEffect * eff, ::StkFloat mix) {
49   eff->effectPtr->setEffectMix(mix);
50 }
51 
52 // PitShift ===================================================
53 
54 #include "PitShift.h"
55 
initStkPitShift(::StkFloat shift,int sample_rate)56 struct stkEffect *initStkPitShift(::StkFloat shift, int sample_rate) {
57   PitShift * ps;
58   ps = new PitShift();
59   ps->setShift(shift);
60   struct stkEffect * eff  = (struct stkEffect *) malloc(sizeof(struct stkEffect));
61   Stk::setSampleRate(sample_rate);
62   eff->effectPtr = ps;
63   return eff;
64 }
65 
66 // Chorus =====================================================
67 
68 #include "Chorus.h"
69 
initStkChorus(::StkFloat baseDelay,::StkFloat depth,::StkFloat freq,int sample_rate)70 struct stkEffect *initStkChorus(::StkFloat baseDelay, ::StkFloat depth, ::StkFloat freq, int sample_rate) {
71   Chorus * ch;
72   ch = new Chorus(baseDelay);
73   ch->setModDepth(depth);
74   ch->setModFrequency(freq);
75   struct stkEffect * eff  = (struct stkEffect *) malloc(sizeof(struct stkEffect));
76   Stk::setSampleRate(sample_rate);
77   eff->effectPtr = ch;
78   return eff;
79 }
80 
81