|
|
|
08-27-2016, 05:53 PM
|
#1
|
Human being with feelings
Join Date: Feb 2016
Posts: 232
|
Help needed: Minor change to my modded midi note repeater
Hello JS Wizards...
I made some mods to a midi note repeater JS I found, but there's one mod I need and I can't figure it out...
Here's the code:
Code:
desc:MIDI Note Repeater
//tags: MIDI processing
//slider1:1<8,0,0.03125>Beats
//slider1:1<8,0,.0625>Beats
in_pin:none
out_pin:none
slider1:1<16,0,.001>Beats
slider2:60<0,127,1{0: C-1,1: C#/Db-1,2: D-1,3: D#/Eb-1,4: E-1,5: F-1,6: F#/Gb-1,7: G-1,8: G#/Ab-1,9: A-1,10: A#/Bb-1,11: B-1,12: C0,13: C#/Db0,14: D0,15: D#/Eb0,16: E0,17: F0,18: F#/Gb0,19: G0,20: G#/Ab0,21: A0,22: A#/Bb0,23: B0,24: C1,25: C#/Db1,26: D1,27: D#/Eb1,28: E1,29: F1,30: F#/Gb1,31: G1,32: G#/Ab1,33: A1,34: A#/Bb1,35: B1,36: C2,37: C#/Db2,38: D2,39: D#/Eb2,40: E2,41: F2,42: F#/Gb2,43: G2,44: G#/Ab2,45: A2,46: A#/Bb2,47: B2,48: C3,49: C#/Db3,50: D3,51: D#/Eb3,52: E3,53: F3,54: F#/Gb3,55: G3,56: G#/Ab3,57: A3,58: A#/Bb3,59: B3,60: C4,61: C#/Db4,62: D4,63: D#/Eb4,64: E4,65: F4,66: F#/Gb4,67: G4,68: G#/Ab4,69: A4,70: A#/Bb4,71: B4,72: C5,73: C#/Db5,74: D5,75: D#/Eb5,76: E5,77: F5,78: F#/Gb5,79: G5,80: G#/Ab5,81: A5,82: A#/Bb5,83: B5,84: C6,85: C#/Db6,86: D6,87: D#/Eb6,88: E6,89: F6,90: F#/Gb6,91: G6,92: G#/Ab6,93: A6,94: A#/Bb6,95: B6,96: C7,97: C#/Db7,98: D7,99: D#/Eb7,100: E7,101: F7,102: F#/Gb7,103: G7,104: G#/Ab7,105: A7,106: A#/Bb7,107: B7,108: C8,109: C#/Db8,110: D8,111: D#/Eb8,112: E8,113: F8,114: F#/Gb8,115: G8,116: G#/Ab8,117: A8,118: A#/Bb8,119: B8,120: C9,121: C#/Db9,122: D9,123: D#/Eb9,124: E9,125: F9,126: F#/Gb9,127: G9}>note
slider3:.0625<1,0,.001>Beat Quant
slider4:1<16,0,.001>Qtz'd Beat
slider5:1<1,16,1>Out Channel
@init
status=0;
status2=128;
memset(status,-1,128);
memset(status2,0,128);
@slider
div=slider1;
note_slider = slider2 & 127;
beat_quant = slider3;
out_channel = (slider5 - 1) & 15;
quant=div/beat_quant;
quant_test=div/beat_quant==floor(div/beat_quant);
div/beat_quant != floor(div/beat_quant) ? (
div=ceil(quant)*beat_quant;
);
slider4=div;
@block
while(midirecv(ts,msg1,msg23)) (
m=msg1&240;
note=msg23&127;
while(note_slider==note) ? (
(m == 9*16 && msg23>=256) ? (
status[note]=0;
vel=(msg23/256);
vel<1?vel=1:vel>=127?vel=127:vel|=0;
status2[note]=vel;
midisend(ts,9*16|out_channel,note+vel*256); // send note on
) : (m == 8*16 || m == 9*16) ? (
status[note]=-1;
status2[note]>0 ? (
midisend(ts,8*16|out_channel,note); // send note off
status2[note]=0;
);
)) : (
midisend(ts,msg1,msg23);
);
1;
);
inc = (samplesblock/srate*(tempo/60)*2/div);
x=0;
loop(128,
status[x]>=0.0 ?
(
status[x] += inc;
status[x] >= 1.0 ?
(
status[x] -= 1.0;
status2[x]>0.0 ? (
midisend(0,8*16|out_channel,x);
)
:
(
midisend(0,9*16|out_channel,x - status2[x]*256);
);
status2[x]*=-1;
);
);
x+=1;
);
@sample
It works well, but I can't figure out why it seems to send the MIDI note off message 1/2 way through the repeat period...
What I mean is, If I set the repeat to be 4 beats, it will indeed send a midi note on every 4 beats (i.e. once per measure in 4/4 time). The issue is that it sends the MIDI note off message 1/2 way though, i.e. on "3".
I REALLY need this script to send a MIDI note off at the same time (well, actually just before obviously) that it plays the new repeated note.
Visually, here's how it works now:
Beats=4
Beat 1.1-Note On
Beat 2.1-Nothing
Beat 3.1-Note Off
Beat 4.1-Nothing
Beat 1.2-Note On
Beat 2.2-Nothing
Beat 3.2-Note Off
Beat 4.2-Nothing
Here's how I need/want it to work:
Beats=4
Beat 1.1-Note On
Beat 2.1-Nothing
Beat 3.1-Nothing
Beat 4.1-Nothing
Beat 1.2-Note Off + Note On
Beat 2.2-Nothing
Beat 3.2-Nothing
Beat 4.2-Nothing
I've tried fiddling with all the places it's sending note info, etc. but I can't get it to do it. I can't even figure out WHY it sends the note off 1/2 way through the repeat period...
Anybody got an idea?
|
|
|
08-27-2016, 06:19 PM
|
#2
|
Human being with feelings
Join Date: Jan 2014
Posts: 5,205
|
In my experience working with actual MIDI repeated notes in a row, sometimes if the note off and note on are in the exact same spot the note-off takes precedence.
Perhaps you need to add a slight bias, so the note-off comes *just* before the next note-on. I don't understand scripting or your script in particular enough to tell you how or even if that's an option.
|
|
|
08-27-2016, 07:41 PM
|
#3
|
Human being with feelings
Join Date: Feb 2016
Posts: 232
|
Quote:
Originally Posted by Fergler
In my experience working with actual MIDI repeated notes in a row, sometimes if the note off and note on are in the exact same spot the note-off takes precedence.
Perhaps you need to add a slight bias, so the note-off comes *just* before the next note-on. I don't understand scripting or your script in particular enough to tell you how or even if that's an option.
|
OK, I can see how that may be true, but do you know how to modify the code so I can try it with the immediate noteoff/noteon?
|
|
|
10-08-2018, 05:12 PM
|
#4
|
Human being with feelings
Join Date: May 2017
Posts: 236
|
The loop option in the RSK5 works better, just set your loop markers for your samples.
|
|
|
10-10-2018, 01:10 PM
|
#5
|
Human being with feelings
Join Date: Aug 2015
Posts: 3,669
|
^that is a good technique, but does not respect changing tempos.
|
|
|
11-10-2018, 09:22 AM
|
#6
|
Human being with feelings
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
|
There is a better note repeater, check for:
MIDI Note Beat Repeater
|
|
|
Thread Tools |
|
Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 08:08 AM.
|