What am I doing wrong?

Home Forums General Using Ctrlr What am I doing wrong?

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #69677
    slowpoke272
    Participant
      • Topics: 1
      • Replies: 1
      • Total: 2
      • β˜…

      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.

      #69678
      goodweather
      Participant
        • Topics: 45
        • Replies: 550
        • Total: 595
        • β˜…β˜…β˜…

        Hi, 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 πŸ™‚

        #69679
        slowpoke272
        Participant
          • Topics: 1
          • Replies: 1
          • Total: 2
          • β˜…

          Thanks 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.

          #69702
          goodweather
          Participant
            • Topics: 45
            • Replies: 550
            • Total: 595
            • β˜…β˜…β˜…

            I 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 16

            Turn 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.

            #69713
            Peter_EP
            Participant
              • Topics: 5
              • Replies: 19
              • Total: 24
              • β˜…

              I’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.
              #69715
              goodweather
              Participant
                • Topics: 45
                • Replies: 550
                • Total: 595
                • β˜…β˜…β˜…

                Difficult 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.

                #69716
                Possemo
                Participant
                  • Topics: 14
                  • Replies: 638
                  • Total: 652
                  • β˜…β˜…β˜…

                  @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
                  #69722
                  Peter_EP
                  Participant
                    • Topics: 5
                    • Replies: 19
                    • Total: 24
                    • β˜…

                    Yes 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 F7

                    The 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?

                    • This reply was modified 7 years, 9 months ago by Peter_EP.
                    • This reply was modified 7 years, 9 months ago by Peter_EP.
                    #69725
                    Possemo
                    Participant
                      • Topics: 14
                      • Replies: 638
                      • Total: 652
                      • β˜…β˜…β˜…

                      Could 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.

                      #69736
                      Peter_EP
                      Participant
                        • Topics: 5
                        • Replies: 19
                        • Total: 24
                        • β˜…

                        My “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.

                        #69737
                        goodweather
                        Participant
                          • Topics: 45
                          • Replies: 550
                          • Total: 595
                          • β˜…β˜…β˜…

                          Possemo 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 πŸ™‚

                          #69738
                          Peter_EP
                          Participant
                            • Topics: 5
                            • Replies: 19
                            • Total: 24
                            • β˜…

                            πŸ™‚

                            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.

                            #69743
                            goodweather
                            Participant
                              • Topics: 45
                              • Replies: 550
                              • Total: 595
                              • β˜…β˜…β˜…

                              It 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 πŸ™‚

                            Viewing 13 posts - 1 through 13 (of 13 total)
                            • The forum ‘Using Ctrlr’ is closed to new topics and replies.
                            There is currently 0 users and 99 guests online
                            No users are currently active
                            Forum Statistics
                            Threads: 2,495, Posts: 17,374, Members: 77,605
                            Most users ever online was 12 on January 22, 2019 3:47 pm
                            Ctrlr