summaryrefslogtreecommitdiff
path: root/plugins/ZamPiano/ZamPianoPlugin.cpp
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-01-22 12:16:30 +1100
committerDamien Zammit <damien@zamaudio.com>2015-01-22 12:17:48 +1100
commite25ac20029f8851586d3034ed9d5f1269b9c9a10 (patch)
tree06801188941fa2b0762c1db309b61a87d11a183c /plugins/ZamPiano/ZamPianoPlugin.cpp
parentcddf33ec020dec5b545ae4026eb5ce36f233478f (diff)
Improved triggering ZamPiano
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'plugins/ZamPiano/ZamPianoPlugin.cpp')
-rw-r--r--plugins/ZamPiano/ZamPianoPlugin.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/plugins/ZamPiano/ZamPianoPlugin.cpp b/plugins/ZamPiano/ZamPianoPlugin.cpp
index 0fba980..1d46c89 100644
--- a/plugins/ZamPiano/ZamPianoPlugin.cpp
+++ b/plugins/ZamPiano/ZamPianoPlugin.cpp
@@ -1540,8 +1540,10 @@ void ZamPianoPlugin::d_run(const float** inputs, float** outputs, uint32_t frame
}
else if (type == 0x80 && chan == 0x0) {
// NOTE OFF
- note[n].state = RELEASE;
- gate = 1;
+ pgate = 1.;
+ if (note[n].state != SILENT) {
+ note[n].state = RELEASE;
+ }
}
}
@@ -1563,21 +1565,28 @@ void ZamPianoPlugin::d_run(const float** inputs, float** outputs, uint32_t frame
pgain = note[k].vel;
pgate = 0.;
ZamPianoPlugin::compute(1, inputs, outputs);
- pgate = gate;
+ pgate = 1.;
ZamPianoPlugin::compute(frames, inputs, outputs);
- note[k].state = SUSTAIN;
- } else if (note[k].state == SUSTAIN) {
+ note[k].state++;
+ } else if (note[k].state < RELEASE) {
+ printf("SUSTAIN: %d %d\n", k, note[k].state);
pgate = gate;
ZamPianoPlugin::compute(frames, inputs, outputs);
- } else if (note[k].state == RELEASE) {
- printf("RELEASE: %d\n", k);
+ note[k].state++;
+ } else if (note[k].state < DECAY) {
+ printf("RELEASE: %d %d\n", k, note[k].state);
pfreq = 440. * powf(2., (k-69)/12.);
- pgain = 0.001;
+ pgain = 0.;
pgate = 0.;
ZamPianoPlugin::compute(1, inputs, outputs);
pgate = gate;
ZamPianoPlugin::compute(frames, inputs, outputs);
note[k].state++;
+ } else if (note[k].state < SILENT) {
+ printf("DECAY: %d %d\n", k, note[k].state);
+ pgate = gate;
+ ZamPianoPlugin::compute(frames, inputs, outputs);
+ note[k].state++;
}
}
for (i = 0; i < frames; i++) {