Developing other apps with sundog engine

Post Reply
ashpiggey
Posts: 1
Joined: Sun Jan 16, 2022 8:57 pm

Developing other apps with sundog engine

Post by ashpiggey »

Hello! Just wondering if anyone else has tried creating new apps (specially for pi's) with the older sundog engine. My coding knowledge isn't really strong enough to do such a thing but interested to hear if anyone else done that successfully.
Ol sen
Posts: 20
Joined: Sat Feb 12, 2022 6:26 am

Re: Developing other apps with sundog engine

Post by Ol sen »

I do - but in the Macintosh world. Which is luckily not soo far from Pi aka unix. Not ready of course :oops:
Discovered lost's of improvements worth coding and shared here and there some short thoughts already in this forum hoping it might find back into Sunvox. In particular doing a new psynth modul to allow freak-in play of chords in interaction with arpeggiation. My testcode works and once ready my intent was to share the whole code to nightradio, he might like it.

Doing such coding is first of all UI coding because i intent to ignore the OpenGL implementation and adapt metal which is mandatory for modern mac apps, but i think being on a good track to succeed. In between having thoughts how i would change the psynth_net engine to improve but at them same time trying to avoid it to keep it compatible to sunvox as much as possible.

My whole project is based on a total different approach than Sunvox has because my goal is to feed moduls with pattern data of Elektron machines which i also decoded to be able to read and write them. The later feature made already so much fuzz in internet with another app i develop that i stopped posting updates in my forums to keep my eye on code instead of constantly answering questions. So the focus in coding is strongly to enable interchange of signals and preset editing of analog machinery and help do sounddesign to create content for those machines to play live with it or use the app as running DAW for such.

It is maybe to early to talk about it here as i had to redevelop the missing source that basically makes sunvox being sunvox, specially UI stuff. The result is somewhat different in example as in my UI it is possible to jump into and jump out of MetaModuls to edit them without saving and also drag and drop for loading .sunsynth or .sunvox or wave data loaded as sampler. Also copy and paste algo that allows sharing of patch structures and parameters in and from JSON.

So i have tons of thoughts where i would change the sunvox engine to simplify moduls..
just in example sharing one: MetaModuls & Output could basically be the same modul, as any sunvox engine has an output.. also MultiCtl's could be allowed to control multiple parameters of a connected modul and not just one param per modul connected, which in turn would allow MultiCtl to become somewhat Scene fader like the Elektron Octatrack has that fades between two presets. Also MultiCtl connected params could basically be of type==3 (nightradio will know what i mean) and this way allow unified code for exposed controls to Meta and Max-Min-Controltarget of MultiCtl or Sound2Ctl etc. Well just thoughts..

which basically looks like this at the moment.
screenshot_mac_app_sunvox_engine.jpg
screenshot_mac_app_sunvox_engine.jpg (54.27 KiB) Viewed 3279 times
as you can see, no keyboard or pattern editor visible, also no metamodul in this particular patch of the screenshot..
also here is no audio buffer interpreted as visual yet, on purpose, because first i want to go as far as possible without interaction of GPU at all. Which in turn leaves shared GPU buffering out of the equation for now. Here BPM, TPL and Volume become visible controls when Output modul is selected, more on that later because that is not only more logic in use but also is similar to what MetaModul offers and simplifies the UI quite a lot. So when editing a meta modul, selecting an Output inside a meta would show the meta's volume, tpl and bpm as if Output offers controls, which actually has none for real.

And my derivate of implemented sundog/sunvox engine allows for different input and output audio channels to make it work with professional gear - also known as channel mapping. Some other differences will be: introduction of PS_CMD_PUBLISH_CTL and PS_CMD_UNPUBLISH_CTL events that allow to simplify editing of meta moduls, basically allow to tell a modul to publish one of its controls and the host meta modul will take it over or erase the control from its UI/data model. Which in turn makes patching easy peasy and allows to jump inside a meta modul to edit its content and jump out to again. Also introduced a PS_CMD_GET_TYPE_AS_INDEX that allows to ask a modul for its type as number instead of strings, which speeds up stuff - loading - editing - evaluation of moduls, the indexes given to each modul are according to its indiceé in the global modul list. The latter feature allows to almost "stream" load patches/sunvox files without clicks while playing, told ya "crazy" :crazy: to even do that, but it means the engine can act like Bank switching behaves on Elektron machines, where switching a bank in patterns completely changes the environment. Would not go mad if some or eve one of those features would find its way into sundog/psynth.

I mentioned JSON in and export.. giving an example how the sunvox patch above would look like in JSON

Code: Select all

{
	"path":"/Users/username/Music/appname/ExportedFiles/test_sw.sunvox",
	"root":"//0",
	"synths":[
	{
		"type":"BYPASS",
		"x":173,
		"y":563,
		"m":0,
		"name":"Output",
		"i":[14]
	},
	{
		"type":"MultiSynth",
		"x":-643,
		"y":396,
		"m":3,
		"name":"MultiSynth",
		"p":[128,0,256,256,0,1,1,256],
		"o":[4,9]
	},
	{
		"type":"LFO",
		"x":-539,
		"y":264,
		"m":13,
		"name":"LFO1",
		"p":[256,0,256,23,5,0,1,0,128,1,100,1,0],
		"o":[8]
	},
	{
		"type":"Compressor",
		"x":53,
		"y":563,
		"m":14,
		"name":"Compressor",
		"p":[374,131,138,1,107,0,0],
		"i":[11],
		"o":[0]
	},
	{
		"type":"Reverb",
		"x":49,
		"y":395,
		"m":11,
		"name":"Reverb",
		"p":[229,81,203,238,194,0,0,1,29,15257],
		"i":[2],
		"o":[14]
	},
	{
		"type":"Note2Chord",
		"x":-301,
		"y":395,
		"m":4,
		"name":"Note2Chord",
		"p":[12931,17,9,136,7,1,3,0],
		"i":[10,3,8],
		"o":[2,5]
	},
	{
		"type":"Pitch2Ctl",
		"x":-181,
		"y":445,
		"m":5,
		"name":"Pitch2Ctl",
		"p":[1,0,0,48,1,21962,2],
		"i":[4],
		"o":[2]
	},
	{
		"type":"LFO",
		"x":-538,
		"y":324,
		"m":9,
		"name":"LFO2",
		"p":[256,0,256,17,5,127,1,3,128,1,200,1,0],
		"i":[3],
		"o":[10]
	},
	{
		"type":"Sound2Ctl",
		"x":-419,
		"y":264,
		"m":8,
		"name":"Sound2Ct",
		"p":[32769,0,1,256,256,1,11971,15617,1],
		"i":[13],
		"o":[4]
	},
	{
		"type":"FM",
		"x":-51,
		"y":395,
		"m":2,
		"name":"FM",
		"p":[123,171,128,1,1,12,118,243,2,512,154,76,124,512,4,16,0],
		"i":[4,5],
		"o":[11]
	},
	{
		"type":"Sound2Ctl",
		"x":-417,
		"y":323,
		"m":10,
		"name":"Sound2Ctl",
		"p":[32769,0,1,256,250,1,17,49,2],
		"i":[9],
		"o":[4]
	}
	]
}
well there is a Note2Chord modul in here which i was writing about above. notice the "root" property.. it tells from which level the json copy was taken from, because copy/paste from meta moduls will have a root and modul number to paste to or copy from..
Post Reply