Home › Forums › General › Using Ctrlr › What am I doing wrong?
- This topic has 12 replies, 4 voices, and was last updated 7 years, 9 months ago by goodweather.
-
AuthorPosts
-
July 29, 2016 at 10:23 pm #69677
Hi! I’m having no luck connecting my Korg DW-8000 to Ctrlr. I’m using a Roland UM-ONE adapter and it shows info going both ways but the DW panel has no effect on the sound and when I change the program # on the DW, nothing changes on the panel.
Any help would be appreciated, can’t wait to get the DW in Fl Studio.
July 29, 2016 at 10:48 pm #69678Hi, first thing is to try in standalone mode…
Take Ctrlr standalone, create a new empty panel, add uiSlider, put Midi information (CC or NRPN messages) and check if the synth reacts when turning the knob in Ctrlr.
Next step: check Ctrlr reacts when you modify the param on the synth.
Next step: take the DW-8000 panel (I didn’t check if there was one) and try.
Check Midi channels of course.When running in standalone, then time to check in plugin mode π
July 29, 2016 at 11:36 pm #69679Thanks so much for the reply!
I created an empty panel with a uiSlider and it worked. It altered the sound significantly.
I couldn’t get Ctrlr to react however. TBH, I’m not sure exactly what parameter I was affecting on the synth.
I find it strange the panel for the DW has no affect at all but the uiSlider in a fresh panel does.
July 30, 2016 at 2:09 pm #69702I downloaded the DW8000 manual (http://www.pallium.com/bryan/dw/DW-8000_Manual.pdf) and saw it doesn’t handle CC or NRPN communication for modifying parameters…
You need to setup your Slider to handle sysex.
So, set Midi Message Type to Sysex
In Sysex, you can use the Edit button to build something (see in forum under Documentation – Getting started) or directly type something.To modify OSC1 WaveForm you need to build a message like: F0 42 3y 03 41 01 ls F7
Look at p65 and p68.
3y is for the Midi channel. The y will take the value in Midi Channel property. If this doesn’t work, you can also put 30 for channel 1 for example
01 is the offset of OSC1 Wave Form (see p68)
ls is the 4 bytes value of the slider (WF can be 1-16 so ls 4 bytes is enough)
Set Min and Max values of your slider to 1 and 16Turn it and watch the OSC1 Wave form changing. Then try the opposite.
You should also open the Midi Monitor (output and input enabled) to see what is passing in and out. You should check that the correct message is there in and out.July 31, 2016 at 10:12 am #69713I’m struggling with something similar, my target device (synth) sends a small SysEx packet upon parameter change (button/slider change), all well and good. I have made a modulator to send that code to the target device and it responds. I then can use a lookup table to modify that number to suit the crazy system used by the target device.
OK, now I need to do the same in reverse which is when the target device sends the SysEx packet I need relevant Ctrlr modulator to respond. I have got halfway, the target device sends the SysEx packet and the modulator shows the value, all well and good, now my problem.
Upon receiving that SysEx packet I need to go to a lookup table, so I have made a method, RevLookUp, and it gets called from: “Called to calculate new modulator value from a MIDI value”
It all seems ok, but even with an empty method (the default), as soon as I press the button on my synth, boom Ctrlr crashes and closes (nothing useful written to the crash report).
I just can’t see why Ctrlr should crash even with an defualt method hooked up. The modulator will display the raw value send by the synth but fails to respond to a method call.
Any clues?- This reply was modified 7 years, 9 months ago by Peter_EP.
July 31, 2016 at 11:18 am #69715Difficult to help you on that one… However, when I encounter an issue I’m always trying to find another way to reach the same π
I don’t know what you want to achieve but you should simply have one modulator for each param and use the sysex to transmit/receive.
To each mod you create a method “xxx_OnChange” that will be called each time the modulator value changes. In that one you can do an if value==…elseif…elseif…end statement that will handle the value of the modulator to what you want to achieve.Don’t forget to put the classical
if panel:getBootstrapState() == true or panel:getProgramState() == true then return else ... end
in the beginning of each method to avoid it fired at panel load.
July 31, 2016 at 12:33 pm #69716@Peter_EP: Why do you want to receive a single-parameter sysex packet? You want the slider to move when you move a knob on the synth?
the Lua script must look like this otherwise it will probably crash:
myNewMethod = function(--[[ CtrlrModulator --]] modulator, --[[ CtrlrMidiMessage --]] midiMessage, --[[ number --]] numericMidiValue) ... your code return numericMidiValue end
August 1, 2016 at 12:09 pm #69722Yes Mr P, my “synth” does all the work via 18 byte SysEx packets, so for example, to change Master Tune, I need to send:
F0 0F 03 00 11 00 00 00 00 00 00 34 01 00 00 MS LS F7The value represented by the MS and LS are not in sequence, for example:
Ctrlr (human) sees “12”, Ctrlr sends (via lookup table) “34”.
I have got all this working just fine.Then in return, when I press the same button on the synth it sends the same packet to Ctrlr, so I then need to take that “34” use it as a key in a reverseLookUp table which will return “12” which I use to make the respective slider move and display the value.
That is my theory, but when I put a call to even the default method (as you have kindly listed), when the specific MIDI SysEx packet is received and sent to the correct modulator, Ctrlr crashes. Nothing is written to the crash log either. If I have no call to a method, Ctrlr will display the incoming value, albeit in the funny code my synth uses, so in the example Ctrlr displays 34.
My puzzle is, when I put a call to even a default method in: βCalled to calculate new modulator value from a MIDI valueβ – Boom! Ctrlr crashes.
Am I just putting this call in the wrong place?August 1, 2016 at 1:11 pm #69725Could you provide a midi implementation list of this synth? Maybe the Ctrlr community would have some suggestions.
When the βCalled to calculate new modulator value from a MIDI valueβ does not work (I never used it until now) there could be another way: Do it all with the “midi received” script. Something like that: *if* midi message matches *then* set your modulator to the apropriate value. An if-then for each parameter.
August 1, 2016 at 3:51 pm #69736My “synth” is actually a vintage sampler π I just didn’t want to say that just in case it confused things. The MIDI spec is quite clear, SysEx only please!
It would be helpful if someone could try and repeat the problem, I know everyone is busy etc. but I wonder if this is a bug that our friend Atom might be able to fix.
August 1, 2016 at 7:05 pm #69737Possemo is right: use one way to send to your synth then MidiMessageReceived to process the reception with an elseif series based on Offset which indicates the different parameters.
I’m surprised about your sysex string. In DW8000 manual, param change is a 8 bytes long sysex…
In pseudo code for MidiMessageReceived:
if MidiMessage.getSize()==8 then offset = MidiMessage:getData():getByte(6) value = MidiMessage:getData():getByte(7) if offset==1 then -- OSC1 Wave form modOsc1WF:setValue(value, true) elseif offset==2 then ...
When one way doesn’t work, always try to find a working workaround and in parallel secure a solution / understand the main/initial issue π
August 1, 2016 at 8:11 pm #69738π
When one way doesnβt work, always try to find a working workaround and in parallel secure a solution / understand the main/initial issue
Yeh I know! π it all takes a huge amount of time, finding the right reference document, trying to get alternative code to work, getting to understand the framework etc. And then once that one issue has been overcome it’s onto the next! HUGE amount of time and frustration. I do need to eat and sleep π
Yup that’s the SysEx spec, if you were to see it, I can send it to you, after a while of reading it you’d go “yup your right, it takes 18 bytes of SysEx to do anything!” π
The worst has yet to come as some parameters are only accessible by mini-sysex dumps and changing the one entry and then resend it back, phew!
Thanks for the suggestions and ideas. I’ve left a note with Mr Atom, should he have time/will to give it a once over. Having that method call at that point would be really good.
August 2, 2016 at 8:25 am #69743It is of course easier when you have the real synth and can test it, hΓ©hΓ©…
FYI, for this Pro 2 panel and after having made an almost complete Sub37 panel (that I could re-use some principles) I have spent a huge amount of time designing, writing, testing my panel (1 to 2 hrs a day since mid february – so, probably a bit more than 300 hours).
- Learning specific functions and syntax in Juce/Lua/Ctrlr, properties
- getting bugs when you think it will work
- getting things working in a different ways than the logic would say and finding workarounds
- finding bugs on the synth
- having the synth not acting always in a logic way when using an editor
- having to reverse engineer the sysex dumps because not documented
- testing, re-testing, re-re-testing to find some small issues or to make the panel more fool-proof
- etc…
But OK, you get the great reward of building a nice panel for you (and the others) and it is a great challenge and fun doing it. So no regret at all and a lot of pleasure π
-
AuthorPosts
- The forum ‘Using Ctrlr’ is closed to new topics and replies.