Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
@@ -1 +1 @@ | |||
Subproject commit d6919785586228020e347bf24288b8317e0b24ef | |||
Subproject commit 1edb1bb172fce8ae89cf666675ff531fc5dca628 |
@@ -0,0 +1,151 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="45.720001mm" | |||
height="128.5mm" | |||
viewBox="0 0 45.720001 128.5" | |||
version="1.1" | |||
id="svg4620" | |||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" | |||
sodipodi:docname="Carla.svg"> | |||
<defs | |||
id="defs4614"> | |||
<style | |||
id="style6" | |||
type="text/css"> | |||
.str0 {stroke:#565656;stroke-width:0.0966867} | |||
.str1 {stroke:#4F4F4F;stroke-width:0.193345} | |||
.fil0 {fill:none} | |||
.fil2 {fill:#2B2A29} | |||
.fil1 {fill:#6B6B6B} | |||
</style> | |||
</defs> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="83.367083" | |||
inkscape:cy="408.80671" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1026" | |||
inkscape:window-x="1920" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="1" /> | |||
<metadata | |||
id="metadata4617"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<g | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(0,-168.5)"> | |||
<g | |||
style="fill-rule:evenodd" | |||
id="g5299" | |||
transform="matrix(6.342689,0,0,6.342689,5.4472535,175.6457)"> | |||
<g | |||
transform="translate(-1.6191379e-5,-0.08553947)" | |||
id="Layer_x0020_1"> | |||
<metadata | |||
id="CorelCorpID_0Corel-Layer" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1" | |||
id="circle10" | |||
r="0.15916" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str0" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1" | |||
id="circle12" | |||
r="0.42853901" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str1" /> | |||
</g> | |||
</g> | |||
<g | |||
aria-label="Cardinal" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
id="text5303" | |||
transform="translate(-0.09449404,0.14174107)"> | |||
<path | |||
d="m 17.923601,176.99103 v 0.66043 q -0.31626,-0.29456 -0.675928,-0.44028 -0.356567,-0.14573 -0.759643,-0.14573 -0.79375,0 -1.21543,0.48679 -0.42168,0.48369 -0.42168,1.40146 0,0.91468 0.42168,1.40147 0.42168,0.48369 1.21543,0.48369 0.403076,0 0.759643,-0.14573 0.359668,-0.14572 0.675928,-0.44028 v 0.65422 q -0.328662,0.22325 -0.697632,0.33487 -0.365869,0.11162 -0.775146,0.11162 -1.051099,0 -1.655713,-0.64182 -0.604615,-0.64492 -0.604615,-1.75804 0,-1.11621 0.604615,-1.75803 0.604614,-0.64492 1.655713,-0.64492 0.415478,0 0.781347,0.11162 0.36897,0.10852 0.691431,0.32866 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5305" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 20.444377,179.51801 q -0.69143,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288355,-0.33796 0.288355,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570507 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291456,0.14883 -0.713135,0.14883 -0.533301,0 -0.849561,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799952 v -0.0558 q 0,-0.39378 -0.26045,-0.60772 -0.257348,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.579809,0.0713 -0.282154,0.0713 -0.542603,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294556,-0.062 0.573608,-0.062 0.753443,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5307" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 24.769695,178.32429 q -0.09612,-0.0558 -0.21084,-0.0806 -0.111621,-0.0279 -0.248047,-0.0279 -0.483691,0 -0.744141,0.31626 -0.257348,0.31315 -0.257348,0.90227 v 1.82934 H 22.73571 v -3.47265 h 0.573609 v 0.5395 q 0.179834,-0.31626 0.468188,-0.46819 0.288355,-0.15503 0.700733,-0.15503 0.05891,0 0.130224,0.009 0.07131,0.006 0.15813,0.0217 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5309" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 27.541618,178.31808 v -1.87895 h 0.570508 v 4.82451 h -0.570508 v -0.5209 q -0.179834,0.31006 -0.455786,0.46199 -0.272851,0.14883 -0.657324,0.14883 -0.629419,0 -1.026294,-0.5023 -0.393774,-0.50229 -0.393774,-1.32085 0,-0.81855 0.393774,-1.32085 0.396875,-0.50229 1.026294,-0.50229 0.384473,0 0.657324,0.15193 0.275952,0.14883 0.455786,0.45888 z m -1.944067,1.21233 q 0,0.62942 0.257349,0.98909 0.260449,0.35657 0.713134,0.35657 0.452686,0 0.713135,-0.35657 0.260449,-0.35967 0.260449,-0.98909 0,-0.62942 -0.260449,-0.98598 -0.260449,-0.35967 -0.713135,-0.35967 -0.452685,0 -0.713134,0.35967 -0.257349,0.35656 -0.257349,0.98598 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5311" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 29.287248,177.79099 h 0.570508 v 3.47265 h -0.570508 z m 0,-1.35186 h 0.570508 v 0.72244 h -0.570508 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5313" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 33.938127,179.16765 v 2.09599 h -0.570508 v -2.07739 q 0,-0.49299 -0.192236,-0.73794 -0.192236,-0.24495 -0.576709,-0.24495 -0.461987,0 -0.728638,0.29456 -0.26665,0.29455 -0.26665,0.80305 v 1.96267 h -0.573608 v -3.47265 h 0.573608 v 0.5395 q 0.204639,-0.31316 0.480591,-0.46819 0.279053,-0.15503 0.641821,-0.15503 0.598413,0 0.905371,0.37207 0.306958,0.36897 0.306958,1.08831 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5315" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 36.654241,179.51801 q -0.691431,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288354,-0.33796 0.288354,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570508 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291455,0.14883 -0.713135,0.14883 -0.5333,0 -0.84956,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799951 v -0.0558 q 0,-0.39378 -0.260449,-0.60772 -0.257349,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.57981,0.0713 -0.282153,0.0713 -0.542602,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294555,-0.062 0.573608,-0.062 0.753442,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5317" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 38.967278,176.43913 h 0.570508 v 4.82451 h -0.570508 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5319" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<text | |||
xml:space="preserve" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
x="1.5767164" | |||
y="188.65312" | |||
id="text845"><tspan | |||
sodipodi:role="line" | |||
id="tspan843" | |||
x="1.5767164" | |||
y="188.65312" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332">Carla Plugin Host</tspan></text> | |||
</g> | |||
</svg> |
@@ -40,6 +40,15 @@ | |||
"Visual" | |||
] | |||
}, | |||
{ | |||
"slug": "Carla", | |||
"disabled": false, | |||
"name": "Carla Plugin Host", | |||
"description": "A modular plugin host within Cardinal", | |||
"tags": [ | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "Ildaeil", | |||
"disabled": false, | |||
@@ -0,0 +1,205 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="45.720001mm" | |||
height="128.5mm" | |||
viewBox="0 0 45.720001 128.5" | |||
version="1.1" | |||
id="svg4620" | |||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" | |||
sodipodi:docname="Carla.svg"> | |||
<defs | |||
id="defs4614"> | |||
<style | |||
id="style6" | |||
type="text/css"> | |||
.str0 {stroke:#565656;stroke-width:0.0966867} | |||
.str1 {stroke:#4F4F4F;stroke-width:0.193345} | |||
.fil0 {fill:none} | |||
.fil2 {fill:#2B2A29} | |||
.fil1 {fill:#6B6B6B} | |||
</style> | |||
</defs> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.4" | |||
inkscape:cx="282.27616" | |||
inkscape:cy="202.15722" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1026" | |||
inkscape:window-x="1920" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="1" /> | |||
<metadata | |||
id="metadata4617"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<g | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(0,-168.5)"> | |||
<g | |||
style="fill-rule:evenodd" | |||
id="g5299" | |||
transform="matrix(6.342689,0,0,6.342689,5.4472535,175.6457)"> | |||
<g | |||
transform="translate(-1.6191379e-5,-0.08553947)" | |||
id="Layer_x0020_1"> | |||
<metadata | |||
id="CorelCorpID_0Corel-Layer" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1" | |||
id="circle10" | |||
r="0.15916" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str0" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1" | |||
id="circle12" | |||
r="0.42853901" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str1" /> | |||
</g> | |||
</g> | |||
<g | |||
aria-label="Cardinal" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
id="text5303" | |||
transform="translate(-0.09449404,0.14174107)"> | |||
<path | |||
d="m 17.923601,176.99103 v 0.66043 q -0.31626,-0.29456 -0.675928,-0.44028 -0.356567,-0.14573 -0.759643,-0.14573 -0.79375,0 -1.21543,0.48679 -0.42168,0.48369 -0.42168,1.40146 0,0.91468 0.42168,1.40147 0.42168,0.48369 1.21543,0.48369 0.403076,0 0.759643,-0.14573 0.359668,-0.14572 0.675928,-0.44028 v 0.65422 q -0.328662,0.22325 -0.697632,0.33487 -0.365869,0.11162 -0.775146,0.11162 -1.051099,0 -1.655713,-0.64182 -0.604615,-0.64492 -0.604615,-1.75804 0,-1.11621 0.604615,-1.75803 0.604614,-0.64492 1.655713,-0.64492 0.415478,0 0.781347,0.11162 0.36897,0.10852 0.691431,0.32866 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5305" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 20.444377,179.51801 q -0.69143,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288355,-0.33796 0.288355,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570507 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291456,0.14883 -0.713135,0.14883 -0.533301,0 -0.849561,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799952 v -0.0558 q 0,-0.39378 -0.26045,-0.60772 -0.257348,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.579809,0.0713 -0.282154,0.0713 -0.542603,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294556,-0.062 0.573608,-0.062 0.753443,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5307" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 24.769695,178.32429 q -0.09612,-0.0558 -0.21084,-0.0806 -0.111621,-0.0279 -0.248047,-0.0279 -0.483691,0 -0.744141,0.31626 -0.257348,0.31315 -0.257348,0.90227 v 1.82934 H 22.73571 v -3.47265 h 0.573609 v 0.5395 q 0.179834,-0.31626 0.468188,-0.46819 0.288355,-0.15503 0.700733,-0.15503 0.05891,0 0.130224,0.009 0.07131,0.006 0.15813,0.0217 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5309" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 27.541618,178.31808 v -1.87895 h 0.570508 v 4.82451 h -0.570508 v -0.5209 q -0.179834,0.31006 -0.455786,0.46199 -0.272851,0.14883 -0.657324,0.14883 -0.629419,0 -1.026294,-0.5023 -0.393774,-0.50229 -0.393774,-1.32085 0,-0.81855 0.393774,-1.32085 0.396875,-0.50229 1.026294,-0.50229 0.384473,0 0.657324,0.15193 0.275952,0.14883 0.455786,0.45888 z m -1.944067,1.21233 q 0,0.62942 0.257349,0.98909 0.260449,0.35657 0.713134,0.35657 0.452686,0 0.713135,-0.35657 0.260449,-0.35967 0.260449,-0.98909 0,-0.62942 -0.260449,-0.98598 -0.260449,-0.35967 -0.713135,-0.35967 -0.452685,0 -0.713134,0.35967 -0.257349,0.35656 -0.257349,0.98598 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5311" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 29.287248,177.79099 h 0.570508 v 3.47265 h -0.570508 z m 0,-1.35186 h 0.570508 v 0.72244 h -0.570508 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5313" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 33.938127,179.16765 v 2.09599 h -0.570508 v -2.07739 q 0,-0.49299 -0.192236,-0.73794 -0.192236,-0.24495 -0.576709,-0.24495 -0.461987,0 -0.728638,0.29456 -0.26665,0.29455 -0.26665,0.80305 v 1.96267 h -0.573608 v -3.47265 h 0.573608 v 0.5395 q 0.204639,-0.31316 0.480591,-0.46819 0.279053,-0.15503 0.641821,-0.15503 0.598413,0 0.905371,0.37207 0.306958,0.36897 0.306958,1.08831 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5315" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 36.654241,179.51801 q -0.691431,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288354,-0.33796 0.288354,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570508 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291455,0.14883 -0.713135,0.14883 -0.5333,0 -0.84956,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799951 v -0.0558 q 0,-0.39378 -0.260449,-0.60772 -0.257349,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.57981,0.0713 -0.282153,0.0713 -0.542602,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294555,-0.062 0.573608,-0.062 0.753442,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5317" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 38.967278,176.43913 h 0.570508 v 4.82451 h -0.570508 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
id="path5319" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
aria-label="Carla Plugin Host" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
id="text845"> | |||
<path | |||
d="m 4.7575732,185.32998 v 0.51367 q -0.2459799,-0.2291 -0.5257216,-0.34245 -0.2773302,-0.11334 -0.5908339,-0.11334 -0.6173611,0 -0.9453342,0.37862 -0.3279731,0.3762 -0.3279731,1.09002 0,0.71142 0.3279731,1.09003 0.3279731,0.37621 0.9453342,0.37621 0.3135037,0 0.5908339,-0.11335 0.2797417,-0.11334 0.5257216,-0.34244 v 0.50884 q -0.2556261,0.17363 -0.5426026,0.26045 -0.2845649,0.0868 -0.6028917,0.0868 -0.8175212,0 -1.2877767,-0.4992 -0.4702556,-0.5016 -0.4702556,-1.36736 0,-0.86816 0.4702556,-1.36735 0.4702555,-0.50161 1.2877767,-0.50161 0.32315,0 0.6077149,0.0868 0.2869764,0.0844 0.5377794,0.25562 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path829" /> | |||
<path | |||
d="m 6.7181771,187.29541 q -0.5377794,0 -0.7451742,0.12299 -0.2073947,0.12299 -0.2073947,0.41961 0,0.23634 0.1543402,0.37621 0.1567519,0.13746 0.4244358,0.13746 0.3689697,0 0.5908339,-0.26045 0.2242757,-0.26286 0.2242757,-0.69695 v -0.0989 z m 0.885045,-0.18328 v 1.54099 H 7.1594938 v -0.40996 q -0.1519287,0.24598 -0.378616,0.36414 -0.2266873,0.11576 -0.5546604,0.11576 -0.4147895,0 -0.6607693,-0.23151 -0.2435683,-0.23393 -0.2435683,-0.6246 0,-0.45579 0.3038575,-0.6873 0.306269,-0.23151 0.9115723,-0.23151 h 0.6221842 v -0.0434 q 0,-0.30627 -0.2025716,-0.47267 -0.20016,-0.16881 -0.5643067,-0.16881 -0.2315104,0 -0.450963,0.0555 -0.2194526,0.0555 -0.4220242,0.16639 v -0.40996 q 0.2435683,-0.0941 0.4726671,-0.13987 0.2290989,-0.0482 0.4461399,-0.0482 0.5860108,0 0.8753988,0.30386 0.289388,0.30386 0.289388,0.92122 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path831" /> | |||
<path | |||
d="m 10.082313,186.36696 q -0.07476,-0.0434 -0.1639867,-0.0627 -0.086816,-0.0217 -0.1929253,-0.0217 -0.3762045,0 -0.5787761,0.24598 -0.20016,0.24357 -0.20016,0.70177 v 1.42282 H 8.500325 v -2.70095 h 0.4461399 v 0.41961 q 0.1398709,-0.24598 0.3641466,-0.36415 0.2242757,-0.12058 0.5450141,-0.12058 0.04582,0 0.1012858,0.007 0.055466,0.005 0.1229896,0.0169 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path833" /> | |||
<path | |||
d="m 10.547745,184.90072 h 0.443728 v 3.7524 h -0.443728 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path835" /> | |||
<path | |||
d="m 13.147414,187.29541 q -0.537779,0 -0.745174,0.12299 -0.207394,0.12299 -0.207394,0.41961 0,0.23634 0.15434,0.37621 0.156752,0.13746 0.424436,0.13746 0.368969,0 0.590833,-0.26045 0.224276,-0.26286 0.224276,-0.69695 v -0.0989 z m 0.885046,-0.18328 v 1.54099 h -0.443729 v -0.40996 q -0.151929,0.24598 -0.378616,0.36414 -0.226687,0.11576 -0.55466,0.11576 -0.41479,0 -0.66077,-0.23151 -0.243568,-0.23393 -0.243568,-0.6246 0,-0.45579 0.303858,-0.6873 0.306269,-0.23151 0.911572,-0.23151 h 0.622184 v -0.0434 q 0,-0.30627 -0.202571,-0.47267 -0.20016,-0.16881 -0.564307,-0.16881 -0.231511,0 -0.450963,0.0555 -0.219453,0.0555 -0.422024,0.16639 v -0.40996 q 0.243568,-0.0941 0.472667,-0.13987 0.229099,-0.0482 0.44614,-0.0482 0.58601,0 0.875398,0.30386 0.289389,0.30386 0.289389,0.92122 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path837" /> | |||
<path | |||
d="m 17.022802,185.45297 v 1.35289 h 0.612538 q 0.340031,0 0.525722,-0.17604 0.18569,-0.17605 0.18569,-0.50161 0,-0.32315 -0.18569,-0.49919 -0.185691,-0.17605 -0.525722,-0.17605 z m -0.487137,-0.40032 h 1.099675 q 0.605303,0 0.913984,0.27492 0.311092,0.27251 0.311092,0.80064 0,0.53296 -0.311092,0.80546 -0.308681,0.27251 -0.913984,0.27251 h -0.612538 v 1.44694 h -0.487137 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path839" /> | |||
<path | |||
d="m 19.494658,184.90072 h 0.443728 v 3.7524 h -0.443728 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path841" /> | |||
<path | |||
d="m 20.821021,187.58721 v -1.63504 h 0.443728 v 1.61816 q 0,0.38344 0.149517,0.57636 0.149517,0.19052 0.448552,0.19052 0.359323,0 0.566718,-0.2291 0.209806,-0.2291 0.209806,-0.6246 v -1.53134 h 0.443729 v 2.70095 h -0.443729 v -0.41479 q -0.161575,0.24598 -0.376204,0.36656 -0.212218,0.11817 -0.494371,0.11817 -0.465433,0 -0.706589,-0.28939 -0.241157,-0.28939 -0.241157,-0.84646 z m 1.116555,-1.70016 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path843" /> | |||
<path | |||
d="m 25.774378,187.27129 q 0,-0.48231 -0.20016,-0.74758 -0.197748,-0.26527 -0.557072,-0.26527 -0.356912,0 -0.557072,0.26527 -0.197748,0.26527 -0.197748,0.74758 0,0.47991 0.197748,0.74518 0.20016,0.26527 0.557072,0.26527 0.359324,0 0.557072,-0.26527 0.20016,-0.26527 0.20016,-0.74518 z m 0.443729,1.04662 q 0,0.68971 -0.306269,1.02492 -0.306269,0.33762 -0.9381,0.33762 -0.233922,0 -0.441317,-0.0362 -0.207395,-0.0338 -0.402731,-0.10611 v -0.43167 q 0.195336,0.10611 0.38585,0.15675 0.190514,0.0506 0.388263,0.0506 0.436493,0 0.653534,-0.2291 0.217041,-0.22668 0.217041,-0.68729 v -0.21946 q -0.137459,0.23875 -0.352089,0.35692 -0.214629,0.11816 -0.513663,0.11816 -0.496783,0 -0.800641,-0.37861 -0.303857,-0.37862 -0.303857,-1.00322 0,-0.627 0.303857,-1.00562 0.303858,-0.37862 0.800641,-0.37862 0.299034,0 0.513663,0.11817 0.21463,0.11817 0.352089,0.35691 v -0.40996 h 0.443729 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path845" /> | |||
<path | |||
d="m 27.13209,185.95217 h 0.443728 v 2.70095 H 27.13209 Z m 0,-1.05145 h 0.443728 v 0.5619 H 27.13209 Z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path847" /> | |||
<path | |||
d="m 30.749441,187.0229 v 1.63022 h -0.443728 v -1.61575 q 0,-0.38344 -0.149517,-0.57395 -0.149517,-0.19051 -0.448551,-0.19051 -0.359324,0 -0.566719,0.22909 -0.207394,0.2291 -0.207394,0.6246 v 1.52652 h -0.44614 v -2.70095 h 0.44614 v 0.41961 q 0.159163,-0.24357 0.373792,-0.36415 0.217042,-0.12058 0.499195,-0.12058 0.465432,0 0.704177,0.28939 0.238745,0.28698 0.238745,0.84646 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path849" /> | |||
<path | |||
d="m 33.223709,185.05265 h 0.487137 v 1.47588 h 1.77009 v -1.47588 h 0.487136 v 3.60047 h -0.487136 v -1.71462 h -1.77009 v 1.71462 h -0.487137 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path851" /> | |||
<path | |||
d="m 37.964848,186.26326 q -0.356911,0 -0.564306,0.27974 -0.207395,0.27733 -0.207395,0.76206 0,0.48472 0.204983,0.76446 0.207395,0.27733 0.566718,0.27733 0.354501,0 0.561896,-0.27974 0.207394,-0.27974 0.207394,-0.76205 0,-0.47991 -0.207394,-0.75965 -0.207395,-0.28215 -0.561896,-0.28215 z m 0,-0.37621 q 0.578776,0 0.909161,0.37621 0.330385,0.3762 0.330385,1.0418 0,0.66318 -0.330385,1.04179 -0.330385,0.37621 -0.909161,0.37621 -0.581187,0 -0.911572,-0.37621 -0.327973,-0.37861 -0.327973,-1.04179 0,-0.6656 0.327973,-1.0418 0.330385,-0.37621 0.911572,-0.37621 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path853" /> | |||
<path | |||
d="m 41.661781,186.03175 v 0.41961 q -0.188102,-0.0965 -0.390673,-0.14469 -0.202572,-0.0482 -0.419613,-0.0482 -0.330385,0 -0.496783,0.10128 -0.163986,0.10129 -0.163986,0.30386 0,0.15434 0.118166,0.24357 0.118167,0.0868 0.475079,0.1664 l 0.151929,0.0338 q 0.472667,0.10128 0.670415,0.28697 0.20016,0.18328 0.20016,0.51367 0,0.3762 -0.299034,0.59565 -0.296623,0.21946 -0.817521,0.21946 -0.217041,0 -0.453375,-0.0434 -0.233922,-0.041 -0.494371,-0.1254 v -0.4582 q 0.24598,0.12781 0.484725,0.19293 0.238745,0.0627 0.472667,0.0627 0.313504,0 0.482314,-0.10611 0.168809,-0.10852 0.168809,-0.30386 0,-0.18087 -0.12299,-0.27733 -0.120578,-0.0965 -0.532956,-0.18569 l -0.15434,-0.0362 q -0.412378,-0.0868 -0.595657,-0.26528 -0.183279,-0.18086 -0.183279,-0.49437 0,-0.38103 0.270095,-0.58842 0.270096,-0.2074 0.766878,-0.2074 0.24598,0 0.463021,0.0362 0.217041,0.0362 0.40032,0.10852 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path855" /> | |||
<path | |||
d="m 42.951971,185.18529 v 0.76688 h 0.913984 v 0.34485 h -0.913984 v 1.46623 q 0,0.33039 0.08923,0.42444 0.09164,0.0941 0.368969,0.0941 h 0.455787 v 0.37138 h -0.455787 q -0.513663,0 -0.709,-0.19051 -0.195337,-0.19293 -0.195337,-0.69936 v -1.46623 h -0.325562 v -0.34485 h 0.325562 v -0.76688 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458332" | |||
id="path857" /> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,553 @@ | |||
/* | |||
* DISTRHO Cardinal Plugin | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 3 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the LICENSE file. | |||
*/ | |||
#include "plugincontext.hpp" | |||
#include "CarlaNativePlugin.h" | |||
#include "CarlaBackendUtils.hpp" | |||
#include "CarlaEngine.hpp" | |||
#include "water/streams/MemoryOutputStream.h" | |||
#include "water/xml/XmlDocument.h" | |||
extern "C" { | |||
// private method that takes ownership, we can use it to avoid superfulous allocations | |||
json_t *jsonp_stringn_nocheck_own(const char* value, size_t len); | |||
} | |||
#define BUFFER_SIZE 128 | |||
// generates a warning if this is defined as anything else | |||
#define CARLA_API | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
using namespace CarlaBackend; | |||
static uint32_t host_get_buffer_size(NativeHostHandle); | |||
static double host_get_sample_rate(NativeHostHandle); | |||
static bool host_is_offline(NativeHostHandle); | |||
static const NativeTimeInfo* host_get_time_info(NativeHostHandle handle); | |||
static bool host_write_midi_event(NativeHostHandle handle, const NativeMidiEvent* event); | |||
static void host_ui_parameter_changed(NativeHostHandle handle, uint32_t index, float value); | |||
static void host_ui_midi_program_changed(NativeHostHandle handle, uint8_t channel, uint32_t bank, uint32_t program); | |||
static void host_ui_custom_data_changed(NativeHostHandle handle, const char* key, const char* value); | |||
static void host_ui_closed(NativeHostHandle handle); | |||
static const char* host_ui_open_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | |||
static const char* host_ui_save_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | |||
static intptr_t host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt); | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
struct CarlaModule : Module { | |||
enum ParamIds { | |||
BIPOLAR_INPUTS, | |||
BIPOLAR_OUTPUTS, | |||
NUM_PARAMS | |||
}; | |||
enum InputIds { | |||
AUDIO_INPUT1, | |||
AUDIO_INPUT2, | |||
CV_INPUT1, | |||
NUM_INPUTS = CV_INPUT1 + 8 | |||
}; | |||
enum OutputIds { | |||
AUDIO_OUTPUT1, | |||
AUDIO_OUTPUT2, | |||
CV_OUTPUT1, | |||
NUM_OUTPUTS = CV_OUTPUT1 + 8 | |||
}; | |||
enum LightIds { | |||
NUM_LIGHTS | |||
}; | |||
CardinalPluginContext* const pcontext; | |||
const NativePluginDescriptor* fCarlaPluginDescriptor = nullptr; | |||
NativePluginHandle fCarlaPluginHandle = nullptr; | |||
NativeHostDescriptor fCarlaHostDescriptor = {}; | |||
CarlaHostHandle fCarlaHostHandle = nullptr; | |||
mutable NativeTimeInfo fCarlaTimeInfo; | |||
void* fUI = nullptr; | |||
float dataIn[NUM_INPUTS][BUFFER_SIZE]; | |||
float dataOut[NUM_OUTPUTS][BUFFER_SIZE]; | |||
float* dataInPtr[NUM_INPUTS]; | |||
float* dataOutPtr[NUM_OUTPUTS]; | |||
unsigned audioDataFill = 0; | |||
std::string patchStorage; | |||
CarlaModule() | |||
: pcontext(reinterpret_cast<CardinalPluginContext*>(APP)) | |||
{ | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam<SwitchQuantity>(BIPOLAR_INPUTS, 0.f, 1.f, 1.f, "Bipolar CV Inputs")->randomizeEnabled = false; | |||
configParam<SwitchQuantity>(BIPOLAR_OUTPUTS, 0.f, 1.f, 1.f, "Bipolar CV Outputs")->randomizeEnabled = false; | |||
for (uint i=0; i<NUM_INPUTS; ++i) | |||
dataInPtr[i] = dataIn[i]; | |||
for (uint i=0; i<NUM_OUTPUTS; ++i) | |||
dataOutPtr[i] = dataOut[i]; | |||
for (uint i=0; i<2; ++i) | |||
{ | |||
const char name[] = { 'A','u','d','i','o',' ','#',static_cast<char>('0'+i+1),'\0' }; | |||
configInput(i, name); | |||
configOutput(i, name); | |||
} | |||
for (uint i=2; i<NUM_INPUTS; ++i) | |||
{ | |||
const char name[] = { 'C','V',' ','#',static_cast<char>('0'+i-1),'\0' }; | |||
configInput(i, name); | |||
configOutput(i, name); | |||
} | |||
std::memset(dataOut, 0, sizeof(dataOut)); | |||
fCarlaPluginDescriptor = carla_get_native_patchbay_cv8_plugin(); | |||
DISTRHO_SAFE_ASSERT_RETURN(fCarlaPluginDescriptor != nullptr,); | |||
memset(&fCarlaHostDescriptor, 0, sizeof(fCarlaHostDescriptor)); | |||
memset(&fCarlaTimeInfo, 0, sizeof(fCarlaTimeInfo)); | |||
fCarlaHostDescriptor.handle = this; | |||
#ifdef CARLA_OS_MAC | |||
fCarlaHostDescriptor.resourceDir = "/Applications/Carla.app/Contents/MacOS/resources"; | |||
#else | |||
fCarlaHostDescriptor.resourceDir = "/usr/share/carla/resources"; | |||
#endif | |||
fCarlaHostDescriptor.uiName = "Carla"; | |||
fCarlaHostDescriptor.uiParentId = 0; | |||
fCarlaHostDescriptor.get_buffer_size = host_get_buffer_size; | |||
fCarlaHostDescriptor.get_sample_rate = host_get_sample_rate; | |||
fCarlaHostDescriptor.is_offline = host_is_offline; | |||
fCarlaHostDescriptor.get_time_info = host_get_time_info; | |||
fCarlaHostDescriptor.write_midi_event = host_write_midi_event; | |||
fCarlaHostDescriptor.ui_parameter_changed = host_ui_parameter_changed; | |||
fCarlaHostDescriptor.ui_midi_program_changed = host_ui_midi_program_changed; | |||
fCarlaHostDescriptor.ui_custom_data_changed = host_ui_custom_data_changed; | |||
fCarlaHostDescriptor.ui_closed = host_ui_closed; | |||
fCarlaHostDescriptor.ui_open_file = host_ui_open_file; | |||
fCarlaHostDescriptor.ui_save_file = host_ui_save_file; | |||
fCarlaHostDescriptor.dispatcher = host_dispatcher; | |||
fCarlaPluginHandle = fCarlaPluginDescriptor->instantiate(&fCarlaHostDescriptor); | |||
DISTRHO_SAFE_ASSERT_RETURN(fCarlaPluginHandle != nullptr,); | |||
fCarlaHostHandle = carla_create_native_plugin_host_handle(fCarlaPluginDescriptor, fCarlaPluginHandle); | |||
DISTRHO_SAFE_ASSERT_RETURN(fCarlaHostHandle != nullptr,); | |||
#ifdef CARLA_OS_MAC | |||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS"); | |||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources"); | |||
#else | |||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/usr/lib/carla"); | |||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/share/carla/resources"); | |||
#endif | |||
fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_HOST_USES_EMBED, | |||
0, 0, nullptr, 0.0f); | |||
fCarlaPluginDescriptor->activate(fCarlaPluginHandle); | |||
} | |||
~CarlaModule() override | |||
{ | |||
if (fCarlaPluginHandle != nullptr) | |||
fCarlaPluginDescriptor->deactivate(fCarlaPluginHandle); | |||
if (fCarlaHostHandle != nullptr) | |||
carla_host_handle_free(fCarlaHostHandle); | |||
if (fCarlaPluginHandle != nullptr) | |||
fCarlaPluginDescriptor->cleanup(fCarlaPluginHandle); | |||
} | |||
const NativeTimeInfo* hostGetTimeInfo() const noexcept | |||
{ | |||
if (pcontext != nullptr) | |||
{ | |||
fCarlaTimeInfo.playing = pcontext->playing; | |||
fCarlaTimeInfo.frame = pcontext->frame; | |||
fCarlaTimeInfo.bbt.valid = pcontext->bbtValid; | |||
fCarlaTimeInfo.bbt.bar = pcontext->bar; | |||
fCarlaTimeInfo.bbt.beat = pcontext->beat; | |||
fCarlaTimeInfo.bbt.tick = pcontext->tick; | |||
fCarlaTimeInfo.bbt.barStartTick = pcontext->barStartTick; | |||
fCarlaTimeInfo.bbt.beatsPerBar = pcontext->beatsPerBar; | |||
fCarlaTimeInfo.bbt.beatType = pcontext->beatType; | |||
fCarlaTimeInfo.bbt.ticksPerBeat = pcontext->ticksPerBeat; | |||
fCarlaTimeInfo.bbt.beatsPerMinute = pcontext->beatsPerMinute; | |||
} | |||
return &fCarlaTimeInfo; | |||
} | |||
intptr_t hostDispatcher(const NativeHostDispatcherOpcode opcode, | |||
const int32_t index, const intptr_t value, void* const ptr, const float opt) | |||
{ | |||
switch (opcode) | |||
{ | |||
// cannnot be supported | |||
case NATIVE_HOST_OPCODE_HOST_IDLE: | |||
break; | |||
// other stuff | |||
case NATIVE_HOST_OPCODE_NULL: | |||
case NATIVE_HOST_OPCODE_UPDATE_PARAMETER: | |||
case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: | |||
case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: | |||
case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: | |||
case NATIVE_HOST_OPCODE_RELOAD_ALL: | |||
case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: | |||
case NATIVE_HOST_OPCODE_INTERNAL_PLUGIN: | |||
case NATIVE_HOST_OPCODE_QUEUE_INLINE_DISPLAY: | |||
case NATIVE_HOST_OPCODE_UI_TOUCH_PARAMETER: | |||
case NATIVE_HOST_OPCODE_REQUEST_IDLE: | |||
case NATIVE_HOST_OPCODE_UI_RESIZE: | |||
case NATIVE_HOST_OPCODE_PREVIEW_BUFFER_DATA: | |||
// TESTING | |||
d_stdout("dispatcher %i, %i, %li, %p, %f", opcode, index, value, ptr, opt); | |||
break; | |||
case NATIVE_HOST_OPCODE_GET_FILE_PATH: | |||
return (intptr_t)(void*)patchStorage.c_str(); | |||
break; | |||
} | |||
return 0; | |||
} | |||
json_t* dataToJson() override | |||
{ | |||
if (fCarlaHostHandle == nullptr) | |||
return nullptr; | |||
CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); | |||
water::MemoryOutputStream projectState; | |||
engine->saveProjectInternal(projectState); | |||
const size_t dataSize = projectState.getDataSize(); | |||
return jsonp_stringn_nocheck_own(static_cast<const char*>(projectState.getDataAndRelease()), dataSize); | |||
} | |||
void dataFromJson(json_t* const rootJ) override | |||
{ | |||
if (fCarlaHostHandle == nullptr) | |||
return; | |||
const char* const projectState = json_string_value(rootJ); | |||
DISTRHO_SAFE_ASSERT_RETURN(projectState != nullptr,); | |||
CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); | |||
water::XmlDocument xml(projectState); | |||
engine->loadProjectInternal(xml, true); | |||
} | |||
void onAdd(const AddEvent&) override | |||
{ | |||
patchStorage = getPatchStorageDirectory(); | |||
} | |||
void process(const ProcessArgs&) override | |||
{ | |||
if (fCarlaPluginHandle == nullptr) | |||
return; | |||
const float inputOffset = params[BIPOLAR_INPUTS].getValue() > 0.1f ? -5.0f : 0.0f; | |||
const float outputOffset = params[BIPOLAR_OUTPUTS].getValue() > 0.1f ? -5.0f : 0.0f; | |||
const unsigned k = audioDataFill++; | |||
for (uint i=0; i<2; ++i) | |||
dataIn[i][k] = inputs[i].getVoltage() * 0.1f; | |||
for (uint i=2; i<NUM_INPUTS; ++i) | |||
dataIn[i][k] = inputs[i].getVoltage() + inputOffset; | |||
for (uint i=0; i<2; ++i) | |||
outputs[i].setVoltage(dataOut[i][k] * 10.0f); | |||
for (uint i=2; i<NUM_OUTPUTS; ++i) | |||
outputs[i].setVoltage(dataOut[i][k] + outputOffset); | |||
if (audioDataFill == BUFFER_SIZE) | |||
{ | |||
audioDataFill = 0; | |||
fCarlaPluginDescriptor->process(fCarlaPluginHandle, dataInPtr, dataOutPtr, BUFFER_SIZE, nullptr, 0); | |||
} | |||
} | |||
void onSampleRateChange(const SampleRateChangeEvent& e) override | |||
{ | |||
if (fCarlaPluginHandle == nullptr) | |||
return; | |||
fCarlaPluginDescriptor->deactivate(fCarlaPluginHandle); | |||
fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, | |||
0, 0, nullptr, e.sampleRate); | |||
fCarlaPluginDescriptor->activate(fCarlaPluginHandle); | |||
} | |||
}; | |||
static_assert((int)CarlaModule::NUM_INPUTS == (int)CarlaModule::NUM_OUTPUTS, "inputs must match outputs"); | |||
// ----------------------------------------------------------------------------------------------------------- | |||
static uint32_t host_get_buffer_size(const NativeHostHandle handle) | |||
{ | |||
return BUFFER_SIZE; | |||
} | |||
static double host_get_sample_rate(const NativeHostHandle handle) | |||
{ | |||
CardinalPluginContext* const pcontext = static_cast<CarlaModule*>(handle)->pcontext; | |||
DISTRHO_SAFE_ASSERT_RETURN(pcontext != nullptr, 48000.0); | |||
return pcontext->sampleRate; | |||
} | |||
static bool host_is_offline(NativeHostHandle) | |||
{ | |||
return false; | |||
} | |||
static const NativeTimeInfo* host_get_time_info(const NativeHostHandle handle) | |||
{ | |||
return static_cast<CarlaModule*>(handle)->hostGetTimeInfo(); | |||
} | |||
static bool host_write_midi_event(const NativeHostHandle handle, const NativeMidiEvent* const event) | |||
{ | |||
return false; | |||
} | |||
static void host_ui_midi_program_changed(NativeHostHandle handle, uint8_t channel, uint32_t bank, uint32_t program) | |||
{ | |||
d_stdout("%s %p %u %u %u", __FUNCTION__, handle, channel, bank, program); | |||
} | |||
static void host_ui_custom_data_changed(NativeHostHandle handle, const char* key, const char* value) | |||
{ | |||
d_stdout("%s %p %s %s", __FUNCTION__, handle, key, value); | |||
} | |||
static const char* host_ui_save_file(NativeHostHandle, bool, const char*, const char*) | |||
{ | |||
return nullptr; | |||
} | |||
static intptr_t host_dispatcher(const NativeHostHandle handle, const NativeHostDispatcherOpcode opcode, | |||
const int32_t index, const intptr_t value, void* const ptr, const float opt) | |||
{ | |||
return static_cast<CarlaModule*>(handle)->hostDispatcher(opcode, index, value, ptr, opt); | |||
} | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
struct CarlaModuleWidget : ModuleWidget { | |||
static constexpr const float startX_In = 14.0f; | |||
static constexpr const float startX_Out = 96.0f; | |||
static constexpr const float startY = 74.0f; | |||
static constexpr const float padding = 29.0f; | |||
static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.25f; | |||
CarlaModule* const module; | |||
bool visible = false; | |||
CarlaModuleWidget(CarlaModule* const m) | |||
: ModuleWidget(), | |||
module(m) | |||
{ | |||
setModule(module); | |||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Carla.svg"))); | |||
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0))); | |||
addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
for (uint i=0; i<CarlaModule::NUM_INPUTS; ++i) | |||
addInput(createInput<PJ301MPort>(Vec(startX_In, startY + padding * i), module, i)); | |||
for (uint i=0; i<CarlaModule::NUM_OUTPUTS; ++i) | |||
addOutput(createOutput<PJ301MPort>(Vec(startX_Out, startY + padding * i), module, i)); | |||
if (module != nullptr && module->fCarlaHostHandle != nullptr) | |||
{ | |||
const CarlaHostHandle handle = module->fCarlaHostHandle; | |||
char winIdStr[24]; | |||
std::snprintf(winIdStr, sizeof(winIdStr), "%lx", (ulong)module->pcontext->nativeWindowId); | |||
carla_set_engine_option(handle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, winIdStr); | |||
module->fCarlaHostDescriptor.uiParentId = module->pcontext->nativeWindowId; | |||
/* | |||
carla_set_engine_option(handle, ENGINE_OPTION_FRONTEND_UI_SCALE, getScaleFactor()*1000, nullptr); | |||
*/ | |||
module->fUI = this; | |||
} | |||
} | |||
~CarlaModuleWidget() override | |||
{ | |||
if (module != nullptr && module->fCarlaHostHandle != nullptr) | |||
{ | |||
module->fUI = nullptr; | |||
if (visible) | |||
module->fCarlaPluginDescriptor->ui_show(module->fCarlaPluginHandle, false); | |||
module->fCarlaHostDescriptor.uiParentId = 0; | |||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0"); | |||
} | |||
} | |||
void drawTextLine(NVGcontext* const vg, const uint offset, const char* const text) | |||
{ | |||
const float y = startY + offset * padding; | |||
nvgBeginPath(vg); | |||
nvgFillColor(vg, color::WHITE); | |||
nvgText(vg, middleX, y + 16, text, nullptr); | |||
} | |||
void onContextCreate(const ContextCreateEvent& e) override | |||
{ | |||
ModuleWidget::onContextCreate(e); | |||
if (module == nullptr || module->pcontext == nullptr || module->fCarlaHostHandle == nullptr) | |||
return; | |||
char winIdStr[24]; | |||
std::snprintf(winIdStr, sizeof(winIdStr), "%lx", (ulong)module->pcontext->nativeWindowId); | |||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, winIdStr); | |||
module->fCarlaHostDescriptor.uiParentId = module->pcontext->nativeWindowId; | |||
} | |||
void onContextDestroy(const ContextDestroyEvent& e) override | |||
{ | |||
if (module != nullptr && module->fCarlaHostHandle != nullptr) | |||
{ | |||
module->fCarlaHostDescriptor.uiParentId = 0; | |||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0"); | |||
} | |||
ModuleWidget::onContextDestroy(e); | |||
} | |||
void draw(const DrawArgs& args) override | |||
{ | |||
nvgBeginPath(args.vg); | |||
nvgRect(args.vg, 0, 0, box.size.x, box.size.y); | |||
nvgFillPaint(args.vg, nvgLinearGradient(args.vg, 0, 0, 0, box.size.y, | |||
nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); | |||
nvgFill(args.vg); | |||
nvgFontFaceId(args.vg, 0); | |||
nvgFontSize(args.vg, 11); | |||
nvgTextAlign(args.vg, NVG_ALIGN_CENTER); | |||
// nvgTextBounds(vg, 0, 0, text, nullptr, nullptr); | |||
nvgBeginPath(args.vg); | |||
nvgRoundedRect(args.vg, startX_Out - 4.0f, startY - 2.0f, padding, padding * CarlaModule::NUM_INPUTS, 4); | |||
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0)); | |||
nvgFill(args.vg); | |||
drawTextLine(args.vg, 0, "Audio 1"); | |||
drawTextLine(args.vg, 1, "Audio 2"); | |||
drawTextLine(args.vg, 2, "CV 1"); | |||
drawTextLine(args.vg, 3, "CV 2"); | |||
drawTextLine(args.vg, 4, "CV 3"); | |||
drawTextLine(args.vg, 5, "CV 4"); | |||
drawTextLine(args.vg, 6, "CV 5"); | |||
drawTextLine(args.vg, 7, "CV 6"); | |||
drawTextLine(args.vg, 8, "CV 7"); | |||
drawTextLine(args.vg, 9, "CV 8"); | |||
ModuleWidget::draw(args); | |||
} | |||
void step() override | |||
{ | |||
if (module != nullptr && module->fCarlaHostHandle != nullptr && visible) | |||
module->fCarlaPluginDescriptor->ui_idle(module->fCarlaPluginHandle); | |||
ModuleWidget::step(); | |||
} | |||
void showUI() | |||
{ | |||
visible = true; | |||
module->fCarlaPluginDescriptor->ui_show(module->fCarlaPluginHandle, true); | |||
} | |||
void appendContextMenu(ui::Menu* const menu) override | |||
{ | |||
menu->addChild(new ui::MenuSeparator); | |||
menu->addChild(createCheckMenuItem(visible ? "Bring GUI to Front" : "Show GUI", "", | |||
[=]() {return visible;}, | |||
[=]() {showUI();} | |||
)); | |||
menu->addChild(createCheckMenuItem("Bipolar Inputs", "", | |||
[=]() {return module->params[CarlaModule::BIPOLAR_INPUTS].getValue() > 0.1f;}, | |||
[=]() {module->params[CarlaModule::BIPOLAR_INPUTS].setValue(1.0f - module->params[CarlaModule::BIPOLAR_INPUTS].getValue());} | |||
)); | |||
menu->addChild(createCheckMenuItem("Bipolar Outputs", "", | |||
[=]() {return module->params[CarlaModule::BIPOLAR_OUTPUTS].getValue() > 0.1f;}, | |||
[=]() {module->params[CarlaModule::BIPOLAR_OUTPUTS].setValue(1.0f - module->params[CarlaModule::BIPOLAR_OUTPUTS].getValue());} | |||
)); | |||
} | |||
void onDoubleClick(const DoubleClickEvent& e) | |||
{ | |||
e.consume(this); | |||
showUI(); | |||
} | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
static void host_ui_closed(NativeHostHandle handle) | |||
{ | |||
if (CarlaModuleWidget* const ui = static_cast<CarlaModuleWidget*>(static_cast<CarlaModule*>(handle)->fUI)) | |||
ui->visible = false; | |||
} | |||
static void host_ui_parameter_changed(const NativeHostHandle handle, const uint32_t index, const float value) | |||
{ | |||
// if (CarlaWidget* const ui = static_cast<CarlaWidget*>(static_cast<CarlaModule*>(handle)->fUI)) | |||
// ui->changeParameterFromDSP(index, value); | |||
} | |||
static const char* host_ui_open_file(const NativeHostHandle handle, | |||
const bool isDir, const char* const title, const char* const filter) | |||
{ | |||
// if (CarlaWidget* const ui = static_cast<CarlaWidget*>(static_cast<CarlaModule*>(handle)->fUI)) | |||
// ui->openFileFromDSP(isDir, title, filter); | |||
return nullptr; | |||
} | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
Model* modelCarla = createModel<CarlaModule, CarlaModuleWidget>("Carla"); | |||
// -------------------------------------------------------------------------------------------------------------------- |
@@ -123,10 +123,8 @@ struct HostParametersWidget : ModuleWidget { | |||
const float y = startY + int(i % 6) * paddingV; | |||
nvgBeginPath(args.vg); | |||
nvgRoundedRect(args.vg, x - 1.0f, y - 19.0f, paddingH - 4.0f, paddingV - 4.0f, 4); | |||
nvgFillColor(args.vg, nvgRGBA(0xda, 0xda, 0xda, 0xf0)); | |||
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0)); | |||
nvgFill(args.vg); | |||
nvgStrokeColor(args.vg, nvgRGBA(0x4a, 0x4a, 0x4a, 0xc0)); | |||
nvgStroke(args.vg); | |||
if (text[1]++ == '9') | |||
{ | |||
@@ -53,8 +53,9 @@ struct HostTime : Module { | |||
if (CardinalPluginContext* const pcontext = reinterpret_cast<CardinalPluginContext*>(APP)) | |||
{ | |||
const bool playing = pcontext->playing; | |||
const bool playingWithBBT = playing && pcontext->bbtValid; | |||
if (playing) | |||
if (playingWithBBT) | |||
{ | |||
if (pcontext->tick == 0.0) | |||
{ | |||
@@ -95,8 +96,12 @@ struct HostTime : Module { | |||
const bool hasBar = pulseBar.process(args.sampleTime); | |||
const bool hasBeat = pulseBeat.process(args.sampleTime); | |||
const bool hasClock = pulseClock.process(args.sampleTime); | |||
const float beatPhase = pcontext->ticksPerBeat > 0.0 ? pcontext->tick / pcontext->ticksPerBeat : 0.0; | |||
const float barPhase = pcontext->beatsPerBar > 0 ? ((float) (pcontext->beat - 1) + beatPhase) / pcontext->beatsPerBar : 0.0; | |||
const float beatPhase = playingWithBBT && pcontext->ticksPerBeat > 0.0 | |||
? pcontext->tick / pcontext->ticksPerBeat | |||
: 0.0f; | |||
const float barPhase = playingWithBBT && pcontext->beatsPerBar > 0 | |||
? ((float) (pcontext->beat - 1) + beatPhase) / pcontext->beatsPerBar | |||
: 0.0f; | |||
lights[kHostTimeRolling].setBrightness(playing ? 1.0f : 0.0f); | |||
lights[kHostTimeReset].setBrightnessSmooth(hasReset ? 1.0f : 0.0f, args.sampleTime * 0.5f); | |||
@@ -155,10 +160,10 @@ struct HostTimeWidget : ModuleWidget { | |||
const float y = startY + offset * padding; | |||
nvgBeginPath(vg); | |||
nvgRoundedRect(vg, startX - 1.0f, y - 2.0f, box.size.x - (startX + 1) * 2, 28.0f, 4); | |||
nvgFillColor(vg, nvgRGBA(0xda, 0xda, 0xda, 0xf0)); | |||
nvgFillColor(vg, nvgRGB(0xd0, 0xd0, 0xd0)); | |||
nvgFill(vg); | |||
nvgStrokeColor(vg, nvgRGBA(0x4a, 0x4a, 0x4a, 0xc0)); | |||
nvgStroke(vg); | |||
// nvgStrokeColor(vg, nvgRGBA(0x4a, 0x4a, 0x4a, 0xc0)); | |||
// nvgStroke(vg); | |||
nvgBeginPath(vg); | |||
nvgFillColor(vg, color::BLACK); | |||
nvgText(vg, startX + 36, y + 16, text, nullptr); | |||
@@ -296,8 +296,9 @@ static uint32_t host_get_buffer_size(const NativeHostHandle handle) | |||
static double host_get_sample_rate(const NativeHostHandle handle) | |||
{ | |||
// TODO | |||
return 48000; // static_cast<IldaeilModule*>(handle)->getSampleRate(); | |||
CardinalPluginContext* const pcontext = static_cast<IldaeilModule*>(handle)->pcontext; | |||
DISTRHO_SAFE_ASSERT_RETURN(pcontext != nullptr, 48000.0); | |||
return pcontext->sampleRate; | |||
} | |||
static bool host_is_offline(NativeHostHandle) | |||
@@ -1140,7 +1141,7 @@ struct IldaeilModuleWidget : ModuleWidget { | |||
IldaeilModuleWidget(IldaeilModule* const module) | |||
{ | |||
setModule(module); | |||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/glBars.svg"))); | |||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Ildaeil.svg"))); | |||
if (module != nullptr && module->pcontext != nullptr) | |||
{ | |||
@@ -27,6 +27,7 @@ using namespace rack; | |||
extern Plugin* pluginInstance; | |||
extern Model* modelCarla; | |||
extern Model* modelGlBars; | |||
extern Model* modelIldaeil; | |||
extern Model* modelHostParameters; | |||
@@ -405,6 +405,7 @@ static void initStatic__Cardinal() | |||
const StaticPluginLoader spl(p, "Cardinal"); | |||
if (spl.ok()) | |||
{ | |||
p->addModel(modelCarla); | |||
p->addModel(modelGlBars); | |||
p->addModel(modelIldaeil); | |||
p->addModel(modelHostParameters); | |||
@@ -104,7 +104,7 @@ | |||
{ | |||
"id": 6, | |||
"plugin": "Cardinal", | |||
"model": "Ildaeil", | |||
"model": "Carla", | |||
"version": "2.0", | |||
"params": [], | |||
"leftModuleId": 4, | |||