Retrieve preset via MIDI

Home Forums General General MIDI discussion Retrieve preset via MIDI

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #13756
    King PP
    Participant
      • Topics: 12
      • Replies: 25
      • Total: 37

      Hi.

      Is there a way to have Ctrlr ask a hardware synth for it’s current preset & have Ctrlr move all knobs and sliders to the corresponding settings? Would this be panel / synth specific?

      Thanks in advance, Pat.

      #13758
      lfo2vco
      Participant
        • Topics: 26
        • Replies: 162
        • Total: 188
        • ★★

        Hi Kingpeepee, I asked the same queston a couple of months back.

        This was the reply:

        One question regarding sysex, I’m hoping that the panel will be able to reflect patch changes made on the 3P. Will this require extra scripting or settings to be made in the Ctrlr panel?

        yes.. you will need to get familiar with getting data and assigning values to modulators (knobs, sliders, buttons, etc).. Basically what you need to do is create a program change knob (or two buttons, – and +) that send a multimessage to your synth. first message is a program change, second message is a sysex program dump request.

        Then on your panel itself (just click on “blank” space on your panel) go to the properties on the far right and look for “called when the panel receives a MIDI message”.

        You’ll need to create a Lua method there called something like midiMessageRecieved. You need to create some hook that determines whether the message coming in is a program dump. Best ways to do this is ether by getting the nth byte to see if it is equal to your synth’s message ID for a program dump, or get the size of the message to compare to what a program dump’s byte length is. Here’s some example code of getting the 4th byte to see if it is equal to 0×10 (0x before a number represents HEX) which in my synths’s case indicates the message is a program dump from the synth:

        
        midiMessageReceived = function(midiMessage)
        
        --this is a comment, it is ignored by the lua interpreter
        --create a variable "IDM" which is the value of the 4th byte of any incoming MIDI message:
        
        IDM = midiMessage:getLuaData():getByte(4)
        
        --is the fourth byte of incoming midi message equal to 0x10?
        		if IDM == 0x10 then
        --if yes, then run another method called "assignValues"
        				assignValues(midiMessage)
        --this next line is just a console message that alerts you that the script has run this far. View these in the "Lua Console"
        				console ("program change sent, standby for panel update...")
        		end
        end
        

        IF the message is a program dump from the synth, you’ll then get the bytes that contain the values for your parameters, assign them to a variable (each one) and then assign that variable as the value for each modulator on your panel.
        Here’s a shortened example of my “assignValues” method:

        function assignValues(midiMessage)
        
        -- create a variable that contains all bytes of program data from the synths program dump, get this info from synth's manual:
        	programData = midiMessage:getData():getRange(7,256)
        
        -- cool, we've got everything, all we need to do now is actually assign the values to the modulators.
        --NOTE: use "setValueMapped" if the modulator is a combobox with custom values.
        --use "setModulatorValue" if the modulator is a typical modulator with a value range of, say 0-127 
        
        	panel:getModulatorByName("Osc 1 Octave"):setValueMapped(programData:getByte(1), false)
        	panel:getModulatorByName("Osc 1 Semitone"):setValueMapped(programData:getByte(2), false)
        	panel:getModulatorByName("Osc 1 Detune"):setModulatorValue(programData:getByte(3), false, false, false)
        
        --continue for ALL parameters within your program dump.. . 
        
        end

        Here is some noise I organised into an acceptable format:
        https://soundcloud.com/lfo2vco/a-dark-crystal

        #13785
        King PP
        Participant
          • Topics: 12
          • Replies: 25
          • Total: 37

          Wow, sounds complicated. 😉

          Thanks for the help, it’s greatly appreciated but I might leave it for now. 😉

          Best, Pat.

          #13834
          King PP
          Participant
            • Topics: 12
            • Replies: 25
            • Total: 37

            Hi.

            Actually I think I’ve got my head around this but how do I find out which byte of a patch dump (on a Yamaha DX21) is the byte for the different parameters?

            Thanks, Best….Pat.

            #13835
            lfo2vco
            Participant
              • Topics: 26
              • Replies: 162
              • Total: 188
              • ★★

              Yep, I am still getting my head around a lot of it.. there are example to be found panels in the Ctrlr app download, these are good for referencing examples of scripting / methods.

              Atom has written a getting started guide here: http://ctrlr.org/getting-started/

              I would recommend using the Ctrlr MIDI monitor found under the Windows Menu to see what your DX21 sends out in the form of CC or Sysex messages. You will also need the instruction manual for the DX21 which hopefully will have comprehensive tables showing you the MIDI CC and Sysex info.

              Hope this helps : )

              Here is some noise I organised into an acceptable format:
              https://soundcloud.com/lfo2vco/a-dark-crystal

              #13837
              King PP
              Participant
                • Topics: 12
                • Replies: 25
                • Total: 37

                Thanks lfo2vco, looks great!

                🙂

                #13838
                lfo2vco
                Participant
                  • Topics: 26
                  • Replies: 162
                  • Total: 188
                  • ★★

                  Good luck with the project Pat… it’s a great way to learn more about MIDI CC and Sysex. The programming side is a revelation too; if like me this is your first attempt at working with scripts / methods and the like.

                  Here is some noise I organised into an acceptable format:
                  https://soundcloud.com/lfo2vco/a-dark-crystal

                Viewing 7 posts - 1 through 7 (of 7 total)
                • The forum ‘General MIDI discussion’ is closed to new topics and replies.
                There is currently 0 users and 60 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