diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-01-22 12:16:30 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-01-22 12:17:48 +1100 |
commit | e25ac20029f8851586d3034ed9d5f1269b9c9a10 (patch) | |
tree | 06801188941fa2b0762c1db309b61a87d11a183c /plugins/ZamPiano/ZamPianoPlugin.cpp | |
parent | cddf33ec020dec5b545ae4026eb5ce36f233478f (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.cpp | 25 |
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++) { |