Puppeteer

Forum Replies Created

Viewing 20 posts - 41 through 60 (of 185 total)
  • Author
    Posts
  • in reply to: How to load panels in the VSTi? #72491
    Puppeteer
    Participant
      • Topics: 16
      • Replies: 185
      • Total: 201
      • ★★

      Your window only shows the plugins that are loaded. You need to open the editing panel of the plugin.

      This is what it looks like in Ableton

      https://1drv.ms/i/s!AizOTNL34REBmuFLtAff537l2hDpOw

      The Puppeteer
      http://godlike.com.au

      in reply to: How to load panels in the VSTi? #72489
      Puppeteer
      Participant
        • Topics: 16
        • Replies: 185
        • Total: 201
        • ★★

        Open the Ctrlr VSTi,

        In Ctrlr, there will be a menu. Open the panel from there and it will launch inside the Ctrlr VSTi

        The Puppeteer
        http://godlike.com.au

        in reply to: Needing combo box to output specfic syses strings #72415
        Puppeteer
        Participant
          • Topics: 16
          • Replies: 185
          • Total: 201
          • ★★

          In the combo box controls on the right, there is a field called OnValuechange
          You need to have the name of your method here.

          The method will pretty much be

          If combobox == value then
          SendMIDINow(sysexString1)
          elseif
          combobox == value2 then

          The Puppeteer
          http://godlike.com.au

          in reply to: Kurzweil K2500R panel #72390
          Puppeteer
          Participant
            • Topics: 16
            • Replies: 185
            • Total: 201
            • ★★

            Just one more thing. You can build an effective librarian, without editing based on the SYSEX spec that is available in the manual. All of the dumps are outlined for this, and you can just save the patch dumps for management. You can read the names of the objects directly from the SYSEX dump headers.

            I built modules for Studio Connections that did this effectively, though it was for session sync in a DAW, rather than as a full blown librarian.

            The Studio Connections GTRC modules are available from my website at http://godlike.com.au and if you open them in the GTRC editor, all of the dump requests are there, but they are “mostly” the same as the manual.

            There are a few errors in the manuals, but they are minor.

            The Puppeteer
            http://godlike.com.au

            in reply to: Kurzweil K2500R panel #72389
            Puppeteer
            Participant
              • Topics: 16
              • Replies: 185
              • Total: 201
              • ★★

              The patch data isn’t published. We have some of it at Mastering VAST. If you are actively working on this project PM me and I’ll look at letting you into our software development forum where we have a lot of documentation.

              There is some great software already that functions as a front panel editor for the K series synths made by tangent cats. I’m trying to get hold of a copy for hosting at the Mastering VAST forums.

              I’m working on a PC3/Forte panel at the moment, and have most of the data dump format reverse engineered, but the patch format is different to the K-series.

              One thing to be aware of is that the sysex dump is a bit stream, so it will need to be converted to 8 bit bytes from 7 bit sysex bytes to be useful. This only applies to the data segment of the dumps. The headers are all encoded in useful sysex bytes.

              The Puppeteer
              http://godlike.com.au

              in reply to: nil #72238
              Puppeteer
              Participant
                • Topics: 16
                • Replies: 185
                • Total: 201
                • ★★

                LUA is a bit weird in this instance. Variables are global by default, unless you specifically declare them as local.

                According to the LUA documentation you don’t need to explicitly declare a variable to use it. LUA assumes that every single possible variable is declared. nil is a special value and essentially it marks the variable as empty.

                In many cases if you try to do operations on a variable with a value nil you will generate errors, so having checks, such as the one above, or setting variables to initial values is good practice, but programmatically is not strictly required.

                The Puppeteer
                http://godlike.com.au

                in reply to: Global Midi Channel for a panel #71779
                Puppeteer
                Participant
                  • Topics: 16
                  • Replies: 185
                  • Total: 201
                  • ★★

                  You may be able to do this using the global variables available from the front panel. I tried this early on, but could never get it to work for what I wanted to do.

                  So essentially set a global variable to the MIDI channel, and then include that in the SYSEX string from the GUI editor interface, rather than using LUA for each modulator.

                  The Puppeteer
                  http://godlike.com.au

                  in reply to: panel MIDI channel change #71778
                  Puppeteer
                  Participant
                    • Topics: 16
                    • Replies: 185
                    • Total: 201
                    • ★★

                    Yes. When the MidiCh modulator value changes.

                    I’d do it something like this. Use Mch2-4 for your consecutive channels. You may need some logic in there to deal with the case where Mch is set to 13 or higher, as Mch 4 would end up as Ch 17 in that case.

                    SetMch = function(–[[ CtrlrModulator –]] mod, –[[ number –]] value)
                    — ch = panel:getModulatorByName(“MidiCh”):getModulatorValue()
                    ch = value
                    cntch = value + 1
                    Mch = 176 + ch — 176 == b0
                    Mch2 = 177 + ch
                    Mch3 = 178 + ch
                    Mch4 = 179 + ch

                    — Change all of the MIDI sliders. This changes channel for the panel as a whole.
                    panel:setPropertyInt(“panelMidiOutputChannelDevice”, cntch)

                    — Reset Last Modulator. This is specific to the panel I was making and can be
                    — ignored. I used this for MIDI data compression of some custom MIDI messages.
                    LastModulator = “None”

                    — This works for an individual controller
                    — panel:getModulatorByName(“Vol”):getMidiMessage(0):setPropertyString(“midiMessageChannel”, tostring(cntch))

                    — Refresh the panel
                    redraw = panel:getPanelEditor():getCanvas()
                    redraw:repaint()

                    end

                    The Puppeteer
                    http://godlike.com.au

                    in reply to: Global Midi Channel for a panel #71762
                    Puppeteer
                    Participant
                      • Topics: 16
                      • Replies: 185
                      • Total: 201
                      • ★★

                      It depends on how it’s programmed. If the sysex numbers are hard coded in LUA, then you’ll need to go and edit each string and replace the b0 with a variable such as midiCh, that you can set with another modulator.

                      There might be a way that this is handled in the GUI editing interface for the modulators, but from memory most of the Kiwi3P panel is programmed in LUA.

                      The Puppeteer
                      http://godlike.com.au

                      Puppeteer
                      Participant
                        • Topics: 16
                        • Replies: 185
                        • Total: 201
                        • ★★

                        You’ll need to do this with LUA, where you check if you are using a different slider and if you are send the ID message before the value change message, otherwise just send the value message.

                        I’m facing a similar problem with the Jupiter 8. I’m going to build a method that sends out the latest values as a dump at a maximum rate, probably around 100ms depending on what the processor can handle.

                        The Puppeteer
                        http://godlike.com.au

                        in reply to: Panel: General, I don't get it #71731
                        Puppeteer
                        Participant
                          • Topics: 16
                          • Replies: 185
                          • Total: 201
                          • ★★

                          Modulator, component etc refer to specific assets that are displayed on the ctrlr panel, such as a knob or slider, or picture or some other property. There are also sub-properties etc. I’ve found they tend to be a bit arbitrary, so searching other code examples is the fastest way to work out what’s what.

                          For modulators with MIDI, they can support high resolution MIDI (such as pitch bend and NRPN’s, which use 2 or more MIDI controller messages to send higher resolution information.

                          Within modulators, there is the MIDI value that sits behind it, but you can map values to different display values. For example an oscillator may display Square, Saw, Sine on the panel, but transmit 0,1,2 to the synth

                          The Puppeteer
                          http://godlike.com.au

                          in reply to: BUG? Components greyed out in editor #71656
                          Puppeteer
                          Participant
                            • Topics: 16
                            • Replies: 185
                            • Total: 201
                            • ★★

                            They may be disabled or hidden

                            The Puppeteer
                            http://godlike.com.au

                            in reply to: LFO to CC whit Lua #71655
                            Puppeteer
                            Participant
                              • Topics: 16
                              • Replies: 185
                              • Total: 201
                              • ★★

                              There are timers available in LUA. Do a search for callback functions as a lot of them use timers.

                              The Puppeteer
                              http://godlike.com.au

                              in reply to: make modulators appear when needed? #71654
                              Puppeteer
                              Participant
                                • Topics: 16
                                • Replies: 185
                                • Total: 201
                                • ★★

                                Glad you got it working

                                The –[[ stuff –]] are in line comments. They can be omitted, but are useful for documenting your code.

                                Using
                                — stuff
                                Will comment the entire line

                                The Puppeteer
                                http://godlike.com.au

                                in reply to: make modulators appear when needed? #71630
                                Puppeteer
                                Participant
                                  • Topics: 16
                                  • Replies: 185
                                  • Total: 201
                                  • ★★

                                  Line 6 should look more like this.

                                  Structure12_showCombo = function (–[[CtrlrModulator –]] mod, –[[number –]] value)

                                  The Puppeteer
                                  http://godlike.com.au

                                  in reply to: Can i draft 32bit on a 64bit computer? #71620
                                  Puppeteer
                                  Participant
                                    • Topics: 16
                                    • Replies: 185
                                    • Total: 201
                                    • ★★

                                    Run the 32 bit ctrlr program, load the panel up. Export the instance. Same with 32 bit VST’s and AU’s. You just load the appropriate ctrlr version, load up the panel and export the instance.

                                    That’s how it’s always worked for me.

                                    The Puppeteer
                                    http://godlike.com.au

                                    in reply to: make modulators appear when needed? #71619
                                    Puppeteer
                                    Participant
                                      • Topics: 16
                                      • Replies: 185
                                      • Total: 201
                                      • ★★

                                      You’ll need to do them in order.

                                      So for the Structure control, you’ll need a method in the luaModulatorValueChange parameter.

                                      Pretty much

                                      if panel:getModulatorByName(“Structure”):getValue() == 0 then

                                      panel:getModulatorByName(“Partial_Wave”):getComponent():setVisible(true)
                                      panel:getModulatorByName(“Partial_PCM”):getComponent():setVisible(false)

                                      elseif panel:getModulatorByName(“Structure”):getValue() == 1 then

                                      panel:getModulatorByName(“Partial_Wave”):getComponent():setVisible(false)
                                      panel:getModulatorByName(“Partial_PCM”):getComponent():setVisible(true)

                                      etc.

                                      Then for the two controls Partial_Wave and Partial_PCM do the same thing to determine Square/Saw or PCM1/PCM2.

                                      The Puppeteer
                                      http://godlike.com.au

                                      in reply to: make modulators appear when needed? #71584
                                      Puppeteer
                                      Participant
                                        • Topics: 16
                                        • Replies: 185
                                        • Total: 201
                                        • ★★

                                        [code]
                                        — Change Visibility
                                        panel:getModulatorByName(“SlidA”):getComponent():setVisible(true)
                                        panel:getModulatorByName(“FortSlidA”):getComponent():setVisible(false)
                                        panel:getModulatorByName(“FortSlidA”):setPropertyInt(“vstIndex”,848)
                                        panel:getModulatorByName(“SlidA”):setPropertyInt(“vstIndex”,48)
                                        [/code]

                                        The VST Index changes I used in my panel to make sure that things mapped properly to default controllers, so that moving controllers modified a slider on screen, rather than a hidden one.

                                        The Puppeteer
                                        http://godlike.com.au

                                        in reply to: OSC. String as an argument. #70447
                                        Puppeteer
                                        Participant
                                          • Topics: 16
                                          • Replies: 185
                                          • Total: 201
                                          • ★★

                                          I’d say that this might be similar to how text is sent over Sysex, where it is sent as hex either as MIDI bytes, or as a bitstream.

                                          This is how I do it for SYSEX

                                          receiveProgramName = function(sysexData)
                                          -- assume checks that data is valid PC3 program header have passed
                                          local messageSize = sysexData:getSize()
                                          local name = ""
                                          
                                          -- check received data is for same program as request
                                          local a={}
                                          for i=0,30 do -- this collects first 23 bytes and puts them into array a. This should include the program name.
                                          	a=data:getByte(i)
                                          end --for
                                          receivedProgramNum = a[5]*128+a[6] -- need to add a flag for Forte to push byte numbers up by 1
                                          -- For Debug
                                          -- console (string.format("Received Program: %s", receivedProgramNum))
                                          -- console (string.format("Sent Program: %s", nPrg))
                                          
                                          if nPrg ~= receivedProgramNum then -- this is required because PC3 returns next valid object if requested object doesn't exist
                                          	return
                                          else
                                          	if messageSize < 12 then 
                                          		return
                                          	else
                                          		j=11
                                          		while a[j] ~= 0x00 do
                                          			name = name..symbols[a[j]]
                                          			j=j+1
                                          		end --while
                                          		prgName[receivedProgramNum]=": "..name
                                          		-- update Program Received
                                          		currentProg = string.format(nPrg)
                                          		panel:getComponent("recProg"):setComponentText(currentProg)
                                          
                                          -- This needs to be moved outside of this function and called when all dumps are completed. Temporarily called though the if below
                                          -- We don't need to waste resources and time building the string every time we receive a request.
                                          		if writeListBoxStringFlag==true then
                                          			str = ""
                                          				for i = 1,4224 do
                                          				str = string.format("%s%04d%s\n", str,i,prgName)
                                          				end --for
                                          				updateListBoxes()
                                          				writeListBoxStringFlag = false
                                          		end --if 
                                          	end --if
                                          end --if
                                          
                                          end
                                          

                                          The symbols are as below. I think I pinched this from the Miniak panel, so kudos to the author.

                                          initializePanel = function()
                                          
                                          symbols = {	[0]="","|","|","|","|","|","|","|","|","|","|","|","|","|","|","|",
                                          				"|","|","|","|","|","|","|","|","|","|","|","|","|","|","|","|",
                                          				" ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/",
                                          				"0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
                                          				"@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
                                          				"P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
                                          				"'","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
                                          				"p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","|"}
                                          	symbols2 = {	[0]="","|","|","|","|","|","|","|","|","|","|","|","|","|","|","|",
                                          				"|","|","|","|","|","|","|","|","|","|","|","|","|","|","|","|",
                                          				" ","!","\"","#","$","%","&","\'","(",")","*","+",",","-",".","/",
                                          				"0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
                                          				"@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
                                          				"P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
                                          				"'","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
                                          				"p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","|"}
                                          
                                          • This reply was modified 7 years, 4 months ago by Puppeteer.
                                          • This reply was modified 7 years, 4 months ago by Puppeteer.
                                          • This reply was modified 7 years, 4 months ago by Puppeteer.
                                          • This reply was modified 7 years, 4 months ago by Puppeteer.

                                          The Puppeteer
                                          http://godlike.com.au

                                          in reply to: Is it possible to create a keyboard split with ctrlr? #70226
                                          Puppeteer
                                          Participant
                                            • Topics: 16
                                            • Replies: 185
                                            • Total: 201
                                            • ★★

                                            This shouldn’t be too hard with a LUA script

                                            The Puppeteer
                                            http://godlike.com.au

                                          Viewing 20 posts - 41 through 60 (of 185 total)
                                          Ctrlr