summaryrefslogtreecommitdiff
path: root/plugins
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
parentcddf33ec020dec5b545ae4026eb5ce36f233478f (diff)
Improved triggering ZamPiano
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/ZamPiano/ZamPianoPlugin.cpp25
-rw-r--r--plugins/ZamPiano/ZamPianoPlugin.hpp5
2 files changed, 20 insertions, 10 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++) {
diff --git a/plugins/ZamPiano/ZamPianoPlugin.hpp b/plugins/ZamPiano/ZamPianoPlugin.hpp
index 824eed6..63f7629 100644
--- a/plugins/ZamPiano/ZamPianoPlugin.hpp
+++ b/plugins/ZamPiano/ZamPianoPlugin.hpp
@@ -25,8 +25,9 @@
#define STRIKE 0
#define ATTACK 1
#define SUSTAIN 2
-#define RELEASE 3
-#define SILENT 200
+#define RELEASE 1000
+#define DECAY 1001
+#define SILENT 1011
START_NAMESPACE_DISTRHO