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_chordkey
< prev
next >
Wrap
Text File
|
2007-12-03
|
2KB
|
95 lines
desc:MIDI chord-in-key (sort of)
slider1:2<-24,24,1>notes in key advance for note 1
slider2:4<-24,24,1>notes in key advance for note 2
slider3:0<0,11,1{C,C#,D,D#,E,F,F#,G,G#,A,A#,B}>key
slider4:1<0,1>velocity scale for additional notes
slider5:0<0,127,1>note range low (passthru other notes)
slider6:127<0,127,1>note range high (passthru other notes)
@init
// maps a in-key note to a semitone note
tab=0;
tab[0]=0;
tab[1]=2;
tab[2]=4;
tab[3]=5;
tab[4]=7;
tab[5]=9;
tab[6]=11;
// maps a note to its nearest in-Cmaj note
tab2=16;
tab2[0]=0;
tab2[1]=0;
tab2[2]=2;
tab2[3]=2;
tab2[4]=4;
tab2[5]=5;
tab2[6]=5;
tab2[7]=7;
tab2[8]=7;
tab2[9]=9;
tab2[10]=9;
tab2[11]=11;
@slider
slider1|=0;
slider2|=0;
key = slider3|0;
@block
while (
midirecv(ts,msg1,msg23) ?
(
m=msg1&240;
note=msg23&127;
(m == 8*16 || m==9*16) && note >= slider5 && note <= slider6 ?
(
note += 12-key;
noteidx=note%12;
octavebase=note-noteidx;
n2=noteidx+tab[slider1%7];
note2 = octavebase + tab2[n2%12] + ((n2/12)|0)*12;
n2=noteidx+tab[slider2%7];
note3 = octavebase + tab2[n2%12] + ((n2/12)|0)*12;
note-=12-key;
note2-=12-key;
note3-=12-key;
(m == 9*16 && msg23>=256) ?
(
vel=(msg23/256)|0;
vel<0?vel=0:vel>=127?vel=127:vel|=0;
vel2=vel*slider4;
vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0;
vel2 *= 256.0;
vel *= 256.0;
note >= 0 && note < 128 ? midisend(ts,9*16,note+vel); // send note on
note2 >= 0 && note2 < 128 ? midisend(ts,9*16,note2+vel2); // send note on
note3 >= 0 && note3 < 128 ? midisend(ts,9*16,note3+vel2); // send note on
) : (m == 8*16 || m == 9*16) ? (
note >= 0 && note < 128 ? midisend(ts,8*16,note); // send note off
note2 >= 0 && note2 < 128 ? midisend(ts,8*16,note2); // send note off
note3 >= 0 && note3 < 128 ? midisend(ts,8*16,note3); // send note off
);
) :
(
midisend(ts,msg1,msg23);
);
bla=1;
);
);
@sample