pmcrockett
Senior Member
I'm not fluent in Reaper's JSFX coding, but I think CCEnv should be written as follows (corrected line in red):
desc:CCEnv
// ReaControlMIDI replacement for continuous controllers
// Author: Panu Aaltio
slider1:0<0,127,1>#1 Mod Wheel
slider2:0<0,127,1>#11 Expression
@init
sentCC[11] = 0;
sentCC[1] = 0;
previousCC[11] = -1;
_global.ccBuffer_11 = -1;
_global.ccBuffer_01 = -1;
COOLDOWN_TIMER = 64;
cooldown = 0;
channel = 0;
@block
_global.ccBuffer_11 > -1 ? (
midisend(0, 11*16 + channel, 11 + _global.ccBuffer_11 * 256);
slider2 = _global.ccBuffer_11;
sentCC[11] = _global.ccBuffer_11;
cooldown = COOLDOWN_TIMER;
slider_automate(slider2);
previousCC[11] = _global.ccBuffer_11;
_global.ccBuffer_11 = -1;
);
_global.ccBuffer_01 > -1 ? (
midisend(0, 11*16 + channel, 1 + _global.ccBuffer_01 * 256);
slider1 = _global.ccBuffer_01;
sentCC[1] = _global.ccBuffer_01;
cooldown = COOLDOWN_TIMER;
slider_automate(slider1);
_global.ccBuffer_01 = -1;
);
cooldown > 0 ? (
cooldown = cooldown - 1;
// If still ignoring envelope data, make sure old envelope doesn't come through
previousCC[11] > -1 && previousCC[11] != slider2 ? (
slider2 = previousCC[11];
slider_automate(slider2);
);
previousCC[1] > -1 && previousCC[1] != slider1 ? (
slider1 = previousCC[1];
slider_automate(slider1);
);
);
sentCC[11] != slider2 ? (
sentCC[11] = slider2;
cooldown == 0 ? (
midisend(0, 11*16 + channel, 11 + sentCC[11] * 256);
);
);
sentCC[1] != slider1 ? (
sentCC[1] = slider1;
cooldown == 0 ? (
midisend(0, 11*16 + channel, 1 + sentCC[1] * 256);
);
);
Previously, that line contained 11 + _global.ccBuffer_01 etc. -- I believe that determines the CC number for output. Looks like a copy/paste error on the author's part.
desc:CCEnv
// ReaControlMIDI replacement for continuous controllers
// Author: Panu Aaltio
slider1:0<0,127,1>#1 Mod Wheel
slider2:0<0,127,1>#11 Expression
@init
sentCC[11] = 0;
sentCC[1] = 0;
previousCC[11] = -1;
_global.ccBuffer_11 = -1;
_global.ccBuffer_01 = -1;
COOLDOWN_TIMER = 64;
cooldown = 0;
channel = 0;
@block
_global.ccBuffer_11 > -1 ? (
midisend(0, 11*16 + channel, 11 + _global.ccBuffer_11 * 256);
slider2 = _global.ccBuffer_11;
sentCC[11] = _global.ccBuffer_11;
cooldown = COOLDOWN_TIMER;
slider_automate(slider2);
previousCC[11] = _global.ccBuffer_11;
_global.ccBuffer_11 = -1;
);
_global.ccBuffer_01 > -1 ? (
midisend(0, 11*16 + channel, 1 + _global.ccBuffer_01 * 256);
slider1 = _global.ccBuffer_01;
sentCC[1] = _global.ccBuffer_01;
cooldown = COOLDOWN_TIMER;
slider_automate(slider1);
_global.ccBuffer_01 = -1;
);
cooldown > 0 ? (
cooldown = cooldown - 1;
// If still ignoring envelope data, make sure old envelope doesn't come through
previousCC[11] > -1 && previousCC[11] != slider2 ? (
slider2 = previousCC[11];
slider_automate(slider2);
);
previousCC[1] > -1 && previousCC[1] != slider1 ? (
slider1 = previousCC[1];
slider_automate(slider1);
);
);
sentCC[11] != slider2 ? (
sentCC[11] = slider2;
cooldown == 0 ? (
midisend(0, 11*16 + channel, 11 + sentCC[11] * 256);
);
);
sentCC[1] != slider1 ? (
sentCC[1] = slider1;
cooldown == 0 ? (
midisend(0, 11*16 + channel, 1 + sentCC[1] * 256);
);
);
Previously, that line contained 11 + _global.ccBuffer_01 etc. -- I believe that determines the CC number for output. Looks like a copy/paste error on the author's part.