diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-01-18 02:39:28 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-01-18 02:39:28 +1100 |
commit | a245ede5d66d2cd5226410aab728f8271bb0f21e (patch) | |
tree | 53692444eab709fa7311ed974bac90e893abaec8 | |
parent | bd951283e2021eceb61768a9d9b81b3b2da640cb (diff) |
More progress on ZamPiano
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | plugins/ZamPiano/ZamPianoPlugin.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/plugins/ZamPiano/ZamPianoPlugin.cpp b/plugins/ZamPiano/ZamPianoPlugin.cpp index 98f659e..7347856 100644 --- a/plugins/ZamPiano/ZamPianoPlugin.cpp +++ b/plugins/ZamPiano/ZamPianoPlugin.cpp @@ -131,7 +131,7 @@ void ZamPianoPlugin::d_activate() oldbuf[0][i] = oldbuf[1][i] = 0.; } - dumpvals(); + //dumpvals(); } double ZamPianoPlugin::q0(int n) @@ -223,7 +223,7 @@ void ZamPianoPlugin::e(int n, double vhammer, int *state, float *out, uint32_t f double sr = d_getSampleRate(); double t0 = 0.008; //1000 0.8ms contact time //int N = t0 * frames; - double dt = 10./sr; + double dt = 1.; double t; uint32_t i; vhammer *= 1000.; @@ -235,10 +235,10 @@ void ZamPianoPlugin::e(int n, double vhammer, int *state, float *out, uint32_t f if (*state == STRIKE) *state = ATTACK; for (i = 0; i < frames; i++) { - if (timepos[n] >= t0*frames) { + if (timepos[n] >= t0*sr) { *state = SUSTAIN; } - if (timepos[n] > 0.1*frames) { + if (timepos[n] > sr) { *state = SILENT; timepos[n] = 0; integrala[n] = 0.; @@ -248,27 +248,26 @@ void ZamPianoPlugin::e(int n, double vhammer, int *state, float *out, uint32_t f if (*state == ATTACK) { double ii = i / (double) (frames + 1.); ff1[n] = fk1(ff0[n], dt, timepos[n], n); - integrala[n] += ff1[n]*a(i, n) * cos(w(i, ii) * timepos[n]); - integralb[n] -= ff1[n]*a(i, n) * sin(w(i, ii) * timepos[n]); + integrala[n] += ff1[n]*a(i, n) * cos(w(i, ii) * timepos[n]*sr)*dt; + integralb[n] -= ff1[n]*a(i, n) * sin(w(i, ii) * timepos[n]*sr)*dt; ff0[n] = ff1[n]; timepos[n] += dt; - printf("%f, %f, %f\n", integrala[n], integralb[n], ff0[n]); - fftvars.cmplex[0][i] = ( 2.*mstring(n) + //printf("%f, %f, %f\n", integrala[n], integralb[n], ff0[n]); + fftvars.cmplex[0][i] += ( 2.*mstring(n) * w(i, ii)*w(i, ii) / (mhammer(n)*vhammer*vhammer) - * (integrala[n]*integrala[n]) ); - fftvars.cmplex[1][i] = ( 2.*mstring(n) + * (integrala[n]*integrala[n])+integralb[n]*integralb[n] ); + fftvars.cmplex[1][i] += ( 2.*mstring(n) * w(i, ii)*w(i, ii) / (mhammer(n)*vhammer*vhammer) - * (integralb[n]*integralb[n]) ); + * (integrala[n]*integrala[n])+integralb[n]*integralb[n] ); //printf("%f %f\n", fftvars.cmplex[0][i], fftvars.cmplex[1][i]); + } else if (*state == SILENT) { + fftvars.cmplex[0][i] = 0.; + fftvars.cmplex[1][i] = 0.; } else { - timepos[n] += frames; - for (i = 0; i < frames; i++) { - fftvars.cmplex[0][i] = 0.2;//oldbuf[0][i]*0.2; - fftvars.cmplex[1][i] = 0.2;//oldbuf[1][i]*0.2; - } + timepos[n] += dt; } } /* |