Old 11-15-2015, 05:04 PM   #1
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default Retrospective Record for Reaper(MIDI and Audio)



=====================
RRAudio and RRMidi.
RRMidi is an analogue of retrospective records in Cubase.
RRAudio supports buffering audio.Such features not available in other Daw!
In addition, in both modes are available, any change in the play position, the buffer is not reset.
All recorded data will be available as individual Takes.

=====Install Info====
Just run the script.
https://stash.reaper.fm/25831/Installation.gif
When you first start you will automatically make the necessary settings.
On the next start MIDI(or Audio) data from the buffer will be added to the track.

==MIDI==
JS-utility(at a special hidden track) writes incoming data to the buffer during playback.
The buffer is refreshed only if you press the stop and start playback again(if received new data).
Script Reads MIDI-data from the JS buffer and adds them to the currently selected track.
RRMIDI supported basic data types:
NoteON-NoteOFF,PKeyPressue,ControlChange,ProgrammChange,C hanPressue,PWheel Change.
==AUDIO==
RRAudio works the same way as RRMIDI
JS-utility(at a special hidden track) writes incoming data to the buffer during playback.
The buffer is refreshed only if you press the stop and start playback again.
Script Inserts Audio-Buffer from JS to the currently selected track.
RRAudio uses Stereo-buffer.
You can specify the number of buffers in the first run of the script.
One buffer is about 380 sec at the samplerate=44100.
Ten buffers--is more than an hour,but you can set more buffers,if it allows memory.
One buffer 256MB RAM.
==Demonstaration==
Loop-playback demo
https://stash.reaper.fm/25827/RRmidi%...Rec%20demo.gif

Playback with any change of play-position
https://stash.reaper.fm/25828/RRmidi%...nge%20demo.gif

Audio demo
https://stash.reaper.fm/25826/RRaudio%20demo.gif


===Retro-Rec(MIDI)-Link(will be updated)===
Retrospective Record(MIDI)
===Retro-Rec(Audio)-Link(will be updated)===
Retrospective Record(audio)
__________________
ReaScripts

Last edited by eugen2777; 05-24-2016 at 03:27 AM.
eugen2777 is offline   Reply With Quote
Old 11-15-2015, 05:13 PM   #2
vanhaze
Human being with feelings
 
vanhaze's Avatar
 
Join Date: Jul 2012
Location: Netherlands
Posts: 5,247
Default

Awesome , thank you very much !
vanhaze is offline   Reply With Quote
Old 11-15-2015, 11:25 PM   #3
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,960
Default

Finally elegant solution of Retrospective Record, good work
mpl is offline   Reply With Quote
Old 11-16-2015, 03:05 AM   #4
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

Indeed, it's way easier than "the other tool" - but I WANT IT NATIVELY, damn
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is offline   Reply With Quote
Old 11-16-2015, 06:30 AM   #5
Fergler
Human being with feelings
 
Fergler's Avatar
 
Join Date: Jan 2014
Posts: 5,207
Default

This demonstrates exactly how it should be done (although skipping around during playback could be handled with takes rather than clearing the buffer) and would be awesome to see natively.

Having to put plugins on the track sort of defeats the automatic-ness of retrospective record, but I suppose you could save it to default tracks.
Fergler is offline   Reply With Quote
Old 11-16-2015, 08:20 AM   #6
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Very nice! Clever use of the JS params to access what's in the buffer too!
snooks is offline   Reply With Quote
Old 11-16-2015, 09:30 AM   #7
Lannister
Human being with feelings
 
Lannister's Avatar
 
Join Date: Jan 2014
Location: Norway
Posts: 140
Default

Thanks for this, really nice!

Easy to add the track and then hide it, and save as default template, for example.

It's probably not possible, but if you didn't have to hit play first, that would make it perfect.
Lannister is offline   Reply With Quote
Old 11-19-2015, 05:39 AM   #8
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default Updated(v2)

Link in first post.
1)The script automatically creates JS-utility when you first start it( in the folder of the effects of the program).
First Start
2)The script automatically adds the track and JS-utility in the project when you start it.Track-settings are performed automatically.The track is hidden automatically.
Start in NewProject
3)Overwrite buffer only when you press the play button (and if received new MIDI-data).The recorded data is added on Track as New-Takes.
RR2 Demonstration

Last edited by eugen2777; 11-30-2015 at 12:52 PM.
eugen2777 is offline   Reply With Quote
Old 11-19-2015, 11:29 AM   #9
Alex Philipp
Human being with feelings
 
Alex Philipp's Avatar
 
Join Date: Mar 2015
Posts: 52
Default

On mac OS (10.10.5) script doesn't create JS.
Have to make it manually by copying code from script.
Code:
This JS-utility is designed for use ONLY in conjunction with a Script-RetroRec.
JS writes the incoming MIDI-data.The Script retrieves the stored MIDI-data on the sel track.
desc:ForRetroRec v.20151118
slider1:0<0,8388608,1>MSG_Count
slider2:0<0,2097151,1>MSG_Number
slider3:0<0,65536,0.001>MSG_Position
slider4:0<0,256,1>msg1
slider5:0<0,127,1>msg2
slider6:0<0,127,1>msg3
slider7:1<0,1,1{No,Yes}>Compensate Latency
slider8:0<0,1,1{Only when you press Play,At each change of Playposition}>ReWrite Buffer
in_pin:none
out_pin:none
@slider 
slider1 = input_msg_count;//MSG_Count
s = slider2*4;
slider3=buf[s];//MSG_Position+offset
slider4=buf[s+1];slider5=buf[s+2];slider6=buf[s+3];//msg1,msg2,msg3
@init
ext_noinit = 1; 
@block
Start_Play_Position = play_position;//When New Block is starting 
 //===Reset Counter===//
 (play_state==0 || (slider8>0 && abs(Start_Play_Position-Last_Play_Position)>0.2) ) ? 
                   (i = 0; buf[8388604]=samplesblock/srate;);//Reset i;buf[8388604]=sblock/srate
  //===Save each position and msg1,msg2,msg3 to buf[.,.,.,.]===// 
  play_state == 1 || play_state == 5 ? //1=play-main mode,5=rec-only for check!
   (while (midirecv(offset,msg1,msg2,msg3) )    
             (i==0 ? input_msg_count=0;
              input_msg_count+=1; slider1 = input_msg_count;//Update Slider MSG_Count
              buf[i] = Start_Play_Position + offset/srate;//Pos w offset:(1/srate)*offset
              buf[i+1] = msg1;
              buf[i+2] = msg2;
              buf[i+3] = msg3;               
              i+=4;
              midisend(offset,msg1,msg2,msg3);//Pass true
              );
   );              
Last_Play_Position = Start_Play_Position;
Thank You for share this!
Alex Philipp is offline   Reply With Quote
Old 11-19-2015, 11:51 AM   #10
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,960
Default

eugen2777, replace '\\' to '/', when you create JS file. It will work on OSX and on WIN.
mpl is offline   Reply With Quote
Old 11-19-2015, 03:05 PM   #11
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Quote:
Originally Posted by mpl View Post
eugen2777, replace '\\' to '/', when you create JS file. It will work on OSX and on WIN.
Спасибо!Исправлю позже
Fixed '\\' to '/'.

Last edited by eugen2777; 11-20-2015 at 02:39 AM.
eugen2777 is offline   Reply With Quote
Old 11-22-2015, 12:19 PM   #12
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default Updated

Updated.
Added script for Audio(beta1)
In the future, the scripts(for Midi and for Audio) will be finalized, are corrected and combined into one universal.

Last edited by eugen2777; 11-23-2015 at 06:49 AM.
eugen2777 is offline   Reply With Quote
Old 11-30-2015, 01:20 PM   #13
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

It's probably not a basic need.
Meanwhile, the updated script for the midi.Added transfer of unfinished notes to next Take.Same as in normal recording.

https://stash.reaper.fm/25830/RRmidi%20unf%20notes.gif

In general, no different from the usual recording.
Thus, the recording is made entirely in the background.
In addition, there are advantages to free navigation of the project.

Last edited by eugen2777; 11-30-2015 at 01:50 PM.
eugen2777 is offline   Reply With Quote
Old 12-01-2015, 04:20 AM   #14
timothys_monster
Human being with feelings
 
timothys_monster's Avatar
 
Join Date: Jan 2012
Location: Germany
Posts: 1,130
Default

Wow! Thank you so much for this script, Eugen!

I just installed it. Great job! No hassling around with zip files or anything.
I still feel like in a dream... It is/was definitely my #1 feature request

EDIT:

Does it buffer during pre-roll? Would be nice to have it working there as well!
timothys_monster is offline   Reply With Quote
Old 12-01-2015, 05:49 AM   #15
paaltio
Human being with feelings
 
Join Date: Aug 2011
Location: Los Angeles, CA
Posts: 308
Default

Great work! I had no idea it could be done like that.
paaltio is offline   Reply With Quote
Old 12-03-2015, 04:58 AM   #16
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

Fantastic! I got used to it and thee best feature from me ol' Logic days is back!
Thanks, Eugen!!!
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is offline   Reply With Quote
Old 12-03-2015, 07:36 AM   #17
LugNut
Human being with feelings
 
Join Date: Jun 2013
Location: So Florida
Posts: 1,427
Default

Hi,

Omg thank you Eugen!


Quote:
Originally Posted by beingmf View Post
Fantastic! I got used to it and thee best feature from me ol' Logic days is back!
Thanks, Eugen!!!
Screensets..Sws zoom ....fingers groove tool...now this? Do you think the enviourment maybe might happen? Liteon almost did it:-) I would just pass out:-)
LugNut is offline   Reply With Quote
Old 12-03-2015, 08:04 AM   #18
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Consider in more detail,it's more fun than Logic.
There are written all the incoming MIDI,and in the process you can change the playback position as you like.
And in the end,all recorded will be placed in the form of a Take.
Planned the same with audio.
It's hard for me to speak English, but conceived full support background Audio and MIDI recording
eugen2777 is offline   Reply With Quote
Old 12-03-2015, 08:31 AM   #19
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

At the moment,there is a limit 8388608*4 for audio in samples.
It is about 380 seconds at 44100 stereo.
There is a way to consistently add data and in the end you can get as much time for background recording.
===
The buffer transmits data to the next when filling, and so on.
in fact, it can be any value(depending on the available memory).
Updated.
Feature is included in the script RRAudio.

Last edited by eugen2777; 12-15-2015 at 04:53 PM.
eugen2777 is offline   Reply With Quote
Old 12-03-2015, 10:58 AM   #20
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

One request: could you please incorporate CC64 (sustain pedal) in the script? Kind of essential when you play piano
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is offline   Reply With Quote
Old 12-03-2015, 11:09 AM   #21
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default Answer

Edited.
See post below http://forum.cockos.com/showpost.php...7&postcount=27

Last edited by eugen2777; 12-14-2015 at 06:50 AM.
eugen2777 is offline   Reply With Quote
Old 12-03-2015, 11:37 AM   #22
timothys_monster
Human being with feelings
 
timothys_monster's Avatar
 
Join Date: Jan 2012
Location: Germany
Posts: 1,130
Default

Thanks for the further details, Eugen

What about this?
Quote:
Originally Posted by timothys_monster View Post
Does it buffer during pre-roll? Would be nice to have it working there as well!
timothys_monster is offline   Reply With Quote
Old 12-03-2015, 11:54 AM   #23
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

It's easy to do, but then you need to think about how to reset the buffer.
If there are two modes, it is difficult to find a compromise.
At the moment, the buffer is reset when play restarted and thus received MIDI messages.
If you make a reset only when a message is received, it will be possible to unintentionally reset.
For example, if you accidentally wounded a key, we lose the entire buffer.
This is undesirable.
However, I think about how we can implement it.
eugen2777 is offline   Reply With Quote
Old 12-03-2015, 12:16 PM   #24
LugNut
Human being with feelings
 
Join Date: Jun 2013
Location: So Florida
Posts: 1,427
Default

Quote:
Originally Posted by eugen2777 View Post
Consider in more detail,it's more fun than Logic.
There are written all the incoming MIDI,and in the process you can change the playback position as you like.
And in the end,all recorded will be placed in the form of a Take.
Planned the same with audio.
It's hard for me to speak English, but conceived full support background Audio and MIDI recording
Hi,

Understood, your English is great.....its what logic had on steroids..brilliant Eugene!

Thanks again
LugNut is offline   Reply With Quote
Old 12-04-2015, 09:18 AM   #25
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

Quote:
Originally Posted by eugen2777 View Post
You can
add it yourself
Ah! I have to enter it manually and confirm.
Those sliders do not slide, that's why I thought it was readout only!

So basically ALL midi messages that I want to record should be in there?
What if I have lots of controller data (e.g. for a synth)? Do I have to insert more than one instance of "ForRetroRec" or is it simply not possible?

Thanks!

EDIT: No, it doesn't work. As soon as I want to enter a 2nd value, the first slider returns to zero :/
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is offline   Reply With Quote
Old 12-06-2015, 05:18 AM   #26
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Probably, I incorrectly explained.
For example, one value of 176 already includes ALL ControlChange. (0-127).
One value 192 contains ALL ProgramChange.

And so on.
Therefore, all should work well.
Not included only specific messages, such sysex.
I specifically checked the pedal (cc64), it works.

Then I checked it on different channels and different controllers, it also works fine.
Without any changes to the code.

Last edited by eugen2777; 12-06-2015 at 07:23 AM.
eugen2777 is offline   Reply With Quote
Old 12-06-2015, 08:27 AM   #27
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Still, possible that when the pedal is not working.
When the moment of pressing gets to the beginning of items.
https://stash.reaper.fm/25888/1.gif
While you can simply push the edge of items.
Later, I will correct it.
========================
Updated,This has been fixed

Last edited by eugen2777; 12-06-2015 at 10:57 AM.
eugen2777 is offline   Reply With Quote
Old 12-07-2015, 04:01 AM   #28
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

That was it!
Downloading the fixed version now.

EDIT: is it updated? Title still says 2015/11/30 - inside the script it even says 2015/11/18?
EDIT2: yes, it is Pretty confusing, but it works! Thanks, eugen!
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)

Last edited by beingmf; 12-07-2015 at 04:07 AM.
beingmf is offline   Reply With Quote
Old 12-07-2015, 04:29 AM   #29
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

Ah - I see where the problem is. Input FX aren't recorded. That means if I have a CC inverter on the instruments Input FX, I may hear it correctly when I play, but it won't be recorded. Is that correct?
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is offline   Reply With Quote
Old 12-07-2015, 07:11 AM   #30
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Quote:
Originally Posted by beingmf View Post
EDIT: is it updated? Title still says 2015/11/30 - inside the script it even says 2015/11/18?
This is only a creation date.
Quote:
Originally Posted by beingmf View Post
That means if I have a CC inverter on the instruments Input FX, I may hear it correctly when I play, but it won't be recorded. Is that correct?
Yes it is.Only the original signal is recorded.
However, you can move the CC inverter from Input FX to the Main FX chain of effects before the instrument.
===
Another alternative, you can add this effect in the input FX on the hidden track with my JS-plugin.
And probably it will work correctly.
MIDI-messages will be recorded in a modified form.
But it should be checked.

Last edited by eugen2777; 12-07-2015 at 08:13 AM.
eugen2777 is offline   Reply With Quote
Old 12-11-2015, 09:24 AM   #31
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default Updated

Updated Script for Audio.
You can now set a great time to buffer.
The default is 2 buffers.It is about 12.5 minutes,2*256MB RAM.
It is possible to set a different value depending on the available memory.
One buffer is equivalent to 380 seconds
It works similar to RR-MIDI.
The record buffer during loop playback, any change of position, etc.
All recorded will be placed in the form of a Take.

Last edited by eugen2777; 12-15-2015 at 05:00 PM.
eugen2777 is offline   Reply With Quote
Old 12-11-2015, 02:58 PM   #32
timothys_monster
Human being with feelings
 
timothys_monster's Avatar
 
Join Date: Jan 2012
Location: Germany
Posts: 1,130
Default

Thanks!

Have you already found a way to make it work during pre-roll as well?
timothys_monster is offline   Reply With Quote
Old 12-11-2015, 03:25 PM   #33
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

Quote:
Originally Posted by timothys_monster View Post
Thanks!
Have you already found a way to make it work during pre-roll as well?
So far, the need to modify some of the nuances in the current versions.
Later, I want to make an entry into the buffer without starting playback.
By then it will be possible to add other options.
I could do it right now, but better slowly but surely.
eugen2777 is offline   Reply With Quote
Old 12-12-2015, 12:49 PM   #34
timothys_monster
Human being with feelings
 
timothys_monster's Avatar
 
Join Date: Jan 2012
Location: Germany
Posts: 1,130
Default

Quote:
Originally Posted by eugen2777 View Post
I could do it right now, but better slowly but surely.
Sounds good to wait. I'll be patient. Thank you!
timothys_monster is offline   Reply With Quote
Old 12-21-2015, 02:42 PM   #35
jangoux
Human being with feelings
 
Join Date: Dec 2015
Posts: 30
Default

Sorry for the noob-ish question, but how do I install this ? I created a new script on the Action List, pasted it there, ran it (the config stuff appeared) and then nothing happened.
jangoux is offline   Reply With Quote
Old 12-21-2015, 03:46 PM   #36
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

All right.
It is only when you first run the script.
Simply assign the button on the script.
The script will upload a track buffer at startup.
===
I understand very little English
But I think the picture may explain
==

==

Last edited by eugen2777; 12-21-2015 at 03:57 PM.
eugen2777 is offline   Reply With Quote
Old 12-23-2015, 08:14 AM   #37
Subz
Human being with feelings
 
Subz's Avatar
 
Join Date: Jun 2006
Location: UK
Posts: 3,210
Default

this looks interesting!!

thank you!

Subz
Subz is offline   Reply With Quote
Old 12-29-2015, 04:27 AM   #38
midi-man
Human being with feelings
 
Join Date: Oct 2006
Posts: 5
Default

Thanks for your great effort eugen2777!
I've seen this in Tracktion and would love something similar in Reaper.

I mostly record in mono so it would be nice if it was possible to select recorded intputs.

To save memory I would also appreciate the option of a 30 sec (or a minute) buffer.
midi-man is offline   Reply With Quote
Old 01-02-2016, 05:52 AM   #39
eugen2777
Human being with feelings
 
eugen2777's Avatar
 
Join Date: Aug 2012
Posts: 271
Default

I will try to rewrite the script on Lua.
This will add some options and settings.
As I just started to learn Lua, so I need some time to learn.
eugen2777 is offline   Reply With Quote
Old 01-02-2016, 11:10 AM   #40
Subz
Human being with feelings
 
Subz's Avatar
 
Join Date: Jun 2006
Location: UK
Posts: 3,210
Default

i am only using the midi version (for now) and its really really useful!!

and has a dedicated spot on my main tool bar!

Thank You!

Subz
Subz 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 06:31 PM.


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