New Tool (2.8): Mpe

Excited for this, although I didn’t yet use the MPE a lot.

Does this work??? How did you do it?! :D Just one of those things in renoise i wanted, to have it start somewhere else than sample #0 (without having to 09xx!)

Just YES.

I modded the version I downloaded with buttons to quickly block loop 1/2, 1/4, 1/8, 1/16, and off (in my work these are the only sensible settings for blockloop anyway), Want to see/incorporate?

Give it away now! :P

ok so here it is for beta testing… I know some things dont work like TRIM.S and NEW.S

also midi mapping and control of the rotary values is having issues , TAKTIK others feel free to help…

Awsome work Sevenscientist :D

Im still working out some bugs , but Im having trouble with getting higher resolution from midi controls for the rotary’s . the formula Im using is :

the GUI rotary sets the start selection marker or end marker
the MIDI TRIGGER send its value to the GUI rotary by MULTIPLYING its rounded-up number to the total number of frames for a sample then divided by 127

--sample select start  
-----------------  
local function fselectstart()  
 if renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.has_sample_data then  
 renoise.app().window.active_middle_frame = 4  
  
 vb.views.smpstart.min = 1  
  
 --dont allow the end selection to go past the start  
 vb.views.smpend.min = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.selection_start  
  
 --dont go past the length of the sample  
 vb.views.smpstart.max = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames  
  
 renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.selection_start =  
 vb.views.smpstart.value  
  
-- for testing purposes  
-- print (vb.views.smpstart.value)  
 else return  
 end  
end  
-----------------  
 vb:rotary {  
 tooltip = "Select (START-RANGE) of the sample.",  
 id = "smpstart",  
 min = 1,  
 midi_mapping = "MPE:Sample:Select Start",   
 notifier = function()  
 fselectstart()  
 end  
 },  

the above work for the GUI fine but MIDI is inaccurate and wont go to the very start of the sample only to frame 1 (it says value 0 is invalid)

so far so good
here comes the MIDI part

renoise.tool():add_midi_mapping{  
name = "MPE:Sample:Select Start",  
invoke = function(message)  
 if (message.int_value >= 128 or message.int_value == 0 )then return  
 elseif renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.has_sample_data then  
 renoise.app().window.active_middle_frame = 4  
 --end minimum *>  
 vb.views.smpend.min = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.selection_start  
 --start minimum *<  
 vb.views.smpstart.min = 1  
 --start maximum vb.views.smpstart.max = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames  
 --set the views value from midi  
  
 vb.views.smpstart.value =   
 renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames   
 * math.floor(message.int_value) / 128  
  
 print("MOUSE :",renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.selection_start,  
 "GUI :",vb.views.smpstart.value,"MIDIHEX:",message, "MIDIVAL",message.int_value)  
  
 else return  
 end  
 end  
}  

…MIDI part

renoise.tool():add_midi_mapping{  
name = "MPE:Sample:Select Start",  
invoke = function(message)  
 if (message.int_value >= 128 or message.int_value == 0 )then return  
 elseif renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.has_sample_data then  
 renoise.app().window.active_middle_frame = 4  
 --end minimum *>  
 vb.views.smpend.min = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.selection_start  
 --start minimum *<  
 vb.views.smpstart.min = 1  
 --start maximum vb.views.smpstart.max = renoise.song().selected_instrument.  
 samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames  
 --set the views value from midi  
  
 vb.views.smpstart.value =   
 renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames   
 * math.floor(message.int_value) / 128  
  
 print("MOUSE :",renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.selection_start,  
 "GUI :",vb.views.smpstart.value,"MIDIHEX:",message, "MIDIVAL",message.int_value)  
  
 else return  
 end  
 end  
}  

[/quote]

I’m going to test this myself too, but I think it’s better to 1. not check for 0 value (it’s a valid value for the midi msg and 1 on 128 extra accuracy will be welcome) and 2. make the final math more like

  
 vb.views.smpstart.value =   
 math.floor(renoise.song().selected_instrument.samples[renoise.song().selected_sample_index].sample_buffer.number_of_frames   
 * message.int_value / 128 + 1)  
  

please check if this works / and if so, whether it won’t generate exactly the same bug on the other end of the sample! (That would be a lesser bug though, because you never really want a sample to start at the total end, but everything that gives an error message is annoying :)

still not accurate maybe thats just midi? if I divide by say 5000 then its accurate and I can even select from the very start of the sample but at its maximum midi controller value the selection is very small.

does not like value 0

*** std::logic_error: 'ViewBuilder: invalid value for rotary encoder: '0'. value must be [1 - 52540].'  

This is a Lua particularity.

Arrays in every other programming language I know start at 0.

Lua, it’s 1.

You have to compensate.

thanks conner_bw

i see theres 12 downloads, any suggestions ? I am planning to add:

  • a block loop button that cycles through the timing
  • a snap to beat for the sample selection rotary
  • maybe a redesign of the interface where the rotary knobs are on the right ? so its a wider tool rather than a longer one

just thought I would share this with you all…

sold the mpc2000xl
just purchased a korg nanopad & nano pad2 (spacing on the nano pad2 not as good)
and purchased a korg nano kontrol2 (luv it!)
downloaded reason again (previous version I used v3) and tryed it again (renoise wins-for what i do)
downloaded live again (previous version I used v4) and tryed it again (renoise wins-for what i do)

next version almost ready for upload

version 2.9 released

http://tools.renoise.com/tools/musical-programming-environment

temporarily in Quarantine.

Could you post what’s new in it to this thread, please?

added :

  • all function buttons and rotary knobs are midi mappable
  • sample loop off button
  • sample loop forward button
  • sample loop backwards button
  • sample ping pong button
  • sync sample transpose/pitch to song bpm (tap tempo first)
  • timing quantize on or off button
  • previous sequence button
  • next instrument button
  • previous instrument button
  • add slice marker button
  • instant sample record
  • rotary knob to control start selection range of sample
  • rotary knob to control end selection range of sample
  • rotary knob to control start loop marker of sample
  • rotary knob to control end loop marker of sample
  • F.LEVEL, TIMING.Q, SYNC, LP.OFF/F/B/P, RECORD, OVERDUB will change colour when activated or deactivated

changed :

  • the sample button work again as it used to press once for sample dialog again to start and stop sample recording
    (great if you want more control over the recording options within the dialog)
  • changed black buttons into more grey colour to be more visible outline in a dark room

enjoy!

when will this be out of quarantine? looks bloody brilliant!

Hi, I have access to Quarantine and played around with the tool for a bit.

I can release it if you really want, but:

You have a “Bitmaps/.DS_Store” that should be removed.

I found a bug:

  1. Start a new song with empty samples
  2. Open MPE
  3. Click+drag SELECT-END rotary knob
  4. Load a sample
  5. Click+drag SELECT-END rotary knob
  
ScriptingEngine: std::logic_error: 'invalid selection start index '0'. valid values are (1-272590).'  
stack traceback:  
 [C]: ?  
 [C]: in function '__newindex'  
 [string "do..."]:22: in function   
 main.lua:717: in function 'fselectend'  
 main.lua:1734: in function <1733><br>
<br>```

<br>
<br>
Is there any reason why you don't release betas to the thread so hardcore users can test before posting to the Tools page? I know it's not the most elegant release cycle, but it gets the job done?<br>
<br>
Anyway, tell me if you want me to release it with that bug, and I will.<br>
<br>
Cheers.</1733>

Can you not keep the latest Beta version attached to the first post? Can’t even grab older versions off the Tools site while it’s in quarantine…

[quote=“Conner_Bw, post:95, topic:32580”]
Hi, I have access to Quarantine and played around with the tool for a bit.

I can release it if you really want, but:

You have a “Bitmaps/.DS_Store” that should be removed.

I found a bug:

  1. Start a new song with empty samples
  2. Open MPE
  3. Click+drag SELECT-END rotary knob
  4. Load a sample
  5. Click+drag SELECT-END rotary knob
  
ScriptingEngine: std::logic_error: 'invalid selection start index '0'. valid values are (1-272590).'  
stack traceback:  
 [C]: ?  
 [C]: in function '__newindex'  
 [string "do..."]:22: in function   
 main.lua:717: in function 'fselectend'  
 main.lua:1734: in function <1733><br>
<br>```

<br>
<br>
Is there any reason why you don't release betas to the thread so hardcore users can test before posting to the Tools page? I know it's not the most elegant release cycle, but it gets the job done?<br>
<br>
Anyway, tell me if you want me to release it with that bug, and I will.<br>
<br>
Cheers.<br>[/quote]<br>
<br>
Dont release just yet..<br>
Im looking into the bug. Thanks conner_bw. Its just that I had done that before but had not feedback.. how long should I leave it here before re-uploading to tools page? whats the correct procedure?</1733>

Well, there is no correct procedure AFAIK. Release to the Tools page when you feel comfortable, I guess? If you released an attachment before, I didn’t see it. I just assumed you hadn’t released one because people were asking to download. I usually leave an attachment in the thread until it’s on the Tools page.

cool I have resubmitted it so its in Q again.

I have also added it for testing on the first post of this topic so everybody go ahead and download

http://www.renoise.com/board/index.php?/topic/30473-new-tool-27-mpe2000xl/

  • also added sample volume rotary knob
  • also added sample instrument volume rotary knob
  • ironed out bugs
  • re-wrote code for REC.SAMP (instant sample record)

if there are any bugs found I will try to fix them but right now my brain is fried! so help is greatly appreciated.
cheers

PS reverted this to version number 2.8 (so we stay sequential) 2.9 will arrive in future.

yeah! this is the bollocks! great work Seven.

Haven’t found any bugs yet myself…

I noticed the Step and Edit functions only switch on, not toggle though?

Also as a suggestion, it would be cool to have a button for the Enter key in the Sample Editor.
That way you can audition your selection from the midi controller, or is there already a way to do this?