Audio System Design Tool update + AudioMixerX<n>

manicksan

Well-known member
AudioMixerX
i have discovered that you can use c++ template to make a
mixer with any number of inputs defined like previous mixer
but like this:
AudioMixerX<n> where n is the number of inputs you want :cool:
available at (forked from Paul)
https://github.com/manicken/Audio/blob/master/mixer.h
note that i had to put
applyGain applyGainThenAdd and update functions inside the h-file
otherwise the template didn't work.

Audio System Design Tool update
I was getting tired of that you can't do complex designs,
mostly designs that involves Array of objects.

see https://forum.pjrc.com/threads/60690-queued-TeensyMIDIPolySynth
who made a extreme layout with 1075 lines of generated code
+ ~17000 lines of hand written code (probably some copy paste)
this made me think that some things have to be done
so that unnecessary work like that don't have to be done again.

Also i wanted to use it for my own designs,
currently i did it without the tool
so that's why i know it could be done.

So i have done some changes that should be there:

note. that i did the changes on a old version of the gui,
so all new items/functions paul added recently is not there.
But if you like the changes i can make a Fork and put everything new there.

i hope you like them.

you can check out the changed Tool here:
https://manicken.github.io/
but continue reading so that you know whats added.

1. Re-enabled the workspace function - endless possibilities (hope the the comments about removing them never happens)
2. New save function (called save2)
3. Class Generation (each workspace is generated in separate classes)
4. Workspace Input/Output nodes (i call them TabInput/TabOutput)
5. Make Class (workspaces) added to the palette automatically
6. Make AudioConnections work between classes (even cascaded classes there a second class is directly connected to a TabInput/TabOutput)
this was done in two steps first where srcNode is a "class"
then when destNode is a class (this involves the possibility to have many destinations, so it was alot more complicated)

7. here i was thinkin, it's gonna be hard to import the code again at this level of complexity (specially after point 10. )
so because you can import json in import dialog (after unchecking import arduino code)

i decided to add whole json describing a complete layout at the beginning of the generated code
if this could be the new standard, we will never have import problems again.
and nothing is lost.

8. added save/load from local files (it uses browser File download/upload functions so it's very limited)

9. added so that you see current selection in info-bar,
with two buttons:
* Export (export selected nodes as json)
* Generate array node (used to autogenerate a Array-type Node, not "real" Array as in 10.)
this array just make a pointer array that points to predefined nodes
only nodes of the same type can be used
(the button is not visible if different types is selected)

10. added ClassComments that is included in output source,
but is also used by the automatic help generation that is shown
when selecting class nodes.

11. tooltips that is shown when hover over node pins,
the information is taken from the embedded help,
or class IO-pin names

12. Made a real discovery when playing around with mixer4 code
did make a AudioMixerX<n> using c++ template functionality
so now you can initialize mixer with any number of inputs :cool:

9. Added pointer array with automatic generation of the code.
10. Made pointer array obsolete
because of AudioMixerX,
real array can be done more efficient with for-loops
+added Real Node Array def.
which uses a for-loop to connect everything

somewhere i also activated the workspace toolbar which now
contains cut copy paste functions, more functions can be added in
the future to this nice bar.

The current limit of Array usage is that you can only have
multiple of them in the same "class" when the size of them are the same.
this can be fixed (i have already thought of a solution),
but at the moment i just wanted to make this post

I have included three "demoflows" theese are embedded in the index.html
They are at three different levels. (based(no changes) on kd5rxt-mark:s design)

1.Original (this is really crazy how many connections there are)
2.DemoFlowB: splitted in 2 parts (NoteGen(voice?) and SynthMain)
3.DemoFlowA: splitted in 5 parts (VFO, LFO_A, LFO_B, NoteGen(voice?) and SynthMain)

in both DemoFlowB and DemoFlowA there is a version NodeArraySynthMain
that utilizes the Real Node-array

nice other features:
1. when changing workspace-name it's checking if the name(type) is already taken (don't checks library object names, so don't use them),
and show a notification
2. when changing workspace-name it's updating all nodes in whole design to use that new name(type).
3. workspace classes that don't have any IO is not shown in the palette.



Known bugs:
1. when changing AudioMixerX input-count the input-pins are not updated
(workaround is to switch to annother workspace and back again, of refreshing the page manually)
2. cut/paste objects don't return the original names (new names is generated)
this also removes the text of comments.

i think that was all for now.
 
Back
Top