SpektroAudio / Patchbook

Markup language and parser for writing and distributing patches for modular synthesizers.
MIT License
199 stars 27 forks source link

[Suggestion] ArrowTail default #12

Closed cristianvogel closed 7 years ago

cristianvogel commented 7 years ago

With respect to what I mentioned in the the colors thread, graphviz is drawing lines on top of each other as they traverse a graph, which then emerge in different directions. Its impossible to tell which one came from which output.

I suggested color attribute as we are discussing, but also I found it good to have the following style of the edges (cables) so that its starting point is clearly defined, which makes it even more clear when the cable gets assigned a colour. Perhaps this should be the default?

[arrowtail=dot, dir=both]

cristianvogel commented 7 years ago

here's an example of what it can look like on quite a dense patch... by the way this graph was also tweaked a bit using the weight= atrribute, when the dot engine didn't quite arrange things in a clear way. barcelona kyma patch 1 arrowtail

cristianvogel commented 7 years ago

source for above diagram

rankdir = LR;
splines = polyline;
ordering=out;
concentrate=true;

dusg[label="{ {<_risebcv> RISE B CV | <_trigina> TRIG IN A | <_triginb> TRIG IN B}|DUSG| {<_bpout> BP OUT | <_endb> END B | <_outa> OUT A | <_outb> OUT B | <_pulsea> PULSE A}}"  shape=Mrecord]
a118noise[label="{ {}|A118 NOISE| {<_colored> COLORED | <_random> RANDOM}}"  shape=Mrecord]
blackquad[label="{ {<_in2> IN 2}|BLACKQUAD| {<_out2> OUT 2}}"  shape=Mrecord]
cascade[label="{ {<_in1> IN 1 | <_in2> IN 2}|CASCADE| {<_out1> OUT 1 | <_out2> OUT 2}}"  shape=Mrecord]
confusor[label="{ {<_in1> IN 1 | <_in2> IN 2 | <_in3> IN 3 | <_in4> IN 4}|CONFUSOR| {<_out1> OUT 1 | <_out2> OUT 2 | <_out3> OUT 3 | <_out4> OUT 4}}"  shape=Mrecord ]
chordorgan[label="{ {}|CHORDORGAN| {<_out> OUT}}"  shape=Mrecord]
crushdelay[label="{ {<_fbckcv> FBCK CV | <_fxreturn> FX RETURN | <_fxreturncv> FX RETURN CV | <_in> IN | <_speedcv> SPEED CV}|{{CRUSHDELAY}|{Drywet = 35%\nFb = 5%\nFxreturn = 75%\nIntodly = 55%}}| {<_fxsend> FX SEND | <_out> OUT}}"  shape=Mrecord]
disting[label="{ {<_x> X | <_y> Y}|{{DISTING}|{Algorithm = 1A 3D ClockableDelayEcho}}| {<_a> A}}"  shape=Mrecord]
evolution[label="{ {<_freqcv2> FREQ CV 2 | <_input> INPUT}|{{EVOLUTION}|{Freq = 65%\nFreq Cv2 = -100%\nQ = 30%\nQ Level Comp = 70%}}| {<_output> OUTPUT}}"  shape=Mrecord]
joystick[label="{ {}|JOYSTICK| {<_xout> X OUT | <_yout> Y OUT}}"  shape=Mrecord]
mikrophonie[label="{ {}|MIKROPHONIE| {<_out> OUT}}"  shape=Mrecord]
minimod[label="{ {<_expcv> EXP CV | <_lincv> LIN CV}|MINIMOD| {<_sharktooth> SHARKTOOTH | <_triangleorsquare> TRIANGLE OR SQUARE}}"  shape=Mrecord]
morphagene[label="{ {<_clk> CLK | <_genesize> GENE-SIZE | <_organize> ORGANIZE | <_play> PLAY | <_varispeed> VARISPEED}|{{MORPHAGENE}|{Reel1 = 808Beath | Reel2\nVarispeedcv = -30%}}| {<_cv> CV | <_eosgout> EOSG OUT | <_l> L | <_r> R}}"  shape=Mrecord]
newpam[label="{ {}|{{NEWPAM}|{Bankpreset = C}}| {<_2> 2 | <_3> 3 | <_4> 4 | <_5> 5 | <_8> 8}}"  shape=Mrecord]
pexp1[label="{ {}|PEXP1| {<_4> /4 | <_x1> X1 | <_x2> X2 | <_x4> X4}}"  shape=Mrecord]
rxmx[label="{ {<_ch1> CH 1 | <_ch2> CH 2 | <_ch3> CH 3 | <_ch4> CH 4 | <_ch6> CH 6 | <_chselz> CH SELZ | <_level> LEVEL | <_strike> STRIKE}|{{RXMX}|{Ch Sel (Cv In) = 70%\nChannel = 55%\nLevel = 0%\nLevel (Cv In) = 65%\nRadiate = 35%}}| {<_outb> OUT B}}"  shape=Mrecord]
snakecharmerout[label="{ {<_1> 1 | <_2> 2 | <_3> 3}|SNAKECHARMEROUT| {}}"  shape=Mrecord]
strakal[label="{ {<_in> IN}|{{STRAKAL}|{Drive = 40%\nFb = 7.3\nIn = 5%\nOut = 5%}}| {<_out> OUT}}"  shape=Mrecord]
svvcf[label="{ {<_cv1> CV 1 | <_in1> IN 1}|{{SVVCF}|{In1 = 75%\nNotch = 40%\nRes = 25%}}| {<_notch> NOTCH}}"  shape=Mrecord]
ttlfov2[label="{ {<_sync> SYNC}|{{TTLFOV2}|{Wave = Square}}| {<_out> OUT}}"  shape=Mrecord]
wogglebug[label="{ {<_influence> INFLUENCE | <_stepin> STEP IN | <_tiexternal> TI EXTERNAL}|{{WOGGLEBUG}|{Intclock = 50%\nWoggle = 0%}}| {<_stepped> STEPPED | <_woggleorburst> WOGGLE OR BURST | <_woggleout> WOGGLEOUT}}"  shape=Mrecord]

a118noise:_colored:e  -> rxmx:_ch6:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
blackquad:_out2:e  -> evolution:_input:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
chordorgan:_out:e  -> rxmx:_ch1:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
crushdelay:_fxsend:e  -> rxmx:_ch2:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
crushdelay:_out:e  -> snakecharmerout:_1:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=4]
disting:_a:e  -> snakecharmerout:_3:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=3]
evolution:_output:e  -> disting:_x:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=2]
mikrophonie:_out:e  -> minimod:_lincv:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
minimod:_sharktooth:e  -> rxmx:_ch3:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
minimod:_triangleorsquare:e  -> crushdelay:_fxreturn:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]

morphagene:_l:e  -> svvcf:_in1:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
morphagene:_r:e  -> strakal:_in:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=2, color=tomato]
morphagene:_eosgout:e  -> confusor:_in4:e [color=red, dir=both, arrowtail=dot, style=dashed, weight=2]
morphagene:_cv:e  -> svvcf:_cv1:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]

rxmx:_outb:e  -> blackquad:_in2:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=5]
strakal:_out:e  -> snakecharmerout:_2:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled, weight=2]
svvcf:_notch:e  -> crushdelay:_in:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled]
wogglebug:_woggleout:e  -> rxmx:_ch4:w [arrowtail=dot, dir=both, penwidth=2, color=royalblue, style=filled] //xlabel="woggle out"]
newpam:_2:e  -> dusg:_triginb:w [arrowtail=dot, dir=both, penwidth=2, color=purple, style=dashed]
newpam:_5:e  -> morphagene:_play:w [arrowtail=dot, dir=both, penwidth=2, color=purple, style=dashed]

pexp1:_4:e  -> morphagene:_varispeed:w [arrowtail=dot, dir=both, penwidth=2, color=violet, weight=10, style=dashed]
pexp1:_x1:e  -> ttlfov2:_sync:w [arrowtail=dot, dir=both, penwidth=2, color=purple, style=dashed]
pexp1:_x2:e  -> wogglebug:_stepin:w [arrowtail=dot, dir=both, penwidth=2, color=purple, style=dashed]
pexp1:_x4:e  -> morphagene:_clk:w [arrowtail=dot, dir=both, penwidth=2, color=purple, style=dashed]

a118noise:_random:e  -> morphagene:_genesize:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
cascade:_out1:e  -> crushdelay:_speedcv:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
cascade:_out2:e  -> morphagene:_organize:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]

dusg:_bpout:e  -> confusor:_in1:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen ]
dusg:_outa:e  -> confusor:_in3:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
dusg:_outb:e  -> confusor:_in2:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]

confusor:_out1:e  -> crushdelay:_fbckcv:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
confusor:_out2:e  -> cascade:_in1:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
confusor:_out3:e  -> dusg:_risebcv:w [arrowtail=dot, dir=both, penwidth=2, color=green, arrowtail=dot, dir=both, penwidth=2]
confusor:_out4:e  -> disting:_y:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]

joystick:_xout:e  -> rxmx:_chselz:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
joystick:_yout:e  -> rxmx:_level:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]

newpam:_3:e  -> wogglebug:_tiexternal:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
newpam:_4:e  -> crushdelay:_fxreturncv:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
newpam:_8:e  -> evolution:_freqcv2:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
ttlfov2:_out:e  -> minimod:_expcv:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
wogglebug:_stepped:e  -> cascade:_in2:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
wogglebug:_woggleorburst:e  -> wogglebug:_influence:w [arrowtail=dot, dir=both, penwidth=2, color=forestgreen]
dusg:_endb:e  -> dusg:_trigina:w [arrowtail=dot, dir=both, penwidth=2, color=red, style=dashed]
dusg:_pulsea:e  -> rxmx:_strike:w [arrowtail=dot, dir=both, penwidth=2, color=red, style=dashed]

}
icaroferre commented 7 years ago

Yeah, this will also fall into the idea of the previous thread related to additional arguments. I'm re-writing parts of the parser to make it so additional arguments like color, weight etc can be added optionally, then it's just a matter of updating the graphviz method.

icaroferre commented 7 years ago

Added support for weight, dir and arrowtail arguments: https://github.com/SpektroAudio/Patchbook/commit/89ffe26b3a5ac3270daeef9b3e6edf01dbced020