Go Back   Cockos Incorporated Forums > REAPER Forums > ReaScript, JSFX, REAPER Plug-in Extensions, Developer Forum

Reply
 
Thread Tools Display Modes
Old 08-15-2016, 02:31 PM   #1
tenfour
Human being with feelings
 
tenfour's Avatar
 
Join Date: Aug 2016
Posts: 23
Default "tenfour-step", a new way to step-record MIDI

I have written a set of custom actions that improve my MIDI-editing workflow. I am relatively new to Reaper for MIDI work, and I've recently posted a handful of messages recently asking for help adapting my workflow to Reaper, and my solution was to write a few scripts to smooth out the process. Maybe someone else would be interested in these scripts, maybe Reaper developers would be interested to see a different workflow.

The scripts are here, including up-to-date / official documentation: https://github.com/thenfour/ReaperSc...r/tenfour-step
And a video to demonstrate it: https://www.youtube.com/watch?v=07gs0X6StM4

Copy "tenfour-step" to the Scripts directory, so you end up with something like: /Users/tenfour/Library/Application Support/REAPER/Scripts/tenfour-step

--------------------------------------------------------
The core of this library is a bunch of scripts for entering notes (or chords):

* tenfour-insertHeldNotesAtEditCursor_Thirtysecond.lua
* tenfour-insertHeldNotesAtEditCursor_Sixteenth.lua
* tenfour-insertHeldNotesAtEditCursor_Eighth.lua
* tenfour-insertHeldNotesAtEditCursor_Quarter.lua
* tenfour-insertHeldNotesAtEditCursor_Half.lua
* tenfour-insertHeldNotesAtEditCursor_Whole.lua

Each of these takes the notes you're currently playing on your MIDI keyboard, and inserts them in the MIDI editor at the edit cursor for various durations. Velocity is preserved as you played it. It advances the edit cursor, and adjusts the grid size as well to a sensible value.

If you aren't playing any notes, then the cursor is moved & grid size adjusted without adding any notes. Basically, you're inserting a rest.

Existing MIDI notes are preserved. If you try to overwrite MIDI data, the old data will stay there.

If no MIDI clip exists, one is created. So this is also a very quick way to create a measure-long MIDI clip. If a MIDI clip already exists, it's expanded to make sure it can hold the new note.

This works in the MIDI editor, AND the main arranger view. This is actually pretty big; it means you can step record MIDI directly from arranger view, no inline MIDI editor needed.

If you've ever used Finale, this is very similar to "Quick Edit" mode. I feel like I get a lot of control, and melody-writing feels fluent.

I assign these scripts to numbers 2-3-4-5-6-7 on my keyboard. 5 is a quarter note.

To enter a note goes like this:
1. hold a note/chord on your MIDI keyboard
2. hit "5" on the computer keyboard, and your chord is inserted at the edit cursor. Edit cursor is advanced, and grid size is adjusted to a quarter note.

--------------------------------------------------------
There are a couple more bonus actions to make this workflow more robust:

* tenfour-addDotToHeldNotes.lua

I assign this to ".". When run, note durations are increased by a dot length. You should still be playing the notes for this to work. So to enter a dotted quarter note,

1. Play a chord, hold it..
2. Hit "5" to enter it as a quarter note
3. Hit "." to add the dot length
4. Release the chord

--------------------------------------------------------
And similar actions for modifying the length of notes you entered:

* tenfour-moveCursorLeftByGridSizeAndAlterDurationOfHeldNote s.lua
* tenfour-moveCursorRightByGridSizeAndAlterDurationOfHeldNot es.lua

I assign these to left / right arrow keys, replacing the "move cursor by grid size" default actions. Similar to how Ableton does step recording, these will move the cursor by the grid size, adjusting the note end with it. You must be holding down the notes for this to work.

Ableton users will be familiar with this operation. Together with the previous scripts, you have a pretty flexible workflow that shouldn't disrupt your existing workflow method.

Example scenario using this action:

1. You hold a chord
2. Hit "4" to enter it as an eighth note.
3. You realize actually you wanted that to be a quarter note
4. Hit right-arrow, and the duration increases by another eighth note.

--------------------------------------------------------
* tenfour-replaceChordAtEditCursorWithPlayingChord.lua
* tenfour-replaceChordAtEditCursorWithPlayingChordPreserving OriginalOctave.lua

Both of these scripts will replace the chord at the edit cursor with the chord you're playing on your MIDI keyboard.

I assign these to "Alt+Enter" and "Enter" in both midi & main views.

How to use it:
1. position the edit cursor at the start of a note/chord
2. hold a new note/chord on your MIDI keyboard
3. run this script.

The old notes will be replaced by the ones you're playing.

In the 2nd script, the notes will be transposed to match that of the original voicing.


--------------------------------------------------------
* tenfour-rotateVoicingDownAtEditCursor.lua

Takes the top note of the chord at the edit cursor, and transposes it down an octave. Basically it's cycling through chord inversions. If the above scripts ever gets the octave wrong, this is a way to quickly correct it.

Could easily be changed to work on the *selected* chord, not the chord at the edit cursor. But so far all of these scripts are tied to the edit cursor so that's what I stuck with.

* tenfour-rotateVoicingUpAtEditCursor.lua

Same as the above script, but rotates up.

--------------------------------------------------------
* tenfour-unarmAllTracksExceptSelectedTrack.lua

Disables record arm for all tracks except the selected one. Doesn't change the rec arm status of the currently-selected track. I have some tracks set to automatically arm when selected, and some not. In the spirit of one-click MIDI step-recording, I wanted a way to ensure that the selected track is the only one armed.


---------
*EDIT: HUGE thanks to snooks & eugen2777 and the creative method for capturing MIDI input.
*EDIT: 2016-08-20 Added more scripts

Last edited by tenfour; 08-20-2016 at 09:36 AM.
tenfour is offline   Reply With Quote
Old 08-15-2016, 03:14 PM   #2
woggle
Human being with feelings
 
Join Date: Nov 2015
Posts: 374
Default

thanks , this looks very handy - and really nice clear video
woggle is offline   Reply With Quote
Old 08-15-2016, 03:25 PM   #3
MikComposer
Human being with feelings
 
MikComposer's Avatar
 
Join Date: May 2012
Location: Brighton
Posts: 1,989
Default

Sugestion: how about assigning length to midi controller, like a knob, where every 15% changes the length?
__________________
My Royalty Free Music library
MikComposer is offline   Reply With Quote
Old 08-15-2016, 03:52 PM   #4
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Cool, that was quick! Btw I wasn't the first to use a JSFX to get MIDI, that was eugen2777 with his Retrospective Record script. It's not the same JSFX, but the same kind of thing.

(oh, from the comment in GitHub, the reason for the OR, idx|0x1000000 is that this is the flag set to tell Reaper the idx is an Input Effect)
snooks is offline   Reply With Quote
Old 08-17-2016, 08:39 AM   #5
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,669
Default

this is awesome. please make sure this makes it into ReaPack.

your script moves us a bit closer to full-on hardware control of REAPER's midi sequencer without having to reach for the mouse all the time.

one FR that we might be able to fulfill ourselves by editing your code: prevent edit cursor to moving to the noteoff. this was an option in the old MPC series that i found useful for adding notes quickly and on predictable quantize positions, like say a clap alternating on every other snare.
__________________
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 offline   Reply With Quote
Old 08-17-2016, 09:32 AM   #6
vanhaze
Human being with feelings
 
vanhaze's Avatar
 
Join Date: Jul 2012
Location: Netherlands
Posts: 5,247
Default

Quote:
Originally Posted by tenfour View Post
I have written a set of custom actions that improve my MIDI-editing workflow significantly. I am relatively new to Reaper for MIDI work, and I've recently posted a handful of messages recently asking for help adapting my workflow to Reaper, and my solution was to write a few scripts to smooth out the process. Maybe someone else would be interested in these scripts, maybe Reaper developers would be interested to see a different workflow. Maybe it's worthless and I'll soon realize this workflow sucks

The scripts are here: https://github.com/thenfour/ReaperScripts
And a video to demonstrate it: https://www.youtube.com/watch?v=07gs0X6StM4

Copy "tenfour-step" to the Scripts directory, so you end up with something like:

/Users/tenfour/Library/Application Support/REAPER/Scripts/tenfour-step

My goal here was to create a new MIDI step recording workflow that's more free-style than existing methods. I don't like recording MIDI takes live, and I don't like Reaper's step record. I need to be able to noodle around on the keyboard and enter notes / chords in at will.

This method of entry I created is very simple. You get a number of actions for entering notes:

* tenfour-insertHeldNotesAtEditCursor_Thirtysecond.lua
* tenfour-insertHeldNotesAtEditCursor_Sixteenth.lua
* tenfour-insertHeldNotesAtEditCursor_Eighth.lua
* tenfour-insertHeldNotesAtEditCursor_Quarter.lua
* tenfour-insertHeldNotesAtEditCursor_Half.lua
* tenfour-insertHeldNotesAtEditCursor_Whole.lua

Each of these takes the notes you're currently playing on your MIDI keyboard, and inserts them in the MIDI editor at the edit cursor for various durations. Velocity is preserved as you played it. It advances the edit cursor, and adjusts the grid size as well to a sensible value.

If you aren't playing any notes, then the cursor is moved & grid size adjusted without adding any notes.

If no MIDI clip exists, one is created. If one exists, it's expanded to make sure it can hold the new note.

This works in the MIDI editor, AND the main arranger view. This is actually pretty big; it means you can step record MIDI directly from arranger view, no inline MIDI editor needed.

If you've ever used Finale, this is very similar to "Quick Edit" mode. I feel like I get a lot of control, and melody-writing feels fluent.

I assign those to numbers 2-3-4-5-6-7. 5 is a quarter note.

There are a couple more bonus actions to make this workflow more robust:

* tenfour-addDotToHeldNotes.lua

I assign this to ".". When run, note durations are increased by a dot length. You should still be playing the notes for this to work. So to enter a dotted quarter note,

1. Play a chord, hold it..
2. Hit "5" to enter it as a quarter note
3. Hit "." to add the dot length
4. Release the chord

And similar actions for modifying the length of notes you entered:

* tenfour-moveCursorLeftByGridSizeAndAlterDurationOfHeldNote s.lua
* tenfour-moveCursorRightByGridSizeAndAlterDurationOfHeldNot es.lua

I assign these to left / right arrow keys, replacing the "move cursor by grid size" default actions. Similar to how Ableton does step recording, these will move the cursor by the grid size, adjusting the note end with it. You must be holding down the notes for this to work.

Example scenario:

1. You hold a chord
2. Hit "4" to enter it as an eighth note.
3. You realize actually you wanted that to be a quarter note
4. Hit right-arrow, and the duration increases by another eighth note.

Most of these actions set a new grid size. This grid size is selected based on the note you entered, and position in the measure. Examples:

- You enter a half note at beat 1 (downbeat). Grid size gets set to half note.
- You enter a half note at beat 2. Grid size gets set to quarter note.

The "add dot" action has similar decision making, so I still try to do sensible things for things like successive dots, or adding a dot to oddball durations.

---------
*EDIT: HUGE thanks to snooks and his creative method for capturing MIDI input.
Err, wow , this is pretty amazing, thanks a mil !

Integration in ReaPack would be great indeed !!
vanhaze is offline   Reply With Quote
Old 08-17-2016, 03:05 PM   #7
mehmethan
Human being with feelings
 
mehmethan's Avatar
 
Join Date: Jun 2011
Posts: 603
Default

Hi tenfour,
Thanks for these wonderful scripts and workflow. I have a problem. When run the actions reaper is also scrubbing the project.



Edit: I changed my scrubbing preferences. Now it is working correctly.

Last edited by mehmethan; 08-17-2016 at 03:10 PM.
mehmethan is offline   Reply With Quote
Old 08-18-2016, 06:04 AM   #8
xbitz_
Human being with feelings
 
Join Date: Jul 2016
Posts: 92
Default

amazing BIG THX (from an Ableton Live refugee...)
xbitz_ is offline   Reply With Quote
Old 08-20-2016, 09:24 AM   #9
tenfour
Human being with feelings
 
tenfour's Avatar
 
Join Date: Aug 2016
Posts: 23
Default

Updates!

First let me say thanks for the positive messages. As a self-proclaimed Reaper newbie, I was completely expecting the response to be "um, don't do it like that. We Reaper people do it like THIS..."

I have updated the code, adding a couple scripts which I found were needed:

- tenfour-replaceChordAtEditCursorWithPlayingChord.lua
Use this to replace a chord in the take with the chord you're currently playing.
How to use:
1. position the edit cursor at the beginning of a chord
2. play a chord on your MIDI keyboard
3. run this script.
I have bound it to "Alt+Enter".

- tenfour-replaceChordAtEditCursorWithPlayingChordPreserving OriginalOctave.lua
Same as the above, but it transposes the new chord to match the octave of the one you're replacing. This way you don't need to bother trying to match it first. 99% of the time, this is what I want, so I have bound it to "Enter".

- tenfour-rotateVoicingDownAtEditCursor.lua
Takes the top note of the chord at the edit cursor, and transposes it down an octave. Basically it's cycling through chord inversions. If the above scripts ever gets the octave wrong, this is a way to quickly correct it.

Could easily be changed to work on the *selected* chord, not the chord at the edit cursor. But so far all of these scripts are tied to the edit cursor so that's what I stuck with.

- tenfour-rotateVoicingUpAtEditCursor.lua
Same thing, but going up.

- tenfour-unarmAllTracksExceptSelectedTrack.lua
Disables record arm for all tracks except the selected one. Doesn't change the rec arm status of the currently-selected track. I have some tracks set to automatically arm when selected, and some not. In the spirit of one-click MIDI step-recording, I wanted a way to ensure that the selected track is the only one armed.


Quote:
Originally Posted by mccrabney View Post
one FR that we might be able to fulfill ourselves by editing your code: prevent edit cursor to moving to the noteoff. this was an option in the old MPC series that i found useful for adding notes quickly and on predictable quantize positions, like say a clap alternating on every other snare.
Not sure I understand. Don't you want the cursor to advance as you enter the part?

Quote:
Originally Posted by MikComposer View Post
Sugestion: how about assigning length to midi controller, like a knob, where every 15% changes the length?
I am not really sure how to set that up, but I am sure it's possible somehow with minimal editing. You'd need good visual feedback to know which notelength you've selected. The MIDI assignment and interpreting it in script is beyond me at the moment now. My instinct is that buttons would be better than a knob though, just in terms of being able to quickly & accurately choose a note length.

Good weekend everyone!
tenfour is offline   Reply With Quote
Old 08-20-2016, 09:47 AM   #10
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,669
Default

in this requested variation of the script, no, i would prefer if the edit visit did not advance to the note end and instead remained at the position of entry. i move around my midi items using endless encoders so it would be nice to be able to quickly enter a note of a specified length and then zip to the next position manually.
__________________
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 offline   Reply With Quote
Old 08-20-2016, 09:49 AM   #11
tenfour
Human being with feelings
 
tenfour's Avatar
 
Join Date: Aug 2016
Posts: 23
Default

Quote:
Originally Posted by mccrabney View Post
in this requested variation of the script, no, i would prefer if the edit visit did not advance to the note end and instead remained at the position of entry. i move around my midi items using endless encoders so it would be nice to be able to quickly enter a note of a specified length and then zip to the next position manually.
Aha, and I think it makes sense NOT to set the grid size as well then, correct? I can easily create a variation of these scripts for this.
tenfour is offline   Reply With Quote
Old 08-20-2016, 10:12 AM   #12
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,669
Default

yeah that'd be awesome!

the holy grail might be too inconvenient, but what if the note duration was entered as held? so instead of a predetermined length, the script listened to how long you held the notes and then set their duration by calculating the time-held by the project tempo, perhaps with note off quantized to the current grid?

this might be useful for both the original script and my suggested "static" version but i get it if this is too far from the original idea.

great work!
__________________
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 offline   Reply With Quote
Old 08-22-2016, 06:02 AM   #13
tenfour
Human being with feelings
 
tenfour's Avatar
 
Join Date: Aug 2016
Posts: 23
Default

I published yet more updates, this time removing the whole "extend note by dotted duration", which was never going to be reliable outside of an actual notation view. Instead I added "extend by quarter note", "extend by eighth note", etc. This is much simpler & intuitive anyway.

Quote:
Originally Posted by mccrabney View Post
yeah that'd be awesome!
...what if the note duration was entered as held? so instead of a predetermined length, the script listened to how long you held the notes and then set their duration by calculating the time-held by the project tempo, perhaps with note off quantized to the current grid?

this might be useful for both the original script and my suggested "static" version but i get it if this is too far from the original idea...
Yea it's definitely possible, but I think it's indeed a bit too far off my original conception. Shouldn't be too hard to use the core code though to quickly whip this up.

As for the "static" version, this is super easy but I am just trying to figure out a manageable way to deal with all the permutations of scripts.

There are a number of other permutations that I think would be useful, for example instead of modifying the currently-playing notes, modify the selected notes (more traditional strategy). Very easy to implement, but if I have like 4 different dimensions on 6 note-lengths, this is a lot of scripts with very long names. For the moment i'll make sure the basic code supports it, making way for people to easily create variations to suit their own needs.
tenfour is offline   Reply With Quote
Old 08-22-2016, 07:48 AM   #14
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,669
Default

seeing a note duration by cc with definable high and low boundaries would be cool too.

your idea has certainly captured my imagination. can't wait to see what else you come up with.
__________________
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 offline   Reply With Quote
Old 08-22-2016, 07:20 PM   #15
hopi
Human being with feelings
 
hopi's Avatar
 
Join Date: Oct 2008
Location: Right Hear
Posts: 15,618
Default

ten four VERY nice thanks so much!

but ooops having nothing but trouble with github... can't seem to dl the folder

Is there some reason you don't care to upload this folder to the reaper stash? that would make it much easier and not dependent on having a supported browser
__________________
...should be fixed for the next build... http://tinyurl.com/cr7o7yl
https://soundcloud.com/hopikiva

Last edited by hopi; 08-22-2016 at 07:31 PM.
hopi is online now   Reply With Quote
Old 09-18-2016, 01:06 AM   #16
pinksoir
Human being with feelings
 
pinksoir's Avatar
 
Join Date: Aug 2012
Posts: 214
Default

Really excellent and useful script, this. I'll be using it a lot.
__________________
Bear Worship on Bandcamp
pinksoir is offline   Reply With Quote
Old 10-02-2017, 09:25 PM   #17
Dex
Human being with feelings
 
Join Date: Sep 2017
Posts: 518
Default

I know this is kind of an old thread, but I've been trying to use this and I've had a few problems:

-Is there a way to input triplets or swing notes?
-Reaper's undo function doesn't work on your script actions. Is there a way to enable this?
Dex is offline   Reply With Quote
Old 02-28-2019, 03:00 PM   #18
themixtape
Human being with feelings
 
themixtape's Avatar
 
Join Date: Aug 2009
Posts: 1,199
Default

Just found this today. Looks dope! Any updates with it?
__________________
FREE copyright-safe/DMCA-safe music for Twitch/Kick streamers, classrooms, waiting rooms (playlists on all streaming platforms):
https://tinyurl.com/copyrightsafemusic
themixtape is offline   Reply With Quote
Old 05-01-2019, 02:30 PM   #19
Yorkz
Human being with feelings
 
Yorkz's Avatar
 
Join Date: Jan 2007
Location: Canada
Posts: 120
Default

Does this script still work or am I doing something wrong?
- D/l'd tenfour-step folder from github
- installed into Reaper scripts directory
- loaded 'Script: tenfour-replaceChordAtEditCursorWithPlayingChord.lua'
- assigned shortcut (Shift 5 in my case)
- added synth
- played chord and then hit 'Shift 5'
- nothing happens

This really fits my composing style..would love to get it working.

Thanks!
Yorkz is offline   Reply With Quote
Old 05-01-2019, 02:38 PM   #20
Fergler
Human being with feelings
 
Fergler's Avatar
 
Join Date: Jan 2014
Posts: 5,205
Default

Would you have any interest, since you mentioned Finale, of replicating HyperScribe?

That was the only comfortable way I've ever entered MIDI, besides maybe my method in Dorico which is rhythms first in real time record, then adjust the pitches after by playing the melody at any tempo I want. Hyperscribe takes out the second step.
Fergler is offline   Reply With Quote
Old 05-01-2019, 03:08 PM   #21
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

Quote:
Originally Posted by Yorkz View Post
Does this script still work or am I doing something wrong?
- D/l'd tenfour-step folder from github
- installed into Reaper scripts directory
- loaded 'Script: tenfour-replaceChordAtEditCursorWithPlayingChord.lua'
- assigned shortcut (Shift 5 in my case)
- added synth
- played chord and then hit 'Shift 5'
- nothing happens

This really fits my composing style..would love to get it working.
Did you try playing the chord, then hitting your shortcut?
TonE is offline   Reply With Quote
Old 05-01-2019, 05:55 PM   #22
Yorkz
Human being with feelings
 
Yorkz's Avatar
 
Join Date: Jan 2007
Location: Canada
Posts: 120
Default

Quote:
Originally Posted by TonE View Post
Did you try playing the chord, then hitting your shortcut?
Yup - held down chord and hit shortcut. I even added the action as a menu item to test but still no go. Does it work for you?
Yorkz is offline   Reply With Quote
Old 05-01-2019, 06:10 PM   #23
Yorkz
Human being with feelings
 
Yorkz's Avatar
 
Join Date: Jan 2007
Location: Canada
Posts: 120
Default

NVM. I wasn't using it right. Needed to have a chord already in place so that it can be replaced - as per the script description.

Cheers.
Yorkz is offline   Reply With Quote
Old 05-02-2019, 04:21 AM   #24
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

Cool it worked.
TonE is offline   Reply With Quote
Old 05-06-2020, 12:47 AM   #25
daniellumertz
Human being with feelings
 
daniellumertz's Avatar
 
Join Date: Dec 2017
Location: Brazil
Posts: 1,992
Default

The actions

tenfourmoveCursorLeftByGridSizeAndAlterDurationOfH eldNotes.lua
tenfour-moveCursorRightByGridSizeAndAlterDurationOfHeldNot es.lua

seems a little buggy, or have I used it wrong?
The same occur while holding the notes, it modfy all notes in the clip

srry !!! Managed to work it here I was inputing using step input and not one of your scripts thxxxx very muchhhh

Last edited by daniellumertz; 05-06-2020 at 09:36 AM.
daniellumertz is online now   Reply With Quote
Old 05-07-2020, 12:25 PM   #26
Buy One
Human being with feelings
 
Buy One's Avatar
 
Join Date: Sep 2019
Posts: 1,134
Default

tenfour-rotateVoicingUpAtEditCursor.lua

Unfortunately only shifts the upper note up one octave thus not creating an inversion.

The downward rotation script works properly.

However there're native actions

Edit: Invert voicing upwards for each selected chord
Edit: Invert voicing upwards for selected notes

Last edited by Buy One; 05-11-2020 at 12:11 AM.
Buy One is offline   Reply With Quote
Old 05-10-2020, 01:13 PM   #27
pingosimon
Human being with feelings
 
Join Date: Nov 2018
Posts: 61
Default

This is such a game-changer! I'm used to Finale's speedy entry, and I was working for months in Reaper with my own step-input workaround. This is so much better. Thanks!
pingosimon is offline   Reply With Quote
Old 05-10-2020, 01:20 PM   #28
tenfour
Human being with feelings
 
tenfour's Avatar
 
Join Date: Aug 2016
Posts: 23
Default

Hi everyone, I'm glad people are finding use for this script! I haven't actually used it very much in a long time, and consequently I haven't made any updates.

But it's available on github: https://github.com/thenfour/ReaperScripts

Feel free to fork / pull request if you fix the bugs I never got around to doing =)
tenfour is offline   Reply With Quote
Old 05-12-2020, 07:03 PM   #29
pingosimon
Human being with feelings
 
Join Date: Nov 2018
Posts: 61
Default

The only thing I'm wondering: can it be made to work with "undo" any better? Currently it takes a few steps to "undo" something - which seems to undo much more than expected. And then I can't redo reliably.
pingosimon is offline   Reply With Quote
Old 05-14-2020, 12:57 PM   #30
daniellumertz
Human being with feelings
 
daniellumertz's Avatar
 
Join Date: Dec 2017
Location: Brazil
Posts: 1,992
Default

hi tenfour, thx for your scripts I am using they here and find very useful. As pingosimon said the undo is strange, I have notice this same behavior in other scripts like reaticulate, don't know what it is... Also one thing that I would find very good is some kind of morph in inserting note at grid size and extend duration.

The benefits would be able to insert notes while dragging others like this



Also the user would only have to think in pressing the arrows and playing the notes, instead playing / inserting / extending.

I understand if you don't have time/interest to do hahahah I'm planning soon to start learning the basic to be able to make some scrips, and stop needing to be asking others on the forum any way thx for the scripts very useful!
daniellumertz is online now   Reply With Quote
Old 06-04-2020, 05:51 PM   #31
obogz
Human being with feelings
 
obogz's Avatar
 
Join Date: Jan 2020
Posts: 15
Default

Quote:
Originally Posted by pingosimon View Post
The only thing I'm wondering: can it be made to work with "undo" any better? Currently it takes a few steps to "undo" something - which seems to undo much more than expected. And then I can't redo reliably.
Hey, took a look at your script, nice stuff, I'm currently working on it, trying to make it more Ableton like. I'll share once I get something good out of it.

1) Main goal is to bind the arrow keys to increase decrease the held notes length based on the grid.
2) Second goal is to detect midi re-triggers (I'm thinking of just comparing the velocity since I can't listen to events)
3) Third goal is to be able to map the increase decrease to a midi CC encoder and/or mouse wheel (relative mode)
4) Forth goal would be to be able to easily manipulate the grid using midi cc, but this can already be found in either reasons default actions or in ReaScript
5) Fifth goal would be undo management (need to see how this is done in Ableton)
6) Sixth would be note selection, maybe always select last imputed notes so you can adjust length by mouse quickly)
7) Inversions maybe

UPDATE:
1,2,3 are done, I manage to make an Ableton style midi step. WhooHooo!
4 has already a script
I still have to do some optimisations and cleanup because I used a lot of repeating code (fist lua and reaper script) but soon I'll share what I've done

Problems:
- optimisation, I used code from ten-four to build this so there are duplicated things there
- undo is not working properly
- the back function needs work, I need to figure out how what to do with the notes in the grid once they reached a very small lenght.
I'm thinking of just deleting them or increase them backwards. Deleting them would be less buggy.

Alpha, for preview only: https://github.com/obogz/ReaperTonMidiRoll/tree/master

Last edited by obogz; 06-07-2020 at 07:06 AM.
obogz is offline   Reply With Quote
Old 06-07-2020, 01:03 PM   #32
obogz
Human being with feelings
 
obogz's Avatar
 
Join Date: Jan 2020
Posts: 15
Default

Update the script is working now left and right, will add a cc/mouse-wheel script soon after I fix the issues below
Known issues:
- notes will overlap (fix will probably clear all held notes ahead)
- notes with the same velocity and pitch will be extended

TODO:
- add backspace action (shortens or deletes notes behind the cursor)
- test it some more, compare with Ableton

DEMO: https://youtu.be/ZZQKqqFqgfo
New git repo: https://github.com/obogz/ReaperScripts
__________________
ReaPerton Midi Step
https://github.com/obogz/ReaperScripts

Last edited by obogz; 06-08-2020 at 11:33 AM.
obogz is offline   Reply With Quote
Old 11-18-2020, 03:33 PM   #33
marine289
Human being with feelings
 
Join Date: Feb 2018
Posts: 19
Default

I really like these scripts, have used them now for a few weeks, and they've made my composing a lot quicker. Thank you very much tenfour and obogz!
I have a few issues though:
1) Sometimes it doesn't register the 1st midi keystroke, and you have to go back. I often just want to insert a chord or note and when it doesn't work the 1st time, it makes the script a lot less convenient.
It's happened with both "tenfour-insertHeldNotesAtEditCursor_Whole" in the arrangement view, and "ReaperTonStepInsertOrModifyHeldNotesByGridRig ht" in the midi editor.
2) Is it possible for the "ReaperTonStepInsertOrModifyHeldNotesByGridRig ht" command to work in the arrangement view?
3) The scripts automatically add a new bar to the item when it gets to the end, but that is often not what I want. Is there any way to change that?
marine289 is offline   Reply With Quote
Old 11-18-2020, 03:51 PM   #34
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

Quote:
Originally Posted by obogz View Post
- the back function needs work, I need to figure out how what to do with the notes in the grid once they reached a very small lenght.
I'm thinking of just deleting them or increase them backwards. Deleting them would be less buggy.
Yes deleting sounds good. Simple and good.

Also worth checking hackey trackey which has best step sequencing capabilities. In case tenfour or this have additional benefits, one could think of combining both. Anyway, it always good having multiple options.
TonE is offline   Reply With Quote
Old 11-18-2020, 04:22 PM   #35
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

Tried quickly Reaperton, thanks for sharing, here it adds only the highest pitched note, 127, not sure why. Need to test a bit more.
Here JS: ReaperTon-MIDIChordState seems to be in zzz (sleep mode or so), fx window says: The following effect plug-in could not be loaded: JS: ReaperTon-MIDIChordState.
Probably this is why it does not work here, now I need to find out why it can not be loaded on my laptop but in other laptops it seems to work I guess.

Last edited by TonE; 11-18-2020 at 04:42 PM.
TonE is offline   Reply With Quote
Old 11-18-2020, 08:03 PM   #36
daniellumertz
Human being with feelings
 
daniellumertz's Avatar
 
Join Date: Dec 2017
Location: Brazil
Posts: 1,992
Default

Quote:
Originally Posted by marine289 View Post
I really like these scripts, have used them now for a few weeks, and they've made my composing a lot quicker. Thank you very much tenfour and obogz!
I have a few issues though:
1) Sometimes it doesn't register the 1st midi keystroke, and you have to go back. I often just want to insert a chord or note and when it doesn't work the 1st time, it makes the script a lot less convenient.
It's happened with both "tenfour-insertHeldNotesAtEditCursor_Whole" in the arrangement view, and "ReaperTonStepInsertOrModifyHeldNotesByGridRig ht" in the midi editor.
2) Is it possible for the "ReaperTonStepInsertOrModifyHeldNotesByGridRig ht" command to work in the arrangement view?
3) The scripts automatically add a new bar to the item when it gets to the end, but that is often not what I want. Is there any way to change that?
So, the reason the script dont work the first time is because it needs an JSFX in the input of the track to work, the first time u run it it will insert, it theorically would be easy to change the script to first check if there is an JSFX if not insert and do the action not just insert.

It depends on the script tho how easy it will be to change it, It is in my todo list actually try to do this and "steal the JSFX" for other scripts, this MIDI from JSFX to scripts is genial! also would try to add CC
daniellumertz is online now   Reply With Quote
Old 11-19-2020, 06:57 AM   #37
marine289
Human being with feelings
 
Join Date: Feb 2018
Posts: 19
Default

Quote:
Originally Posted by daniellumertz View Post
So, the reason the script dont work the first time is because it needs an JSFX in the input of the track to work, the first time u run it it will insert, it theorically would be easy to change the script to first check if there is an JSFX if not insert and do the action not just insert.

It depends on the script tho how easy it will be to change it, It is in my todo list actually try to do this and "steal the JSFX" for other scripts, this MIDI from JSFX to scripts is genial! also would try to add CC
Are we talking about the same script? (I'm talking about "tenfour-insertHeldNotesAtEditCursor_Whole")
It doesn't insert any JSFX to the track, and when I release the midi notes, play them again and use the shortcut for the script, it works as it should.
marine289 is offline   Reply With Quote
Old 11-19-2020, 07:51 AM   #38
daniellumertz
Human being with feelings
 
daniellumertz's Avatar
 
Join Date: Dec 2017
Location: Brazil
Posts: 1,992
Default

I was talking about obogz version, but I almost sure tenfour works in the same way ( this part of the script ) I do think it adds the JSFX in the INPUT FX ( not the FX per se )
daniellumertz is online now   Reply With Quote
Old 11-22-2020, 09:00 AM   #39
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,031
Default

Yes, adding to input fx is built in into the script, however on my computer it seems not working, as mentioned above, adding as zzz (disabled mode).
TonE is offline   Reply With Quote
Old 10-11-2021, 11:01 AM   #40
Buy One
Human being with feelings
 
Buy One's Avatar
 
Join Date: Sep 2019
Posts: 1,134
Default

the ReaperTon-MIDIChordState JSFX seems to have never been a part of ReaperTonMidiRoll package

from the repo's readme


Quote:
TODO:
  • see if there is another way to detect retriggerd notes besides comparing velocity -> extension
  • cleanup, optimise, refactor

Long term:
  • create an jsfx extension that improves on this

UPD: didn't realize that jsfx was supposed to be created at runtime from core_midi_roll.lua
.
.
__________________
https://github.com/Buy-One/REAPER-scripts (175)
REAPER is a DAW whose user guide file is larger than its installation file

Last edited by Buy One; 10-17-2021 at 11:03 PM.
Buy One 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 11:22 AM.


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