New Tool (2.8): Guru

(jsr606) #181

i poked around in the menus of the JX-8P a bit and found the setting “system exclusive” under “MIDI”, if i set this to ON guru works its magic! :)

(Dan P) #182


I have at last started work on a Guru definition for the Hawk800 Korg Poly800 mod, but have hit a snag.

In sending the data via NRPN I see in the terminal that the correct numbers are sending, for instance:
98,24 (for Filter cutoff),

However that last “0” is effectively fixing the value at zero, and the slider has no effect, the synth immediately stops at value “0”. On the GUI the number is seen to change as the slider is moved, but the synth only receives “0”.

Having looked through this thread I wonder if the answer lies somewhere in post 85, in editing the msb_value?

So, do you have a clue why this is, or what I’m doing wrong, or how we can edit the code?

(Cornbeast) #183


Not at a puter now.

Hmm, it’s not impossible I misinterpreted nrpn. I did what I thought was right and let it try it’s wings, so now maybe you found out it’s wrong. Although I think there are nrpn synth definitions that others have created.

You can modify the code real simply. Just enable the scripting editor in renoise, you’ll see the tools installed there, and just open the lua files and try to find your way, maybe the logic for nrpn is in the class_midi.lua file. Or you could start in main.lua and go from there.

You will also see guru spit out lots of debug info in the editor, you can search for the debu phrases in the files


(Dan P) #184

Thanks for your reply Cornbeast,
I have had a little look at the code but not sure what to do. There are no error messages in the terminal. Will contact the developer of the Hawk800 mod for his thoughts.

(Dan P) #185

function Midi:send_nrpn(number,value)
local cc_start = 0xB0 + (self.midi_channel-1)
local msb_number = math.floor(number/128)
local lsb_number = number-(msb_number128)
local msb_value = math.floor(value/128)
local lsb_value = value-(msb_value
–print((“Sending NRPN: %s %s”):format(number,value))

The code above seems to be where the NRPNs get sorted out. The msb_number is stuck on 0, as is the msb_value, which particularly is the one which should be adjustable by the slider. I’ve tried a few things but, not being a coder, I haven’t found anything that works yet. Is it something to do with math.floor? Any thoughts?

(Cornbeast) #186


Sorry, right now I’m not much in front of the computer. But what my code does here is what I believe NRPN is, but I might be wrong:

In midi you can send a value between 0-127, because higher values are messages like, note on, note off etc.

In order to send higher values (either parameter number higher than 127 or a value for a parameter) you can use nrpn to send two values of 0-127 that together make a value that is between 0 and 12383 (if i remember correctly).

So, the lsb is the 0-127 part, and for the msb each number (each 1) has the value of 128.

So if you send msb = 1 and lsb = 3 then the sum is 128 + 3 = 131.

If you send msb = 2 and lsb = 3 then the sum is 259.

But I might be wrong here, I’m not sure that this is correct. Maybe I misunderstood it?

Or there is just something slightly wrong, like I am sending the msb even if it’s 0, maybe this is not what your synth wants, maybe msb should not be send if it’s 0?

Maybe the synth has a bit laggy midi, you can try using delay_between_midi_messages, set is to 20 and see if it works better? (see

Maybe you can use MIDI OX to monitor what is sent, it should show that this is a nrpn message.

Maybe the synth sends out the same nrpn when you modify the parameters in the synth, maybe you can see with MIDI OX what is sent?

That all I can do right now, hope you get on…


(Dan P) #187

It took a while, but eventually I gave up on NRPNs. However after rewriting the midi.lua code a bit I’ve got it to work with CCs, so I’ll be attaching a new definition soon.

Anyone out there working on a Waldorf Blofeld definition???

(Cornbeast) #188


You can mail me or mess me private, especially if concerns changing the midi class… (Cuz you need to send two messages for each parameter right?)

I have looked in the hawk manual now, and it seems like it’s using nrpn in it’s own way, and it seems like that is common, like the only thing that makes it nrpn is that you use 99 98 6 38.

So, the way I solved it will not work for all synths. I need to rethink how to define the nrpn messages.

This is one page I used for knowledge, but it seems to be tru only for some specific nrpn implementations:

But the hawk manual says: “1) Send MIDI CC 99 with the data value matching global parameter 16. If the NRPN MSB does not match global parameter
16 then the desired parameter will not be changed. This is useful if you have more than one HAWK-800 listening on the
same MIDI channel and wish to edit sounds independently which can be done by setting global parameter 16 to be unique
on each HAWK-800.”

So, hawk does not want msb on 99 at all, but some “global parameter 16” whatever that is…

Midi is really crap!

(Kaiserin) #189

Has somebody made a preset for the Roland JP-8080 ?
If not i hope that the JP-8080 will be supported
in the future. I would love it. ^^


(Cornbeast) #190


Nope, noone has made that one yet.


(Kaiserin) #191

Is there really no Renoise User who has a JP-8080 or JP-8000 at home ? :)


(Cornbeast) #192

Yeah - you! :wink:

So start making that Guru synth definition.

I guess most Renoisers use samples and VST:s

(vV) #193

My brother used to have one, but never was a Renoise user :)

(Dan P) #194

It’s not difficult to do. Guru does almost all the work. There’s no coding involved, and once you’ve done one then any midi synth can potentially be done.

(Cornbeast) #195

Haha, yeah, I started writing just that answer, but then I googled something like “JP 8080 midi implementation” and - yet again - stumbled on hopeless midi implementations and hopeless documentation.

So, writing a Guru synth definition to make support for a synth is something you can do, it’s easy. For small ans easy synths.

But what’s harder is figuring out what kind of midi messages big and/or retarded synths wants.

Plus, for big synths, it takes a few hours of hard work to get all the parameters in place.

Plus, there might be things in the code that I have yet not implemented, so you might need to communicate with me and get me to do things. Which I will.

But, the conclusion is: you need to really want to do it :slight_smile:

But if you do, just to it.

Check my documentation on how to do it:


(bbarham) #196

Here is a simple layout for the Meeblip Micro.

3564 meeblipmicro.lua

(Cornbeast) #197


I’ll include it. But from what I understand it will work for the Meeblip SE as well. Same midi implementation.

So I will renamd it just “Meeblip”



(bbarham) #198

You are correct. I fixed a wrong cc assignment on filter decay and renamed it Meeblip (SE+micro). Thanks for the awesome tool!

3575 meeblip_se+micro.lua

(Dan P) #199

Here’s my definition for the Korg Poly800 with Hawk800 mod. Not only does this mod give the Poly800 loads of new parameters but also a full midi spec. However it is somewhat non-standard, so the only way that this will work in its current form is to do the following:

  1. open the Scripting Terminal
  2. navigate to the Guru menu
  3. EITHER: replace lines 18 to 22 in the midi.lua file with:

function Midi:send_cc(number,value)
local cc_start = 0xB0 + (self.midi_channel-1)
print((“Sending CC: %s %s”):format(number, value))

OR: copy the existing midi.lua file, save the copy as midi2.lua, replace lines 18-22 as above, and then in the main.lua file change line 36 to “class_midi2”. This way will preserve the original midi.lua file for use with other synths.

I know this is cumbersome and less than ideal but it’s a start and after trying and failing to get it to work with NRPNs and sysex this is better than nothing. That said it really opens up the synth which would surely be virtually impossible to edit otherwise.

I’m sure very few Renoise users, if any, will also have the Hawk800 but it would be interesting to know if there are any. Please note this current version does not feature the Atomahawk mod, but I’m considering adding that too.

(Cornbeast) #200


I can make a setting for this instead so that Guru treats the messages different. I have other special cases going as well.

SynthDefinition {  
 retardedness-flavor = "Hawk800"