home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2008 February
/
PCWorld_2008-02_cd.bin
/
audio-video
/
reaper
/
reaper2028-install.exe
/
Effects
/
MIDI
/
midi_arp
< prev
next >
Wrap
Text File
|
2007-12-03
|
3KB
|
154 lines
desc: MIDI arpeggiator
slider1:1<0.0,16,0.25>rate (x BPM)
slider2:1<0.01,1,0.1>note length (0..1)
slider3:0<0,3,1{DOWN,UP,DOWNALT,UPALT}>mode
slider4:0<0,3,1>number of variants
slider5:0<-64,64,1>variant 1
slider6:0<-64,64,1>variant 2
slider7:0<-64,64,1>variant 3
slider8:127<0,127,1>velocity (0=use played velocity)
@init
notelist=0;
notecnt=0;
lastnote=-1;
pbincpos=0;
pbnotepos=0;
pbvarpos=0;
@slider
rate=slider1;
notelen=slider2;
notelen<0?notelen=0:notelen>1?notelen=1;
notedir= (slider3&1)?1:-1;
diralt=slider3&2;
nvar=slider4;
var1=slider5;
var2=slider6;
var3=slider7;
velmode=slider8|0;
@block
lastnotecnt=notecnt;
while (
midirecv(ts,msg1,msg23) ?
(
m=msg1&240;
note=msg23&127;
(m == 9*16 && msg23>=256) ?
(
notelist[note] < 0.001 ? (
notelist[note]=velmode ? velmode : ((msg23/256.0)|0);
notecnt+=1;
);
) : (m == 8*16 || m == 9*16) ? (
notelist[note] > 0.001 ? (
lastnote==note ? (
midisend(ts,8*16,note); // send note off
lastnote=-1;
);
notecnt-=1;
notelist[note]=0.0;
);
) : (
midisend(ts,msg1,msg23);
);
bla=1;
);
);
notecnt < 1 && lastnote>=0 ?
(
midisend(0,8*16,lastnote); // send note off
lastnote=-1;
);
spos=0;
dinc=1/srate*(tempo/60)*rate;
notecnt > 0 && !lastnotecnt ?
(
pbincpos=1;
pbnotepos=0;
pbvarpos=1000;
);
@sample
pbincpos+=dinc;
notecnt > 0 && pbincpos >= notelen ? (
lastnote>=0 ?
(
midisend(spos,8*16,lastnote); // send note off
lastnote=-1;
);
);
notecnt > 0 && pbincpos >= 1.0 ?
(
pbincpos-=1;
// calc new lastnote
!diralt ?
(
pbvarpos+=1;
pbvarpos > nvar || !notelist[pbnotepos] ?
(
pbvarpos=0;
// next note
cnt=0;
while
(
cnt+=1;
pbnotepos += notedir;
pbnotepos > 127? pbnotepos=0 : pbnotepos<0 ? pbnotepos=127;
notelist[pbnotepos] > 0.001 ?
(
pbnotepos >= 0 && pbnotepos < 128 ? (
lastnote=pbnotepos;
midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on
);
tmp=0;
)
: cnt < 128;
);
)
:
(
lastnote=pbnotepos;
pbvarpos == 1? lastnote+=var1 : pbvarpos==2?lastnote+=var2:pbvarpos==3?lastnote+=var3;
lastnote >= 0 && lastnote < 128 ? (
midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on
) : lastnote=-1;
);
)
:
( // alternate (notes first, then variants)
cnt=0;
while
(
cnt+=1;
pbnotepos += notedir;
turd=0;
pbnotepos > 127? pbnotepos=0 : pbnotepos<0 ? pbnotepos=127 : turd=1;
!turd ? (
pbvarpos+=1;
pbvarpos>nvar ? pbvarpos=0;
);
notelist[pbnotepos] > 0.001 ?
(
lastnote=pbnotepos;
pbvarpos == 1? lastnote+=var1 : pbvarpos==2?lastnote+=var2:pbvarpos==3?lastnote+=var3;
midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on
tmp=0;
)
: cnt < 128;
);
);
);
//spos+=1;