shooking

Forum Replies Created

Viewing 20 posts - 21 through 40 (of 60 total)
  • Author
    Posts
  • in reply to: Ctrlr vsti sends midi messages twice #118043
    shooking
    Blocked
      • Topics: 14
      • Replies: 60
      • Total: 74

      I dont want to be “that guy” but it does hurt on my setup at least.
      I can write the Input and Output to None most of the time.
      But Controller channel will crash panel – which is nasty but of course I am trying to reset the Midi because of some overflow I guess.

      I would love a “drain input, controller, output” method instead.

      I am relatively careful to keep in and out disconnected (dont want midi tail chasing) – but especially on my K1r I get hangs. Sometimes if I am patient the midi recovers.
      More often than not I have to stop Ctrlr and start again. Sometimes I have to reboot the whole PC>

      I thought about putting MidiYoke on it to try to debug but not sure that plays nicely with Windows 10.
      If _could_ be my Midex8 since that is “best efforts” driver from Steinberg. I will make time to trial this with other interfaces (no not the cheap Far Eastern ones ..dont be silly – they dont even have optocouplers in them most of the time!!).

      I have to replace the battery in my K1r anyhow so I will use that time to repipe and retest.

      In the meantime time the best I can do is use above to reconnect input and output – controller kills Ctrlr when I am in a hang.

      in reply to: Any documentation on midi input/controller/output #118042
      shooking
      Blocked
        • Topics: 14
        • Replies: 60
        • Total: 74

        ok so now I am mostly using MidiInput from K1r OUT
        MidiOutput to K1r IN

        I leave the Controller for using a keyboard – but even in that mode I see the midi In but no notes sounds.

        So I guess I have to echo the MidiIn (from the Controller channel) to the Midi Out such that the K1r plays notes?

        In effect the on screen keyboards are doing this.

        If I want the Controller channel to do this I have to tick “Midi Thru” which is Sending input to output. And that so ISNT what a midi Thru is!!! It’s a copy of Midi In that you chain to Midi In of next synth.

        If the above model is “sound” (pardon the pun) then it is the Midi In channel and Midi Out channel that I have to read and hence send Bch rather than currently hard coded B0.

        in reply to: Why is a modal box similar to The Terminator? #118041
        shooking
        Blocked
          • Topics: 14
          • Replies: 60
          • Total: 74

          ok so I see some post marked as solved – and this is .. how to modify it?
          Do I need to do it as the starter? If so, help! I dont see obvious way to achieve it.

          in reply to: LCD character mappings #118023
          shooking
          Blocked
            • Topics: 14
            • Replies: 60
            • Total: 74

            man I beginning not to like this WordPress — I clicked on reply – turns out I hit report!! Well it looks the freaking same .. and there’s no obvious cancel.. Refreshed the page

            Sure I know what I need to do .. but I am unsure of two things

            K1 says valid chars are (and it even gets the order wrong in my printed manual) are

            ” ” ! ” # $ % & ‘ ( ) * + / (a middle horizonal line) . /
            0 1 2 3 4 5 6 7 8 9 0
            : ; < = > ? @
            A .. Z
            [ a yen character ]
            ^ _ ` a .. z { | } -> and <- (which are wrong way around) so that's not 127 chars. I can hack my program to generate the 0 .. 127 and "observe" the output so this get me British Ascii -> Kawai Japanese/US chars
            and should be reversable.

            I am so sure I found some panel or some Novation mapping for a Korg or Roland that was supposed to be the same.

            Your “kill the modal” trick is very powerful.

            Labels can display # but I not reliably got combo to do or LCD I guess because some of these chars are used to represent a delimiter

            Time for a BBQ and much beer in locked down UK .. I do hope as many people round the world that can stay healthy and have fun are able to do so.

            Best regards
            Steve H
            Oh and time for some bass playing on my Steinberger copy while I flip burgers …

            in reply to: Why is a modal box similar to The Terminator? #118021
            shooking
            Blocked
              • Topics: 14
              • Replies: 60
              • Total: 74

              I thought one of us was having a senior moment – but infact you were lucid as ever 🙂
              So yes I should have just tried modalWindow:setVisible (false)

              Now to change my previous combo boxes to LCD’s backed by model choice.
              And I spelt it wrong baiter rather than beta 🙂

              Attachments:
              You must be logged in to view attached files.
              in reply to: Roland Checksum Calculator #118020
              shooking
              Blocked
                • Topics: 14
                • Replies: 60
                • Total: 74

                and NOW I see why you directed my “Terminator” question here 🙂
                So modalWindow:setVisible (false) is the key – see I used visible before and it doesnt kill a window BUT I guess in the context of modal it does 🙂

                Thanks again – now to work on the charset mapping and change some combo to an LCD and I am almost done.
                Great stuff

                in reply to: Raspberry Pi Build #117991
                shooking
                Blocked
                  • Topics: 14
                  • Replies: 60
                  • Total: 74

                  BTW I thought I made a decent attempt to write up how I build on Raspberry Pi 3??

                  [solved] Problem compiling on ArchLinux ARM (Raspberry Pi 2)

                  USE UBUNTU MATE ON PI

                  (And if you get this to build please consider tipping Martin Wimpress for the hard work his team done on Ubuntu Mate!)
                  UBUNTU MATE RPI2 or 3

                  WARNING – ALAS – The build works but freezes if I try to load a panel.
                  I will be debugging this.

                  0 – Get yourself the fasted card you can buy (see why later)
                  You will need about 3GB of extra space for source, build and swap
                  1 – I installed Ubuntu Mate
                  Will try with Raspbian IF I get time.
                  2 – I updated/upgraded
                  3 – I resized the partitions
                  4 – I installed git and vim

                  GET THE LATEST CODE

                  5 – get the archive

                  CTRLR_ROOT=~/Documents/Software/ctrlr
                  mkdir -p $(CTRLR_ROOT)
                  cd ..
                  git clone https://github.com/RomanKubiak/ctrlr.git
                  

                  INSTALL THE PACKAGES

                  In the latest revision of post-commit script (ctrlr/Scripts/post-commit)

                  UBUNTU_PACKAGES="g++ libxrandr-dev libxinerama-dev libxcursor-dev \
                  libasound2-dev binutils-dev \
                  libfreetype6-dev xorg-dev \
                  libgl1-mesa-dev libglapi-mesa \
                  libxrandr-dev libudev-dev libgl1-mesa-dev"

                  so we need to ensure we have these packages

                  for pack in g++ \
                  libxrandr-dev \
                  libxinerama-dev \
                  libxcursor-dev \
                  libasound2-dev \
                  binutils-dev \
                  libfreetype6-dev \
                  xorg-dev \
                  libgl1-mesa-dev \
                  libglapi-mesa \
                  libudev-dev
                  do
                  sudo apt-get install $pack
                  done

                  SET CODEBASE BACK TO WHEN LINUX BUILD CLEAN – WINDOWS DEV CONTINUES TO WORK

                  6 – grab a timestamped version of the code (thanks to Archangel for hints)

                  cd ctrlr
                  git checkout 3d8651d991d377f7b167806c39c47a3121fe9536

                  ADD SWAP TO YOUR RASPBERRY PI – IT WILL NOT COMPILE WITHOUT THIS

                  7 – dont forget to add a swap because the compiler needs more than 1gb

                  sudo dd if=/dev/zero of=/root/myswapfile bs=1M count=2048
                  sudo chmod 600 /root/myswapfile
                  sudo mkswap /root/myswapfile
                  
                  sudo swapon /root/myswapfile

                  NOTE: add back the swap after reboot. You can probably store this in fstab somewhere?

                  8 – MODIFY THE BUILD SCRIPT

                  NOTE: the post-commit calls out to build.sh and Makefile.
                  There are two build.sh (relative to your ctrlr root):

                  cd $CTRLR_ROOT
                  find . -name "build.sh" -print
                  ./Builds/Generated/Linux/VST/build.sh
                  ./Builds/Generated/Linux/Standalone/build.sh

                  and 3 Makefiles – of which ingore the “lo” one

                  find . -name "Makefile" -print
                  ./Source/Misc/include/lo/Makefile
                  ./Builds/Generated/Linux/VST/Makefile
                  ./Builds/Generated/Linux/Standalone/Makefile

                  If you simply run it from this point, it will fail as below:

                  $(CTRLR_ROOT)/Scripts/post-commit
                  
                  ...
                   inflating: boost/lambda/casts.hpp
                    inflating: boost/lambda/control_structures.hpp
                    inflating: boost/lambda/switch.hpp
                    inflating: boost/lambda/lambda.hpp
                  CTRLR: Build Standalone
                  CTRLR[linux]: Building for arm, JOBS 1
                  CTRLR[linux]: Compile PCH
                  In file included from ../../../../Source/Core/stdafx.h:79:0:
                  ../../../Standalone/JuceLibraryCode/JuceHeader.h:18:49: fatal error: juce_audio_basics/juce_audio_basics.h: No such file or directory
                   #include <juce_audio_basics/juce_audio_basics.h>

                  ^
                  compilation terminated.

                  WHY DOES THE BUILD FAIL?

                  And it turns out there is a bug in the make file. We need to fix
                  some paths for includes etc.

                  — ADD IN Juce/modules to BOTH build.sh (see code snippet below)

                  we had to change build.sh as follows:

                  if [ "$1" == "-f" ]; then
                          echo "CTRLR[linux]: Compile PCH"
                          g++  -std=c++0x -D "LINUX=1" -D "NDEBUG=1" -D "JUCE_FORCE_DEBUG=0" -D "CTRLR_NIGHTLY=1" -D "JucePlugin_Build_Standalone" -D "LUA_USE_LINUX" -D "_LINUX=1" -D "JUCER_LINUX_MAKE_CC96CACF=1" -I /usr/include -I /usr/include/freetype2 -I ../../../Standalone/JuceLibraryCode -I../../../../Juce/modules -I ../../../../Boost -I ../../../../Source/Lua/luabind -I ../../../../Source/Misc -I ../../../../Source/MIDI -I ../../../../Source -I ../../../../Source/UIComponents -I ../../../../Source/Core -I ../../../../Source/Plugin -I ../../../../Source/Application -I ../../../../Source/Lua -I ../../../../Source/Lua/lua -march=native -Os -fpermissive -o "../../../../Source/Core/stdafx.h.gch" -c "../../../../Source/Core/stdafx.h"
                  else
                  

                  WAIT FOR IT – SOME LIBRARIES NEED TO BE COPIED
                  SOME NEED TO BE INSTALLED

                  ON UBUNTU MATE the correct naming is arm.
                  FIND some files

                  sudo find / -name libbfd.a -print
                  find: ‘./run/user/1000/gvfs’: Permission denied
                  ./usr/lib/arm-linux-gnueabihf/libbfd.a

                  hence

                  cp /usr/lib/arm-linux-gnueabihf/libbfd.a $(CTRLR_ROOT)/Builds/Generated/Linux/Standalone/libbfd-arm.a
                  cp /usr/lib/arm-linux-gnueabihf/libbfd.a $(CTRLR_ROOT)/Builds/Generated/Linux/VST/libbfd-arm.a

                  CLEAN UP SOME PACKAGES

                  sudo apt autoremove

                  GOOGLE to find where libiberty comes from

                  libiberty-dev
                  So we use

                  sudo apt-get install libiberty-dev
                  sudo find / -name 'libiberty*' -print
                  find: ‘./run/user/1000/gvfs’: Permission denied
                  ./var/lib/dpkg/info/libiberty-dev:armhf.list
                  ./var/lib/dpkg/info/libiberty-dev:armhf.md5sums
                  ./var/cache/apt/archives/libiberty-dev_20160215-1_armhf.deb
                  ./usr/lib/arm-linux-gnueabihf/libiberty.a
                  ./usr/include/libiberty
                  ./usr/include/libiberty/libiberty.h
                  
                  cp /usr/lib/arm-linux-gnueabihf/libiberty.a $(CTRLR_ROOT)/Builds/Generated/Linux/Standalone/libiberty-arm.a
                  cp /usr/lib/arm-linux-gnueabihf/libiberty.a $(CTRLR_ROOT)/Builds/Generated/Linux/VST/libiberty-arm.a

                  And with the above

                  
                  cd $(CTRLR_ROOT)/Scripts
                  ./post-commit

                  and it will build in about 5 hours for standalone. VST fails at the moment

                  CTRLR[linux]: Building for arm, JOBS 1
                  CTRLR[linux]: Compile PCH
                  CTRLR[linux]: Remove the shared source, for main() compatibility
                  CTRLR[linux]: Build now
                  
                  Compiling CtrlrOSC.cpp
                  Compiling CtrlrUtilitiesGUI.cpp
                  Compiling CtrlrSysexProcessorOwned.cpp
                  Compiling CtrlrFontManager.cpp
                  Compiling CtrlrIDManager.cpp
                  Compiling CtrlrLog.cpp
                  Compiling CtrlrManager.cpp
                  Compiling CtrlrManagerInstance.cpp
                  ...
                  Compiling BinaryData.cpp
                  Compiling juce_audio_basics.cpp
                  Compiling juce_audio_devices.cpp
                  Compiling juce_audio_formats.cpp
                  Compiling juce_audio_processors.cpp
                  Compiling juce_audio_utils.cpp
                  Compiling juce_core.cpp
                  Compiling juce_cryptography.cpp
                  Compiling juce_data_structures.cpp
                  Compiling juce_events.cpp
                  Compiling juce_graphics.cpp
                  Compiling juce_gui_basics.cpp
                  Compiling juce_gui_extra.cpp
                  Compiling juce_opengl.cpp
                  Linking Ctrlr_Standalone
                  CTRLR[linux]: build succeeded

                  NOTE: DONT PANIC – You poor Pi will freeze … many times.
                  It is paging and swapping.
                  The PCH phase takes about 15 mins.
                  Then each file takes about 1 minutes 20 seconds on a Pi3.
                  Do the math – N files x 4/3 ~

                  shooking@CharPi:~/Documents/Software/ctrlr/Builds/Generated/Linux/Standalone$ grep "\$(OBJDIR)" Makefile | grep -v mkdir | grep -v "\.\." | wc -l
                  224

                  (224-3) x 4/3 ~ 222 x 4 / 3 = 74 x 4 = 296 minutes or around 5 hours.

                  PLEASE use the fastest uSD card you can get. Mine is a Samsung EVO.
                  £22 for 64GB. With a class 10 I would imagine the build could take a day!
                  BETTER if you can use a SSD drive.
                  The MS 2015 build is almost instantaneous in comparison.
                  And that is with 2GB RAM, the other 4GB used on an Ubuntu VM that allowed me to get the Linux build working.

                  ALAS – The build works but freezes if I try to load a panel.
                  I will be debugging this.

                  THANKS to

                  1. Atom for bringing us Ctrlr
                  2. Archangel for tips on git timestamps
                  3. Martin Wimpress and team for bringing us Ubuntu Mate on Pi
                  4. My kleiner Tochter Charlotte for checking / debugging build.sh with me

                  Anyone who can get past the lack of Open — would appreciate some hints.

                  • This reply was modified 4 years ago by shooking. Reason: didnt know how the link quote worked - it didnt!
                  in reply to: How I can change the Visible Name of uiSlider? #117987
                  shooking
                  Blocked
                    • Topics: 14
                    • Replies: 60
                    • Total: 74

                    me neither 🙂

                    Can you post a before and after pic. I can only find what I need by looking at Utility

                    BTW I forgot about Doxygen – and then I recalled.
                    Nice

                    Attachments:
                    You must be logged in to view attached files.
                    in reply to: How I can change the Visible Name of uiSlider? #117973
                    shooking
                    Blocked
                      • Topics: 14
                      • Replies: 60
                      • Total: 74

                      So I found all I am doing is

                      
                              m:getComponent():setPropertyString("uiLabelText", getPatchName)
                      

                      How does one find the signature for this setPropertyString?
                      OP was using false
                      you use true
                      I dont do either and it works 🙂

                      So my guess is defaults are true?
                      Trouble with defaults is the API is allowed to change that.
                      Would be great to find the proto

                      What I have been doing until now is

                      
                      shooking@MUSICPC /cygdrive/c/Users/shooking/Documents/Synths/ctrlr
                      $ grep -R setPropertyString *
                      Source/Lua/CtrlrLuaObject.cpp:void CtrlrLuaObject::setPropertyString(const String &propertyName, const String &value)
                      Source/Lua/CtrlrLuaObject.cpp:                  .def("setPropertyString", &CtrlrLuaObject::setPropertyString)
                      Source/Lua/CtrlrLuaObject.h:            virtual void setPropertyString(const String &propertyName, const String &value);
                      
                      vim Source/Lua/CtrlrLuaObject.h
                      /setProperty
                                      virtual void setProperty (const Identifier &propertyName, const var &newValue, const bool isUndoable=false)=0;
                      
                                              @see CtrlrPanel^M
                                              @see CtrlrModulator^M
                                              @see CtrlrComponent^M
                                              @see CtrlrPanelEditor^M
                                              @see CtrlrMidiMessage^M
                      
                      

                      So I take it that by default isUndoable is false … so when I dont set it, or OP sets it we are doing the same thing?

                      What I was suggesting I do:

                      select an object you want to refer to (in my case a single0N LCD)

                      You should see General, Resource, Utility as tabs on right hand top of the screen.
                      Click the Utility
                      find the thing you want to manipulate (this is what the setProperty will use rather than what the GUI says).
                      To me you calls look good except I dont specify the false.

                      One thing you notice I also use a lot is modulatorCustomIndex.

                      So in my case it is 119
                      ah wait !!! You want a uiSliderVisibleName right?

                      Well I have one of these

                      I did my trick, put the code in a temp file, then look for properties

                      
                      
                      shooking@MUSICPC /cygdrive/c/Users/shooking/Documents/Synths/ctrlr
                      $ grep -i visible pants
                                   componentLabelHeight="14" componentLabelWidth="0" componentLabelVisible="1"
                                   componentLabelFont="<Sans-Serif>;12;0;0;0;0;1;3" componentVisibleName="Volume"
                      
                      shooking@MUSICPC /cygdrive/c/Users/shooking/Documents/Synths/ctrlr
                      $
                      
                      And from a LUA console
                      
                      >>> mv = panel:getModulatorByName("MainVolume")
                      
                      >>> mv:getComponent():setProperty("componentVisibleName", "pantVolume")
                      ERROR: No matching overload found, candidates:
                      void setProperty(CtrlrLuaObject&,Identifier const&,var const&,bool)
                      -- so looks like the default doesnt work in this mode?
                      >>> mv:getComponent():setProperty("componentVisibleName", "pantsVolume", true)
                      '
                      >>> console(""..L(mv:getComponent():getProperty("componentVisibleName")))
                      pantsVolume
                      

                      There living proof I do change my underwear – even it only in a virtual world.

                      Simply to add to what dnaldoog said – this is the odd way I reverse engineer Ctrlr APIs … I would love if there was a list somewhere that I have simply overlooked.

                      Attachments:
                      You must be logged in to view attached files.
                      in reply to: How I can change the Visible Name of uiSlider? #117948
                      shooking
                      Blocked
                        • Topics: 14
                        • Replies: 60
                        • Total: 74

                        Oh and not sure about the 3rd param. I am away from Ctrlr at the moment but I recall get is 0 params and some set is 4 params. Never clear how to find the exact prototypes. What/how doesnt always give full picture. If you dont get any answers tonight I will look at my panel in the morning since I got those stuff working quite well recently.

                        in reply to: How I can change the Visible Name of uiSlider? #117945
                        shooking
                        Blocked
                          • Topics: 14
                          • Replies: 60
                          • Total: 74

                          The trick I use is to look at the 3rd tab on right of the modulator you want to manipulate .. the one under Resources.

                          The XML in there has the real names. Often they are different to the GUI names – caught me out on more than one occasion.

                          in reply to: Any documentation on midi input/controller/output #117913
                          shooking
                          Blocked
                            • Topics: 14
                            • Replies: 60
                            • Total: 74

                            Well firstly I know how to make Lua change the channel. What I am not clear about… which channel :-).

                            Hence I want to know move about how Ctrl intercepts midi.

                            I can see if I turn Midi Controller to None then I send midi out but dont see the in. It looks like Ctrlr channel merges midi in from nominated input device and ctrl …

                            Some sort of diagram of how Ctrl interacts with the Midi In, controller channel and midi out would be appreciated.

                            I will debut some more tomorrow

                            Docs link would be cool.

                            in reply to: Any documentation on midi input/controller/output #117906
                            shooking
                            Blocked
                              • Topics: 14
                              • Replies: 60
                              • Total: 74

                              so I see this discussion – sorry the outcome as not very clear

                              Midi Controller setting in Midi menu

                              I just did some experimentation here with Midi Monitor and various connections – and realized I was colour confused – the GREEN is the midi in 🙂

                              
                              I sure hope when I put this in code block its monospaced!!
                              No preview on this forum??
                              
                              UF80 [out] ---> Ctrlr IN
                                              Ctrlr CONTROLLER <----    [out]  K1r
                                              [Ctrlr seems to midi merge IN and CONTROLLER] ????
                                              Ctrlr OUT ----------->    [in]   K1r
                              
                              

                              But in the above, if it is correct interpretion of what the settings do, there is no Ctrl In -> Ctrl Out.
                              SURE you can set it in the options but it seems a generically bad idea else you chase midi messages
                              I mean you shouldnt because UF80 is a dumb controller … just output
                              K1r is good midi spec… Thru is clone of In, and In and out are not connected.

                              But Ctrlr, if connected Input to Output device crashes more often than not.

                              So given I want CTRLR to assist the K1r it seems I want to determine K1r’s channel from Ctrl’s Midi IN and Midi OUT.

                              And if I want support midi input from Midi In (to the Ctrl) to sound on the Midi Out then I have to “make it so” in my handleMidiIn method?

                              Is that about the size of it?

                              Best regards
                              Steve

                              in reply to: The “old chestnut” throttling Midi transfer #117903
                              shooking
                              Blocked
                                • Topics: 14
                                • Replies: 60
                                • Total: 74

                                been trying to reply for ages – wordpress was playing silly bugger games!

                                I call you out for Kudos @ 27 seconds in to my YT vid – https://www.youtube.com/watch?v=pO5xzGVCIoA&feature=youtu.be

                                Your suggestion sure makes my panel behave like a 125 old British train (when they worked!)

                                thanks again
                                Steve

                                in reply to: Ctrlr Menu & LUA #117900
                                shooking
                                Blocked
                                  • Topics: 14
                                  • Replies: 60
                                  • Total: 74

                                  Thanks too :-).

                                  Was looking on how to get the channel so I don’t have to hardcode it.

                                  Saves me a lot of effort.

                                  in reply to: Raspberry Pi Build #117891
                                  shooking
                                  Blocked
                                    • Topics: 14
                                    • Replies: 60
                                    • Total: 74

                                    He I also replied to that thread – I have Ctlr 5.4 working on my Pi3. A mate of mine loaned me his touchscreen and I had a lot of fun with 800 X 600 panels 🙂

                                    I thought I did a decent job of writing it up. I could build direct on Pi but the 1Gb ram plus page and swap was sloooow. I should retry on a 4gb

                                    But instead I configure cross compiler on an Ubuntu and build it them sftp the result to my Pi.

                                    I couldn’t work out how to help create the Cmake files (me old school make or even just shell scripts ).

                                    in reply to: getRange … how does it work? #117887
                                    shooking
                                    Blocked
                                      • Topics: 14
                                      • Replies: 60
                                      • Total: 74

                                      Ok a lightbulb moment I think!

                                      
                                              -- first 8 bytes and we dont and the F7 and index is a 0 not 1
                                              for lp=0, size - 8 - 1 - 1 do
                                                  g_singlePatch[patch]:setByte(lp, d:getByte(lp+8))
                                              end
                                      --[[
                                              g_singlePatch[patch] = d:getRange(8,size -1 - 1)
                                      --]]
                                              process_one_single( patch, g_singlePatch[patch], g_singlePatch[patch]:getSize() )
                                      
                                              console("now trying with copyTo")
                                      
                                              d:copyTo(g_singlePatch[patch], 8, size - 2)
                                      

                                      so looks like I cracked it …

                                      d is the source
                                      g_singlePatch[patch] is address of the destination.

                                      I want to take from 8th byte for size – 2

                                      Seems to work … thanks again for all the tips

                                      in reply to: getRange … how does it work? #117886
                                      shooking
                                      Blocked
                                        • Topics: 14
                                        • Replies: 60
                                        • Total: 74

                                        Excellent work!!

                                        
                                                local Pants = ""
                                        --[[        for lp = 0, 9 do
                                                    Pants = Pants..string.format("%c", d:getByte(lp))
                                                end
                                        --]]
                                                Pants = d:getRange(0, 9)
                                        
                                                getPatchName = getPatchName..L(d:getRange(0,9):toString())
                                        

                                        so I can now replace my for loops – really appreciate the help.

                                        Still not quite geeting the copyTo semantics. But thanks again!

                                        in reply to: Is it possible to get a “-” in an LCD display? #117841
                                        shooking
                                        Blocked
                                          • Topics: 14
                                          • Replies: 60
                                          • Total: 74

                                          Man I am not getting the forum updates even if I subscribe 🙁

                                          I worked out I had already done this on my K1r single panel.
                                          One has to add a format string and choose font 5 which equates to Digit.
                                          Then I can display all the iA-1 goodies.

                                          I am finding it too easy to hit crashes in Ctrlr at the moment but thanks to some helpful hints here this is getting less frequent.

                                          Best regards
                                          Steve

                                          in reply to: getRange … how does it work? #117840
                                          shooking
                                          Blocked
                                            • Topics: 14
                                            • Replies: 60
                                            • Total: 74

                                            thanks for the hints.

                                            I suspect I am not getting something quite fundamental here.

                                            So I have create my own {} arrays.

                                            
                                            --
                                            --  32 slots for multis
                                            --  deliberately starting from 0 - could start from 64? Examine sysex and make decision
                                            --  recall the number == patch, so no need to store header nor F7
                                                g_multiPatch = {}
                                                -- let store it as 32
                                                -- note 76 data -- strip of Sysex Header and F7
                                                MULTI_SYSEX_STORAGE_SIZE = 76
                                                for i = 0, 31 do
                                                    g_multiPatch = CtrlrLuaMemoryBlock(MULTI_SYSEX_STORAGE_SIZE, true)
                                                end
                                            
                                            what(g_multiPatch[0])
                                            >>> what(g_multiPatch[0])
                                            Object type [CtrlrLuaMemoryBlock]
                                            -----------------------------------------------------------------
                                            
                                            Members:
                                            	                       getSize:	function
                                            	                        __init:	function
                                            	                 removeSection:	function
                                            	                        insert:	function
                                            	             loadFromHexString:	function
                                            	                   toHexString:	function
                                            	                      toString:	function
                                            	                      getRange:	function
                                            	                       getByte:	function
                                            	                  toSafeString:	function
                                            	                      copyFrom:	function
                                            	                        append:	function
                                            	                        copyTo:	function
                                            	                       setByte:	function
                                            
                                            Attributes:
                                            
                                            -----------------------------------------------------------------
                                            
                                            

                                            I interpret this as I have created some CtrlrLuaMemoryBlock.
                                            And I can use the methods on it.

                                            So let’ me grab a block of data from it – first 10 byte 0-9 is the name

                                            
                                            mydat = g_multiPatch[0]:getRange(0,10)
                                            
                                            >>> for i=0, 9 do console(""..mydat:getByte(i)) end
                                            83
                                            89
                                            77
                                            80
                                            72
                                            79
                                            78
                                            73
                                            67
                                            32
                                            
                                            name=""
                                            
                                                for i = 0, 9 do
                                                    name = name..string.format("%c", mydat:getByte(i))
                                                end console(string.format("%.10s", name))
                                            SYMPHONIC
                                            

                                            Great – SYMPHONIC is the name.

                                            But I want to avoid looping – ie myData has 10 bytes
                                            So how can I convert it to a string?

                                            Goodweather used toHexString(1).
                                            myDat is apparently a CtrlrLuaMemoryBlock

                                            >>> console(“”..mydat:getSize())
                                            10

                                            If I try
                                            console(“”..mydat:toHexString())

                                            complaint about no method

                                            console(“”..mydat:toHexString(1))

                                            crashes Ctrl. I am guessing because there is no \0?

                                            Fundamentally I want to be able to memmove like in C, then use format like %.10s to read to chars.
                                            But I am not understanding how to get methods to work on my getRange

                                            Hence a lot of for loops – which is ok but I hope this is an easier way to get the same result.

                                            Best regards
                                            Steve

                                          Viewing 20 posts - 21 through 40 (of 60 total)
                                          Ctrlr