diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-02-13 20:13:41 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-02-13 20:13:41 +1100 |
commit | d00365cc523b4d699e4b2b06394a552c45f5c1cc (patch) | |
tree | 7f7445f2e784b43fe88505e941f02023714a0b5d /plugins/ZamSFZ/ZamSFZPlugin.cpp | |
parent | 17e7dbd81a847777a48265778e3f255bd111117d (diff) |
Update ZamSFZ
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'plugins/ZamSFZ/ZamSFZPlugin.cpp')
-rw-r--r-- | plugins/ZamSFZ/ZamSFZPlugin.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/plugins/ZamSFZ/ZamSFZPlugin.cpp b/plugins/ZamSFZ/ZamSFZPlugin.cpp index 54b2cc2..9c436e5 100644 --- a/plugins/ZamSFZ/ZamSFZPlugin.cpp +++ b/plugins/ZamSFZ/ZamSFZPlugin.cpp @@ -279,14 +279,20 @@ void ZamSFZPlugin::d_run(const float**, float** outputs, uint32_t frames, voice[k].vi = 0.f; } else { int n = voice[k].notenum; - int vel = (int) (sfz.maxlayers[voice[k].notenum] - * voice[k].vi); + int v = voice[k].vi * 127.; + int l = 0; + for (int k = 0; k < sfz.layers[n].max; k++) { + if (sfz.layers[n].l[k].lovel <= v && v <= sfz.layers[n].l[k].hivel) { + l = k; + break; + } + } int pos = voice[k].rampstate; - wavel = sfz.sample[n][vel][0][pos]; - waver = sfz.sample[n][vel][1][pos]; + wavel = sfz.sample[n][l][0][pos]; + waver = sfz.sample[n][l][1][pos]; } - outl += wavel*voice[k].curamp/5.; - outr += waver*voice[k].curamp/5.; + outl += wavel*voice[k].curamp/2.; + outr += waver*voice[k].curamp/2.; } if (signal) { //outl; |