Moog Sub37 panel

Home Forums General Panels, Components, Macros Moog Sub37 panel

Viewing 20 posts - 1 through 20 (of 38 total)
  • Author
    Posts
  • #50910
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Hi,
    I’m new to Ctrlr and found it by looking for making a librarian for my new Moog Sub37. Glad I don’t need to build this from scratch as I did in C and Assembler 25 years ago for my DX7 in DOS!
    So, first of all, thx Atom for your great work of making Ctrlr!

    Looking around, I found the nice Moog Minitaur panel made by Stoner and obviously it will be my source for the Sub37 panel. Thx to you Stoner! Not needed to do a lot of things by myself.

    I just started with it and I guess it will take quite some time but I’ll keep you informed and will upload something as soon as it becomes viable even if not complete.

    At the same time, as there is no manual for Ctrlr and that I’m new with this, I decided to document the Step by step construction of this panel and I’ll post that under the News and Releases section of the forum.

    Here is a first picture of the panel (not so much to see…).

    Greetings to all!

    Attachments:
    You must be logged in to view attached files.
    #51047
    atomatom
    Participant
    • Topics: 157
    • Replies: 2943
    • Total: 3100
    • ★★★★★

    You need to be careful with the name Moog if you plan to use it anywhere. I got an email for Moog asking me no to use their company name in Ctrlr panels. So i stopped doing that thus i used some other names like “Mougue – Voyeur” etc.

    #51054
    jasefosjasefos
    Participant
    • Topics: 13
    • Replies: 76
    • Total: 89

    m00g perhaps?
    ; )

    • This reply was modified 5 years, 3 months ago by jasefosjasefos.

    --> Music: www.soundcloud.com/jasefos
    --> DAW: OSX10.10.5 with Live 9.6 x64, UA Apollo Quad
    --> Controllers: Push 2, KeyLab61, Maschine mk2, MCU Pro, 2xMCU-Ext
    --> Synths: Cyclone Bass Bot TT303, ESQ1, MKS80/MPG80, Matrix 6R, Matrix1000, Mopho, 05RW, DW8000, Virus TI Polar, Voyager Electric Blue, MiniBrute, AN1X, K5000s, FIZMO, ASR10 rack, Kenton ProSolo (controls Sequential Pro-One, Yamaha CS15), Prophecy, EMX1, MonoTribe, SP1200, DX100, KARP Odyssey

    #51057
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Thx for the tips guys!
    Actually, it doesn’t appear on the panel itself.
    I suppose it is OK to mention the name of the Ctrlr panel as “Moog Sub37 panel”. Otherwise I’ll call it “Sub37 panel” only.
    And I can remove the Moog wording from the Ctrlr documentation I’m busy to write.
    Let me know what do you think, Atom. We need to respect the synthmakers brands 🙂

    #51584
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Hi Atom, I have now built a v1.0 Step by Step guide for building a panel (I’ll publish it as PDF in the coming days under Releases) and have a few buttons with CC messages ready. Output to Midi monitor console is fine (changing Amp Attack time is CC28 giving as message for example B0 1C 37 (for 55 as value).
    Output device is Moog Sub 37 and recognized (got confirmation in green) BUT the sound is not altered on the synth…
    Any tip of things to check?
    I will try sending a 0-16383 double message instead of one 0-127.
    On Sub37 output one can choose 7 or 14bits operation. Don’t know what it is expected as input.
    Thx in advance!

    #51612
    atomatom
    Participant
    • Topics: 157
    • Replies: 2943
    • Total: 3100
    • ★★★★★

    Well it’s all about resolution, if you want to have a range of 0-127 then send one CC and set your device to this mode, this is the simplest mode. Try first with that.

    If you want more resolution you need MIDI CC pairs, this is illustrated in the MFB SynthLite panel, you can see how it’s done.

    #51668
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Well, as I explained in my previous post, you can only adjust the OUTPUT resolution from the Sub37, not the input. So I was quite confident this wasn’t the issue.
    And I also found how to setup a double CC message for values 0-16383.

    I found the issue: besides setting the Sub37 as Output device I had also to set it in MIDI Controller. I’ll search the forum for an explanation or maybe you can explain the difference between Ctrlr Midi Output and Ctrlr Midi Controller.
    I’ll copy your explanation in my step by step guide.

    So, now I can complete all buttons, test them then start thinking about the librarian (no info about Sub37 sysex messages in the manual though… will try the Minitaur way…).

    #60899
    tgrund75tgrund75
    Participant
    • Topics: 0
    • Replies: 1
    • Total: 1

    Hey guys! I just picked up a Sub 37 yesterday and came across this site. Did you ever finish this up, goodweather? The pics you posted look great, and would love to have a librarian for this amazing synth. Thanks!

    #60906
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Hi, I’m still working on it as I’m discovering Ctrlr at the same time. I’m only working on it during w-e (sometimes a bit during the week though).
    I had to switch from CC messages exchange to NRPN.
    I also discovered errors and missing messages in the NRPN pages of the Sub37 manual.
    The panel is almost fully functioning but I’m missing the 6 and 4 positions buttons.
    I will adapt the layout now as I will add enveloppe display (this is working in my test panel) and so I know how to do this.
    Next step to test is to make buttons moving or switches changing when you do it on the actual synth. I have the impression this has been working once but not anymore. Maybe due to the switch to NRPN? (I have changed the output filter to NRPN on the Sub37 Midi menu 3.3).

    @Atom
    : any feedback on this? IS there something to do to have buttons following the actual physical state? I have seen methods like midiMessageReceived
    Then next step will be to output a patch from the Sub37 (Midi menu 3.5 buffer send), to analyse it to be able to rebuild it in Ctrlr and to have a method able to resend it to the Sub37.
    Then add a way to read all presets names in each bank and display them in the panel.
    So, still some work…

    #62364
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Hi, some feedback on the Sub37 panel…
    Very good progress:

    • enveloppe graph display added (based on dasfaker’s graphs but improved – flexible size – and adapted to DAHDSR parameters)
    • selection of Filter or Amplifier EG graph display
    • all buttons are now done, including 4 and 6 positions ones
    • direct access buttons for EG parameters using the Shift button on the synth
    • name and actual value of parameter is displayed in the “screen”
    • explanation of the parameter from the manual is also displayed
    • all leds are acting according to buttons
    • series of radio buttons for the bank selection
    • series of radio buttons for the preset selection
    • load and save .syx file buttons (no code yet)

    Ongoing:

    • reverse engineering of the .syx dump (no dcumentation availabel from Moog, time consuming but I already succeeded to understand the 4-6-6 coding of each parameter, still don’t understand some checksum calculation at the end of the dump
    • will implement the functions to open and save parameters in a .syx file
    • continue to copy/paste explanations from the manual for each parameter
    • implement the preset change Midi message

    …and many other ideas for the future (arp and seq editor, double modulation matrix, display of OSC wave shapes…)…

    Attachments:
    You must be logged in to view attached files.
    #62367
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    have a read-up on sysex dumps generally:

    i read that if you specify an address and send more than one value, the
    extra values will go to next consecutive address.

    so, off the top of my head – i’ve never considered sticking my head into
    a bulk dump file – you may find that your bulk dump is data sent to the
    first parameter address in the parameter list, with values then cascading
    onto following addresses.
    ? just an idea, like i said.

    how does Ctrlr retrieve a patch onto a panel? isn’t that a function it has?

    #62459
    PuppeteerPuppeteer
    Participant
    • Topics: 15
    • Replies: 181
    • Total: 196
    • ★★

    Ctrlr has a MIDI Receive callback. You need to write code to tell ctrlr what to do with the MIDI when it is received. To receive sysex and put it onto the panel modulators, you will need code to deceipher the incoming sysex, capture the relevant bytes and assign them one by one to the panel modulators.

    You trigger this function at the panel level using the luaPanelMidiReceived
    Whenever a MIDI packet is received by the panel, it triggers whatever function you have assigned here.

    The only exception seems to be MIDICC’s that seem to be passed on through to the modulators automatically. Anything more complex will need to be processed through the function assigned to luaPanelMidiReceived.

    The Puppeteer
    http://godlike.com.au

    #62466
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    would it not be a good thing to have such functions dealt with
    in an onboard library? very offputting for average user to
    re-invent the wheel all the time :O)

    i’m no coder for instance, and find it frustrating to have to
    face Lua/LUA -whatever that stands for, i’m acronym-saturated, too,
    i speak basic UK english, know what i mean..- for many of what
    seem to me ought to be standard onboard functions.

    i like the UI but i’m finding some things a bit heavy. i haven’t
    got a lifetime for this.(! i don’t mean that in a cocky way haha
    i’m just pretty average in terms of skills)
    ;o)

    • This reply was modified 4 years, 10 months ago by human fly.
    #62473
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    Hi Puppeteer, thx for reply.
    I have in fact already written a midiMessageReceived function including assignValue tough not implemented yet. My idea was to use it on dump receive but I missed its usage on NRPN message received! Good point, I’ll try this.
    Now, even on CC working modulator, I don’t get my buttons turning accordingly.
    I’ll try it on a simple dummy panel to analyse the behaviour.

    #68437
    Carl LicroyCarl Licroy
    Participant
    • Topics: 3
    • Replies: 28
    • Total: 31

    Hi,

    I’m currently trying to create a panel for the slim phatty. I have some difficulties to decode the preset sysex file. Did you find the way to decode it for sub37?

    #68440
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    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…

    #68449
    PossemoPossemo
    Participant
    • Topics: 14
    • Replies: 634
    • Total: 648
    • ★★★

    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).

    Could it be that it is like on the Roland JX synths? Parameters, that do not require an entire Byte are packed together into the same Byte. E.g. Switch1 uses Bit0, SelectorX uses bit 1 to 2… and so on. If this is the case you can extract and set bits with Lua relatively easy.

    #68451
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    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 4 years, 7 months ago by goodweathergoodweather.
    #68463
    Carl LicroyCarl Licroy
    Participant
    • Topics: 3
    • Replies: 28
    • Total: 31

    Thanks for these informations. It’s reassuring to see that I’m not alone 🙂 I’m working the same way with “Midi monitor” and “HexEdit”.

    It seems that for the Slim Phatty every datas are also “packed” in bits sequences. I started to “decrypt” the sysex but it seems pretty hard because we never know how much bits are used. For instance I found this :

    — byte244: | X | X | X | X | Osc1range1 | Osc1range2 | X | X |
    — byte245: | X | X | X | X | X | X | Osc2range1 | Osc2range2 |
    — Osc1range : 16 = |0|0| 32=|0|1| 48=|1|0| 64=|1|1|
    — Osc2range : 16 = |0|0| 32=|0|1| 48=|1|0| 64=|1|1|

    So it seems that the “bits” doesn’t necessary refers to the real value of the parameter.

    I just feel like Alan Turing trying to decode Enigma… to save the world from a quite strange commercial strategy…

    #68466
    goodweathergoodweather
    Participant
    • Topics: 44
    • Replies: 523
    • Total: 567
    • ★★★

    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.

Viewing 20 posts - 1 through 20 (of 38 total)
  • You must be logged in to reply to this topic.
There is currently 0 users and 37 guests online
No users are currently active
Forum Statistics
Threads: 2,417, Posts: 17,040, Members: 57,378
Most users ever online was 12 on January 22, 2019 3:47 pm
Do NOT follow this link or you will be banned from the site!