Forum Replies Created
-
AuthorPosts
-
Thx Atom for the clarification.
I remember I tested this without success, hence my post. Anyway I tested it again and got the following.OnClick = function(--[[ CtrlrComponent --]] comp, --[[ MouseEvent --]] event) sName= comp:getOwner():getName() console("Name"..sName) end
Error in console:
At line [-1]: [C]
Error message: No such operator definedAny further hint?
I’m trying to make a knob that displays text labels rather than numbers
Hi, not sure if it is the same but I’m doing something similar on my panels. Basically for buttons I’m using a uiImageSlider not displaying any label or value. I’m attaching to it an “On value change” method that modifies an uiLabel text somewhere in an “LCD panel” which is itself a uiGroup.
All modulators are declared in a PanelLoaded method as:
-- Main Screen lblParameter = panel:getModulatorByName("lblParameter") txtInformation = panel:getModulatorByName("txtInformation") txtCurrentValue = panel:getModulatorByName("txtCurrentValue") ...
Then, for example for Pitch, I’m using such method
-- -- Called when a modulator value changes -- @mod http://ctrlr.org/api/class_ctrlr_modulator.html -- @value new numeric value of the modulator -- Osc1Pitch_OnChange = function(--[[ CtrlrModulator --]] mod, --[[ number --]] value, --[[ number --]] source) -- No action if the panel is in bootstrap or program states if not isPanelReady() then return end -- Display current pitch Octave = math.floor(value/12) Note = math.fmod(value, 12) if Note==0 then sNote="C"..Octave end if Note==1 then sNote="C#"..Octave end if Note==2 then sNote="D"..Octave end if Note==3 then sNote="Eb"..Octave end if Note==4 then sNote="E"..Octave end if Note==5 then sNote="F"..Octave end if Note==6 then sNote="F#"..Octave end if Note==7 then sNote="G"..Octave end if Note==8 then sNote="G#"..Octave end if Note==9 then sNote="A"..Octave end if Note==10 then sNote="Bb"..Octave end if Note==11 then sNote="B"..Octave end txtCurrentValue:getComponent():setPropertyString ("uiLabelText", sNote) end
I checked the ListBox component and it is really nice with the automatic scrollbars. Exactly what I need to display the content of the banks in a limited height of a panel.
Looking to the Demo panel – Drag and Drop, I saw that there are different properties used for Drag and Drop:- Paint callback
- Called when dragging starts
- Called to check if component is interested in drag event
- Called when an item is dropped
- Called when dragging enters this component
Now, I can do something with the Listbox properties “Called when a mouse is dragged over this component”, “Called when a mouse is down over this component” but I don’t have anything to precisely secure the drop.
Any help from someone?
Atom, would it be possible to add the Drag and Drop properties to the ListBox component?
OR do you have some other suggestion?Thx to all for advice!
Hi,
thx for the good lunch exercise. In fact it is well explained and it is “just” some bitwise operations.
I build you an Excel file that you can use to input any data and get your sysex string.
I put some explanations inside it.
Hope it will help you!Attachments:
You must be logged in to view attached files.OK!
If you succeed to do fully bidirectional NRPN buttons, I’m interested for my Sub37! I tried and it doesn’t work especialy when setting NRPN out (which is a must if you want to handle all parameters (with CC, you miss half of the panel).
Once again, doing exactly the same on the Pro2 and there it works perfectly bidirectional in NRPN…
(FYI, I must also find the Pro2 sysex structure by myself, it is not public but DSI support stated it was very close to the NRPN order – I’ll see)By the way, your panel looks so cool Goodweather! Keep your work on it, because I’m sure it will be better than the official one…
Thx for your kind words Carl!
Wait for the Pro2 panel I’m working on (with great inspiration, Midi dialog “stolen with pride” from your Power08 code).
Btw, I think exactly like you. I don’t understand at all why Moog can’t produce such nice doc as DSI.Something else, I can give you the code for envelope graphs (adapted from old panel made by dasfaker but that I made fully flexible in size) OR I could code it for you directly in your Power08 panel.
The only thing you should do is to foresee an area (uiGroups) where I could put them. Either one graph with a pulldown to select which EG to display OR all graphs at once (this is better).
So, just adapt the layout of your panel, put the uiGroups and I fix the graphs.
Just let me know!We could definitively share! I’ll do that as well for my DSI Pro2 panel…
Probably in just a few weeks (2?) from now.
I want first to complete read/write dumps and actual manipulation of individual parameters.Yep, I know. Thx for also pointing this out.
I’m sure that they announced the editor and beta program when I published the picture of my editor on the Moog forum… (p6 in topic Sub 37 editor/librarian and VST plugin).
I abandoned the work due to total lack of documentation and very unstructured midi implementation (I reversed engineered it and documented it).
So I’m also waiting for the official release of the Moog editor but this is now almost 3 months ago…
I will clean my editor (remove wave display – temporary, remove tabs to only have the editor – tried to implement the sequencer but too time consuming to find the sysex structure) and publish it here.
Visually I prefer my editor over the Moog one and it gives me also the Manual explanations (not sure the Moog editor is doing that – I don’t have the beta).
I can read the Sub37 sysex files and this was my primary goal (visualization) as I prefer to manipulate the actual synth.Now I enjoy working on the DSI Pro2 panel. So clean Midi implementation and much better implemented (bi-directional handling with Ctrlr worked directly perfect while it doesn’t with the Sub37). I achieved a lot in just a few days work in comparisons to the weeks and months for the Sub37. Much more rewarding Ctrlr spoken!
DSI support guys are also reacting and answering directly on my tech support questions while I never got any reply for my Moog support inquiries.As you are in the beta program, do you know if the editor will be free or not and do you know if it is possible to read the transmitted/received sysex / NRPN messages between the Moog editor and the Sub37 (for example with MidiOX)? Thx!
Attachments:
You must be logged in to view attached files.Hi human fly, I’m busy building a panel for the DSI Pro2 but could help you with your D110. I had one long time ago…
For the Pro2 I will make a librarian.
I learned Lua with Ctrlr…
Anyway, I’m putting the priority on the Pro2 but could guide you for the D110 as a lot is repetitive.
The philosophy I’m following is:- I have a uiGroup containing different uiLabels. This represents the screen of the synth
- To each uiButton I attach an OnClick event (in fact in Ctrlr it is OnMouseDown) to adapt the screen with manual extracts and to see the actual value of the param and OnChange event to dfisplay the current value
- when this is done, you can try reading an exported sysex provided you have its structure (I add to decode everything for the Sub37 but DSI is documenting everything for the Pro2). Don’t remember for the D110 but usually Roland is also well documenting
- Then you can build a write sysex
- Then you can build the Send and Receive requests messages to the synth (by patch or full bank)
So, let’s touch base and progress together…
OK I found the panel. It was the one “hidden” in the Demo panels… I’ll try to understand how this is working…
Will combine the utils.unpackDsiData and utils.packDsiData with the methods from the Power08 panel from Carl…Hi, in which DSI Mopho panel is this visible?
I downloaded the panel but didn’t see the packing/unpacking code and edit buffer dump.
Can you give me the link (need that for my Pro2 panel)?
thx!Was quicker done than explained. Here is the Excel file…
I just used internal functions. Was not needed to perform bit operations (of course, once you have done the analysis you will have to do the bit operations in Lua inside the panel for read and write).
And something else not to disappoint you (I figured out that myself hence my switch to Pro2 panel) is the fact that knowing the structure of the file is one thing. The other thing is to know sysex commands to exchange files, to calculate the checksum…
Finaly, reading a patch file will be good to analyze and understand patches but maybe not to fully manage your synth from a PC.Attachments:
You must be logged in to view attached files.Lovely simple…
It is clear that this has been build from a write perspective and not a read one.
They are taking each parameter at a time, convert them then add the result at the end of a string.
The issue with this way of working is that you’d better not add extra values to an existing parameter…
Anyhow, I would suggest you to first identify the positions and to start with the obvious 0-127 or 0-16383 as EG Attack and co.
You can do that with the procedure I explained above (initial value – save sysex – final value – save sysex – analyse the delta).
Then I would suggest that you work in Excel for easier visualization and understanding then for conversion purposes.
You should foreseen a few cell for input (one by byte) for example 3 cells. Then you can have cells showing the bit content per 2 bits maybe (use AND and shift operations).
Foresee 2 sets of those so that you can directly compare for example initial and final value of a parameter.
If you think it is a good approach and need help with such Excel file, just tell me then we can exchange via personal messages…
The key in this analysis is visualization.Hi arcangeli, please look at my Step by step guide.
Very far from covering everything but a good start…Yep. As they are now providing a free Sub37 editor, I don’t understand what the benefit will be…
For values, on the Sub37 it is like:-- 527-29 | Amplifier EG Vel Amt NRPN 533 -- | 40 00 00 0 (0%) -- | 43 3F 3F 16383 (100%) -- 530-32 | -- 533-35 | Arp Rate NRPN 403 -- | 40 00 00 0 (2bpm) -- | 43 3F 3F 16383 (280bpm) -- 536-38 | Filter EG Attack NRPN 505 -- | 40 00 00 0 (0.1 MSec) -- | 43 3F 3F 16383 (10 Sec)
If you send me your init file then some Filter EG attack for example (0-127? 0-16383?) I could also have a look… Easier to start with a clear simple param.
To be honest, I have not grasped the difference between a Custom component and a predefined one. Is there some explanation somewhere? Otherwise, my plan was to do as you explain (with the click, I can figure out what to drag) and my question was how to get an image (or a text) to drag.
At the moment, my idea is simply to drag an empty colored rectangle. How can I draw the patch name on the fly? Easiest would have been to drag a text box rectangle…Create group and methods in new panel then Copy/Paste… You can use any editor then Copy/Paste…
Exactly.A switch is ON or OFF so basicaly, one bit is enough. The manufacturer can thus combine several ones into one byte. The point is that very different parameters are mixed and this is confusing. For example the ON/OFF of Osc1, Osc2, Sub1, Noise is spread on different bytes.
Now that I decoded everything it is indeed easy to read and extract the values but it has been quite time consuming to figure out everything one parameter position at a time.
Example:-- 059 | Misc switches 40 + Sum of switches -- | 00 Off -- | 01 Filter EG Exp Attack NRPN 520 -- | 02 Filter EG Latch ON NRPN 517 -- | 04 Filter EG Loop NRPN 516 -- | 08 Filter EG Multi Trig NRPN 513 -- 060 | Misc switches Sum of switches -- | 00 Off -- | 02 Arp Back Forth NRPN 406 -- | 04 Arp Invert NRPN 408 -- | 08 Arp Latch NRPN 411 -- | 10 Arp ON NRPN 410 -- | 20 Arp Sync NRPN 404 -- 061 | Misc switches Sum of switches -- | 00 Off -- | 01 Amplifier EG Exp Attack NRPN 520 -- | 02 Amplifier EG Latch ON NRPN 539 -- | 04 Amplifier EG Loop NRPN 538 -- | 08 Amplifier EG Multi Trig NRPN 535 -- | 10 Amplifier EG Reset NRPN 536 -- | 20 Amplifier EG Sync NRPN 537 -- 062 | Misc switches 40 + Sum of switches -- | 00 Off -- | 01 OSC KB Reset NRPN 482 -- | 02 OSC 1 On NRPN 490 -- | 04 OSC Duo Mode NRPN 486 -- | 08 OSC Hard Sync NRPN 481 -- 063 | Misc switches Sum of switches -- | 00 Off -- | 01 Glide ON On NRPN 422 -- | 02 MOD 1 KB Reset NRPN 426 -- | 04 MOD 1 Sync NRPN 425 -- | 08 MOD 2 KB Reset NRPN 451 -- | 10 MOD 2 Sync NRPN 450 -- | 20 Noise On NRPN 495 -- 064 | Misc switches Sum of switches -- | 00 Off -- | 01 Filter EG Reset NRPN 514 -- | 02 Filter EG Sync NRPN 515 -- | 08 Mixer Fdbk / Ext In On NRPN 498 -- | 10 Glide Gated NRPN 420 -- | 20 Glide Legato NRPN 421
- This reply was modified 8 years, 2 months ago by goodweather.
Hi Carl,
thx again for your P08 panel which is a great source of inspiration and from which I will use some stuff for my Pro2 panel!
About the Sub37 panel, I enjoyed doing it but stopped due to complete lack of documentation and the amount of time needed to search. I have the editor ready but started the sequencer in a second tab hoping to find things by myself but I don’t succeed.
I will thus clean my work, maybe add a few things, reduce to one tab only or just remove the tabs and publish the panel.Way to decode: only the hard and time consuming way but I figured out several things.
- You need MidiOX to get single programs sysex files from the synth
- You need HxD (or similar) to be able to compare sysex files together and identify what is changing (in HxD there is a File compare functionality). This is needed in order to identify the value and position of each parameter
- You need to build a reference patch with as much as possible controls to 0 position or some neutral one if no 0 available (for example, wave set to left position… Write down on paper what is different than 0; Take also the menus into account. Save and keep patch in the synth. Store sysex file to your PC and call it “Init preset” or “Reference” or whatever.
- Then change one button to max position. Export sysex file to PC with name Mod1 – Pitch level 10 for example. Reset to 0 and do the same for each single button and position. Don’t forget to reset to 0 position. Most probably that you will do your buttons several times… Better to export just a few at a time (by section for example, Mod1, Mod2, Osc, Mixer…) then make the comparison and document
- Compare modified files with your reference and document the position and number of impacted hexa positions in Ctrlr (as you did in your P08 panel – I used the same syntax)
For banks and preset saves, the Sub37 is making a calculation and using offset 05 and 06 as
-- 05 | Bank number -- | 00 Bank 1-8 OR for Buffer dump -- | 01 Bank 9-16 -- 06 | Preset number -- | 00 for Buffer Dump -- | 01 to 7F for Preset Dump
Basically, there are only 2 banks of 128 presets. I have the code to convert. Maybe that the SP is doing the same.
For patch name, it is tricky, 2 characters = 3 bytes from offset 23 till 58. I also decoded that (took me a few days to understand – made several dumps with just a few characters and compared).
For other params, the same hexa position can contain very different switches (not clean at all) and are the sum of the values of several switches (crazy).
They also have a checksum calculation that I didn’t figure out how to calculate.
So, a complete different situation than the nice and ordered documentation from DSI! If after all that you still want to dig more into it, I can send you my panel as-is if it can help…
Can you put an example of code? Thx. I’ll include that in the Step by Step guide…
-
AuthorPosts