Mercurial > hg > dmlib
changeset 223:9fa8e9326d18
Implement effect Rxy - multi retrig note.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 08 Oct 2012 00:20:20 +0300 |
parents | 63be671823d3 |
children | 81f3993412ae |
files | jssplr.c jssplr.h |
diffstat | 2 files changed, 42 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/jssplr.c Mon Oct 08 00:19:59 2012 +0300 +++ b/jssplr.c Mon Oct 08 00:20:20 2012 +0300 @@ -1044,7 +1044,10 @@ break; case 'R': // Rxy = Multi Retrig note - JMPDEBUG("Multi Retrig Note used, UNIMPLEMENTED"); + if (paramX != 0) + chn->lastMultiRetrigParamX = paramX; + if (paramY != 0) + chn->lastMultiRetrigParamY = paramY; break; case 'T': // Txy = Tremor @@ -1335,6 +1338,40 @@ } break; + case 'R': // Rxy = Multi Retrig note + if (chn->lastMultiRetrigParamY != 0 && + (mp->tick % chn->lastMultiRetrigParamY) == 0) + { + BOOL change = TRUE; + int volume = chn->volume; + switch (chn->lastMultiRetrigParamX) + { + case 0x1: volume -= 1; break; + case 0x2: volume -= 2; break; + case 0x3: volume -= 4; break; + case 0x4: volume -= 8; break; + case 0x5: volume -= 16; break; + case 0x6: volume = (volume * 2) / 3; break; + case 0x7: volume /= 2; break; + + case 0x9: volume += 1; break; + case 0xA: volume += 2; break; + case 0xB: volume += 4; break; + case 0xC: volume += 8; break; + case 0xD: volume += 16; break; + case 0xE: volume = (volume * 3) / 2; break; + case 0xF: volume *= 2; break; + default: change = FALSE; + } + jmpTriggerNote(mp, chn, FALSE); + if (change) + { + chn->volume = dmClamp(volume, mpMinVol, mpMaxVol); + JMPSETNDFLAGS(cdfNewVolume); + } + } + break; + case 'T': // Txy = Tremor JMPMAKEPARAM(chn->iLastTremorParam, paramX, paramY) paramX++;
--- a/jssplr.h Mon Oct 08 00:19:59 2012 +0300 +++ b/jssplr.h Mon Oct 08 00:20:20 2012 +0300 @@ -90,10 +90,11 @@ iLastTremorParam, iTremorCount, iLastSampleOffset, - iLastRetrigParam, iLastVolSlideParam, - - iRetrigNDFlags, // For retrig-effect + + lastMultiRetrigParamX, + lastMultiRetrigParamY, + iSaveNDFlags; // For notedelay-effect } JSSPlayerChannel;