Old 08-27-2016, 05:53 PM   #1
DruMunkey
Human being with feelings
 
Join Date: Feb 2016
Posts: 232
Default 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?
DruMunkey is offline   Reply With Quote
Old 08-27-2016, 06:19 PM   #2
Fergler
Human being with feelings
 
Fergler's Avatar
 
Join Date: Jan 2014
Posts: 5,205
Default

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.
Fergler is offline   Reply With Quote
Old 08-27-2016, 07:41 PM   #3
DruMunkey
Human being with feelings
 
Join Date: Feb 2016
Posts: 232
Default

Quote:
Originally Posted by Fergler View Post
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?
DruMunkey is offline   Reply With Quote
Old 10-08-2018, 05:12 PM   #4
Beastmode Beats
Human being with feelings
 
Join Date: May 2017
Posts: 236
Default

The loop option in the RSK5 works better, just set your loop markers for your samples.
Beastmode Beats is offline   Reply With Quote
Old 10-10-2018, 01:10 PM   #5
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,669
Default

^that is a good technique, but does not respect changing tempos.
__________________
mccrabney scripts: MIDI edits from the Arrange screen ala jjos/MPC sequencer
|sis - - - anacru| isn't what we performed: pls no extra noteons in loop recording
| - - - - - anacru|sis <==this is what we actually performed.
mccrabney is online now   Reply With Quote
Old 11-10-2018, 09:22 AM   #6
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

There is a better note repeater, check for:
MIDI Note Beat Repeater
TonE is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 08:08 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.