Forum Replies Created
-
AuthorPosts
-
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.
ok so now I am mostly using MidiInput from K1r OUT
MidiOutput to K1r INI 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.
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.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 …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.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 stuffBTW 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 3WARNING – 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 vimGET 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 filessudo 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 usesudo 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
- Atom for bringing us Ctrlr
- Archangel for tips on git timestamps
- Martin Wimpress and team for bringing us Ubuntu Mate on Pi
- 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!
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.
NiceAttachments:
You must be logged in to view attached files.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 protoWhat 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.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.
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.
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.
so I see this discussion – sorry the outcome as not very clear
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
Stevebeen 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
SteveThanks too :-).
Was looking on how to get the channel so I don’t have to hardcode it.
Saves me a lot of effort.
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 ).
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
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!
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
Stevethanks 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())
10If 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 getRangeHence a lot of for loops – which is ok but I hope this is an easier way to get the same result.
Best regards
Steve -
AuthorPosts