Vember Audio Surge is now open-source
-
- KVRAF
- 2911 posts since 3 Mar, 2006
Surge was the first plugin I ever bought circa 2007-ish and I just thought I'd chime in to say it's wonderful to me that it lives on as an open-source project - modern OS compatibility, a few new features, skins... gorgeous.
- KVRAF
- 24414 posts since 7 Jan, 2009 from Croatia
"A few" new features. 
-
- KVRAF
- 2802 posts since 31 Aug, 2011
Alright, i did some more checking into the SVG UI and i think i can work with this after all.
(The penny dropped when i realized that the XMLs embedded in the DLL are really SVGs. I extracted 14566.xml, renamed it to .svg, and loaded it into Inkscape. After that everything was clear to me.)
So im ready to get serious. But first i need to know how far i can ultimately take this. What i need first and foremost before going ahead is a complete list of parameters, formats, everything that relates to the structure of the UI. (There are bits and pieces of this stuff in the skin.xmls of the dark and test skin, but neither has the complete set.) If that could be provided it would be very helpful.
Also one question. Is the SVG renderer youre currently using the only option? Im asking because i noticed that it is (apparently) not capable of rendering font-based text. (Which means all text objects will have to be converted to paths, after which they will be no longer editable as-text with the font tool.) To check whether the problem is with the SVG i dragged it into Firefox and there the text showed as expected.
(The penny dropped when i realized that the XMLs embedded in the DLL are really SVGs. I extracted 14566.xml, renamed it to .svg, and loaded it into Inkscape. After that everything was clear to me.)
So im ready to get serious. But first i need to know how far i can ultimately take this. What i need first and foremost before going ahead is a complete list of parameters, formats, everything that relates to the structure of the UI. (There are bits and pieces of this stuff in the skin.xmls of the dark and test skin, but neither has the complete set.) If that could be provided it would be very helpful.
Also one question. Is the SVG renderer youre currently using the only option? Im asking because i noticed that it is (apparently) not capable of rendering font-based text. (Which means all text objects will have to be converted to paths, after which they will be no longer editable as-text with the font tool.) To check whether the problem is with the SVG i dragged it into Firefox and there the text showed as expected.
- KVRAF
- 24414 posts since 7 Jan, 2009 from Croatia
Yes, we're using nanosvg, others are too complex or require too many dependencies. So yes, text will have to be rendered into paths. However that shouldn't be a problem since you can save Inkscape project with text layers hidden so you can always go back to editing them if need be.
As for the skin XML, you right-click Surge's menu button, go to Developer options, then Dump components to stdout and runtime.xml. This will give you the list of UI widget tags you can use. Not all of them can be moved or reskinned I think (FX sliders are one thing, mod assign buttons are another, IIRC). baconpaul can drop additional info I may be missing.
As for the colors, there's a bunch of them defined, but only those that are queried at runtime can be displayed (if you go to Developer options->Show queried colors). To know all possible colors that we have defined, currently there's no way other than scanning through the codebase unfortunately. But even that shouldn't be too hard - do a within-files text search for ->getColor( inside src\common folder of the codebase.
Also, you don't need to go hacking into the DLL. Just use the dark skin as template. Or, for slightly more involving example, you can use my variant of the dark skin, which also exchanges some sliders.
As for the skin XML, you right-click Surge's menu button, go to Developer options, then Dump components to stdout and runtime.xml. This will give you the list of UI widget tags you can use. Not all of them can be moved or reskinned I think (FX sliders are one thing, mod assign buttons are another, IIRC). baconpaul can drop additional info I may be missing.
As for the colors, there's a bunch of them defined, but only those that are queried at runtime can be displayed (if you go to Developer options->Show queried colors). To know all possible colors that we have defined, currently there's no way other than scanning through the codebase unfortunately. But even that shouldn't be too hard - do a within-files text search for ->getColor( inside src\common folder of the codebase.
Also, you don't need to go hacking into the DLL. Just use the dark skin as template. Or, for slightly more involving example, you can use my variant of the dark skin, which also exchanges some sliders.
-
- KVRAF
- 2802 posts since 31 Aug, 2011
OK, thank you.
I will check out what youve suggested.
And BTW, im not hacking into the DLL. (There is no need to.) I simply made a copy of the default skin folder, renamed it and put a new name in skin.xml, and then i simply put the SVGs (properly named) in the SVG folder, which then override the files embedded in the DLL. (For instance a SVG named bmp00102.svg will override the embedded 14566.xml, and so forth.) This makes it very easy to build up the UI bit by bit, because unless i put an override file in the skin folder, Surge will use the embedded default, i.e. i dont have to worry about missing resources even though im not technically using the default skin.
So doing a simple 're-skin' of the existing UI is a piece of cake. But i have a lot more in mind than that. If i start from scratch anyway i would want to make a whole new UI with a whole new layout, i.e. redesigned items, sizes, positions, etcetera. And thats why i need to know all the parameters i can ultimately use in order to put the UI together, because if it turns out that not everything can be defined as required, there would be no point in going forward on that idea.
I will check out what youve suggested.
And BTW, im not hacking into the DLL. (There is no need to.) I simply made a copy of the default skin folder, renamed it and put a new name in skin.xml, and then i simply put the SVGs (properly named) in the SVG folder, which then override the files embedded in the DLL. (For instance a SVG named bmp00102.svg will override the embedded 14566.xml, and so forth.) This makes it very easy to build up the UI bit by bit, because unless i put an override file in the skin folder, Surge will use the embedded default, i.e. i dont have to worry about missing resources even though im not technically using the default skin.
So doing a simple 're-skin' of the existing UI is a piece of cake. But i have a lot more in mind than that. If i start from scratch anyway i would want to make a whole new UI with a whole new layout, i.e. redesigned items, sizes, positions, etcetera. And thats why i need to know all the parameters i can ultimately use in order to put the UI together, because if it turns out that not everything can be defined as required, there would be no point in going forward on that idea.
- KVRian
- 823 posts since 27 Aug, 2020
I just wanna say to the team working on developing Surge that you're all awesome people wherever you are and whoever you are. We are all so fortunate to have such a great synth for free. Your efforts are very appreciated, thank you so much.
-
- KVRist
- 247 posts since 1 Oct, 2015
Man, with all the new changes and improvements that Surge is receiving it is true that it would be convenient to see it with a new UI, more in line with the year 2020. Hopefully you can carry out that idea that you have. Excited waiting to see what happens with that.ENV1 wrote: Thu Aug 27, 2020 12:21 pm
So doing a simple 're-skin' of the existing UI is a piece of cake. But i have a lot more in mind than that. If i start from scratch anyway i would want to make a whole new UI with a whole new layout, i.e. redesigned items, sizes, positions, etcetera....
- KVRAF
- 24414 posts since 7 Jan, 2009 from Croatia
BTW ENV1 you can see all the assets for the classic skin here: https://github.com/surge-synthesizer/su ... c/exported
- KVRAF
- 24414 posts since 7 Jan, 2009 from Croatia
FX section is fixed and not adjustable through skin yet, at the very least.ENV1 wrote: Thu Aug 27, 2020 12:21 pm So doing a simple 're-skin' of the existing UI is a piece of cake. But i have a lot more in mind than that. If i start from scratch anyway i would want to make a whole new UI with a whole new layout, i.e. redesigned items, sizes, positions, etcetera. And thats why i need to know all the parameters i can ultimately use in order to put the UI together, because if it turns out that not everything can be defined as required, there would be no point in going forward on that idea.
BUT! We welcome all sorts of ideas for future layouts etc., so it would be awesome if you'd join #design channel on our Discord server for a more direct line of communication.
- Banned
- 7624 posts since 13 Nov, 2015 from Norway
an ENV1 skin for Surge? Yes please 
EnergyXT3 - LMMS - FL Studio | Roland SH201 - Waldorf Rocket | SoundCloud - Bandcamp
-
- KVRer
- 23 posts since 19 Nov, 2019
Greetings. I am using Propellerheads Reason 10, and this daw does not recognize VST3 format. I have read past discussions from this thread and I saw that I could make my own installer, but I have no programing background whatsoever. Is there any posibility to get the right installer for me maybe? Or is there any other option beside doing it myself? Many thanks for your time.
respect
=Michael=
respect
=Michael=
-
- KVRian
- 1213 posts since 25 Dec, 2018
Version 1.6.6 and earlier includes a VST2. You can use those. The website will show you how to find older versions.Milisonics wrote: Fri Aug 28, 2020 9:00 pm Greetings. I am using Propellerheads Reason 10, and this daw does not recognize VST3 format. I have read past discussions from this thread and I saw that I could make my own installer, but I have no programing background whatsoever. Is there any posibility to get the right installer for me maybe? Or is there any other option beside doing it myself? Many thanks for your time.
respect
=Michael=
-
- KVRAF
- 2802 posts since 31 Aug, 2011
OK, i have started digging into it and i think i have a pretty good grasp on everything now.
Hate to say it, but a new UI (layout, etc.) will be out of the question unless there are substantial changes to the skinning system. Right now the color dumps dont show all the colorable items, the runtime dumps dont show all the parameters (plus some are defective), the doc dumps dont show all the strings, there is no complete definition file that has everything in it so it could be used for orientation, some definitions have no effect or only partial effect, and so forth. Without meaning any disrespect, its all a bit of a mess right now, i.e. the full control that is needed over all aspects of the UI is simply not there right now.
And unfortunately even a simple re-skin is more complicated than i initially thought too. For instance merely defining the color for the oscillator waveform took me what felt like hours because the parameter isnt mentioned anywhere in the dumps or elsewhere. So i had to sift through endless files of the source code until i finally stumbled upon the name of this thing. And after that i had to do the same search all over again because it turned out that the wavetable name box and the color of the font used on it werent mentioned anywhere except in the source code either.
But, i didnt let that stop me.
On the contrary, among other things i have made good progress cleaning up the oscillators box, which now uses realtime font rather than text printed onto images. This means sharp and crisp text regardless of the scaling factor, i.e. even at 100%.
But...i need some help here. As you can see on the screenshot below, the font that is used by the 'label text' definitions totally sucks. (Must be Verdana or Tahoma or something.) Is there a way to change the font that is used by 'label text'? Since all the other labels are Lato it would probably be best to use that for consistency. Also what else (if anything) does 'label text' support? Excluding coordinates im aware of only 2 things, namely font-size="xy" and color="xxxxxx". Example:
Is it possible to define a font here directly? Any other things like weight, etcetera? Whats the complete list of options?
Also im having difficulty moving the osc.osctype selector. (Still orange on the screenshot.) Once again it doesnt show in any of the dumps, so i cant determine its class. But the class needs to be defined in order for the definition to work, i.e. i cant set a new coordinate in skin.xml unless the string is complete with class and everything. (I tried CSwitchControl and a few other classes from surge/src/common/gui as a desperation move but none made it work like before, i.e. like a dropdown.)
Any help much appreciated.
Hate to say it, but a new UI (layout, etc.) will be out of the question unless there are substantial changes to the skinning system. Right now the color dumps dont show all the colorable items, the runtime dumps dont show all the parameters (plus some are defective), the doc dumps dont show all the strings, there is no complete definition file that has everything in it so it could be used for orientation, some definitions have no effect or only partial effect, and so forth. Without meaning any disrespect, its all a bit of a mess right now, i.e. the full control that is needed over all aspects of the UI is simply not there right now.
And unfortunately even a simple re-skin is more complicated than i initially thought too. For instance merely defining the color for the oscillator waveform took me what felt like hours because the parameter isnt mentioned anywhere in the dumps or elsewhere. So i had to sift through endless files of the source code until i finally stumbled upon the name of this thing. And after that i had to do the same search all over again because it turned out that the wavetable name box and the color of the font used on it werent mentioned anywhere except in the source code either.
But, i didnt let that stop me.
But...i need some help here. As you can see on the screenshot below, the font that is used by the 'label text' definitions totally sucks. (Must be Verdana or Tahoma or something.) Is there a way to change the font that is used by 'label text'? Since all the other labels are Lato it would probably be best to use that for consistency. Also what else (if anything) does 'label text' support? Excluding coordinates im aware of only 2 things, namely font-size="xy" and color="xxxxxx". Example:
Code: Select all
<label text="Oscillators" font-size="12" color="849ab2" x="5" y="65"/>Also im having difficulty moving the osc.osctype selector. (Still orange on the screenshot.) Once again it doesnt show in any of the dumps, so i cant determine its class. But the class needs to be defined in order for the definition to work, i.e. i cant set a new coordinate in skin.xml unless the string is complete with class and everything. (I tried CSwitchControl and a few other classes from surge/src/common/gui as a desperation move but none made it work like before, i.e. like a dropdown.)
Any help much appreciated.
You do not have the required permissions to view the files attached to this post.
- KVRAF
- 9551 posts since 6 Jan, 2017 from Outer Space
I am so glad that a skin has such a low priority for me. I can still do the same sounds...
Skin hacking looks like a waste of time, though might be necessary to finally get to a code base which would make it easier for those who care...

Skin hacking looks like a waste of time, though might be necessary to finally get to a code base which would make it easier for those who care...
- KVRAF
- 24414 posts since 7 Jan, 2009 from Croatia
That's the spirit!
Would really be awesome if you'd join us on Discord. You could also get help sooner this way.
You cannot define fonts in the skin engine. Lato is used everywhere, AFAIK.
(BTW, if some of the parameter class dumps seem defective, it is probably more accurate to say that the functionality hasn't been implemented for them. Also I just checked the parameter dump, all the parameters seem to be there. Which ones are missing?)
EDIT: Yeah osc.osctype is missing in the dump, dunno why. Maybe because its class isn't being scanned (it's COscMenu).
EDIT #2: Got the answer from Paul. Snapshot menus (like COscMenu) are not in the components dump because they're not yet supported by the skin engine - which also means you cannot move osc.osctype anywhere, and would have to design around it. We need more C++ devs.
Last edited by EvilDragon on Mon Aug 31, 2020 12:55 pm, edited 3 times in total.
