commit: 0ffde84ea61320f68c25c3294ab302970a40546e
parent eccbfc8883a171c23551e5faca05f4468963dd6b
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 11 Sep 2021 05:21:34 +0200
images/linux-audio-output: sox->sndio; OpenAL->sndio
Diffstat:
5 files changed, 502 insertions(+), 476 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,2 +1,10 @@
+all: bookmarks.shtml images/linux-audio-output.png images/linux-audio-output.svg
+
bookmarks.shtml: bookmarks.xbel bookmarks.xsl
xsltproc --nonet -o $@ bookmarks.xsl bookmarks.xbel
+
+images/linux-audio-output.png: images/linux-audio-output.dot
+ dot -Tpng $< > $@
+
+images/linux-audio-output.svg: images/linux-audio-output.dot
+ dot -Tsvg $< > $@
diff --git a/articles/linux-audio-output.xhtml b/articles/linux-audio-output.xhtml
@@ -2,7 +2,7 @@
<a href="/articles/linux-audio-output"><h1>Linux Audio Output APIs</h1></a>
<p>About a month ago I took a long afternoon being like "Okay whatever let's see how deep the rabbit hole of linux audio playback goes" (<a href="https://queer.hacktivis.me/objects/33fc99e9-c901-4764-8b75-27d78bf7cc7d">previously</a>, <a href="https://queer.hacktivis.me/objects/3a5e4919-e8ee-4e4c-b50c-899f4afac678">previously</a>). That was a mistake I guess but let's at least avoid others from doing the same and so share what I did as it's fairly complete (patches with reference/citations welcome btw).</p>
<p>I consider here as an Audio Output API any reused code which takes a PCM audio stream as input and which is designed to end up to the sound card at some point. In a simple system there should just be some decoders and cross-platform librairies going to the system native API (ones which are nicely desgined being SunAudio and Plan9 audio).</p>
-<figure><img loading="lazy" title="Linux Audio Output APIs" src="/images/linux-audio-output.svg?serial=2020063001" /></figure>
+<figure><img loading="lazy" title="Linux Audio Output APIs" src="/images/linux-audio-output.svg?serial=2021091101" /></figure>
<p>You'll definitely need a large screen if you want to see the whole thing at once.</p>
<h2>Other formats</h2>
<ul>
@@ -10,6 +10,10 @@
<li><a href="/images/linux-audio-output.svg">SVG</a>: access to URLs and can hover lines to see origin and destination</li>
<li><a href="/images/linux-audio-output.png">PNG</a></li>
</ul>
+<h2>Changelog</h2>
+<dl>
+ <dd>2021-09-11</dd><dt>sox → sndio ; OpenAL → sndio</dt>
+</dl>
<p>A similar kind of thing was done by an Adobe employe in 2006~2007 in an article named <q><a href="http://web.archive.org/web/20120331050917/http://blogs.adobe.com/penguinswf/2007/05/welcome_to_the_jungle.html">Welcome To The Jungle</a></q>.</p>
<p><a href="https://queer.hacktivis.me/objects/7c5e3b69-ebfd-4a79-91a9-1fa7140d5436">Fediverse post for comments</a>, published on 2020-06-30T07:10:20Z, last updated on 2020-06-30T08:07:00Z</p>
</article>
diff --git a/images/linux-audio-output.dot b/images/linux-audio-output.dot
@@ -1,7 +1,7 @@
digraph "Linux Audio Output APIs" {
node [ shape=ellipse style=filled ];
label="Linux Audio Output APIs
- CC-BY 4.0 © 2020 Haelwenn (lanodan) Monnier
+ CC-BY 4.0 © 2020-2021 Haelwenn (lanodan) Monnier
https://hacktivis.me/articles/linux-audio-output";
"network card" [ shape=box fillcolor=cyan ];
@@ -48,6 +48,7 @@ digraph "Linux Audio Output APIs" {
sox -> libao;
sox -> PulseAudio;
sox -> ALSA;
+ sox -> sndio;
libao [ URL="https://www.xiph.org/ao/" ];
libao -> filesystem;
@@ -103,6 +104,7 @@ digraph "Linux Audio Output APIs" {
OpenAL -> portaudio;
OpenAL -> JACK;
OpenAL -> filesystem;
+ OpenAL -> sndio;
OpenAL -> null [ color=red ];
SoundIO [ URL="http://libsound.io/" ];
diff --git a/images/linux-audio-output.png b/images/linux-audio-output.png
Binary files differ.
diff --git a/images/linux-audio-output.svg b/images/linux-audio-output.svg
@@ -1,65 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.42.3 (20191010.1750)
+<!-- Generated by graphviz version 2.47.1 (20210417.1919)
-->
<!-- Title: Linux Audio Output APIs Pages: 1 -->
-<svg width="2637pt" height="943pt"
- viewBox="0.00 0.00 2637.00 942.74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="2779pt" height="943pt"
+ viewBox="0.00 0.00 2779.48 942.74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 938.74)">
<title>Linux Audio Output APIs</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-938.74 2633,-938.74 2633,4 -4,4"/>
-<text text-anchor="middle" x="1314.5" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs</text>
-<text text-anchor="middle" x="1314.5" y="-22.8" font-family="Times,serif" font-size="14.00"> CC-BY 4.0 © 2020 Haelwenn (lanodan) Monnier</text>
-<text text-anchor="middle" x="1314.5" y="-7.8" font-family="Times,serif" font-size="14.00"> https://hacktivis.me/articles/linux-audio-output</text>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-938.74 2775.48,-938.74 2775.48,4 -4,4"/>
+<text text-anchor="middle" x="1385.74" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs</text>
+<text text-anchor="middle" x="1385.74" y="-22.8" font-family="Times,serif" font-size="14.00"> CC-BY 4.0 © 2020-2021 Haelwenn (lanodan) Monnier</text>
+<text text-anchor="middle" x="1385.74" y="-7.8" font-family="Times,serif" font-size="14.00"> https://hacktivis.me/articles/linux-audio-output</text>
<!-- network card -->
<g id="node1" class="node">
<title>network card</title>
-<polygon fill="cyan" stroke="black" points="998,-89 910,-89 910,-53 998,-53 998,-89"/>
-<text text-anchor="middle" x="954" y="-67.3" font-family="Times,serif" font-size="14.00">network card</text>
+<polygon fill="cyan" stroke="black" points="1652.98,-89 1541.98,-89 1541.98,-53 1652.98,-53 1652.98,-89"/>
+<text text-anchor="middle" x="1597.48" y="-67.3" font-family="Times,serif" font-size="14.00">network card</text>
</g>
<!-- sound card -->
<g id="node2" class="node">
<title>sound card</title>
-<polygon fill="cyan" stroke="black" points="1561,-235 1485,-235 1485,-199 1561,-199 1561,-235"/>
-<text text-anchor="middle" x="1523" y="-213.3" font-family="Times,serif" font-size="14.00">sound card</text>
+<polygon fill="cyan" stroke="black" points="1459.98,-235 1364.98,-235 1364.98,-199 1459.98,-199 1459.98,-235"/>
+<text text-anchor="middle" x="1412.48" y="-213.3" font-family="Times,serif" font-size="14.00">sound card</text>
</g>
<!-- phone modem -->
<g id="node3" class="node">
<title>phone modem</title>
-<polygon fill="cyan" stroke="black" points="1509.5,-395 1414.5,-395 1414.5,-359 1509.5,-359 1509.5,-395"/>
-<text text-anchor="middle" x="1462" y="-373.3" font-family="Times,serif" font-size="14.00">phone modem</text>
+<polygon fill="cyan" stroke="black" points="1393.98,-395 1276.98,-395 1276.98,-359 1393.98,-359 1393.98,-395"/>
+<text text-anchor="middle" x="1335.48" y="-373.3" font-family="Times,serif" font-size="14.00">phone modem</text>
</g>
<!-- Bluetooth card -->
<g id="node4" class="node">
<title>Bluetooth card</title>
-<polygon fill="cyan" stroke="black" points="1396.5,-395 1299.5,-395 1299.5,-359 1396.5,-359 1396.5,-395"/>
-<text text-anchor="middle" x="1348" y="-373.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
+<polygon fill="cyan" stroke="black" points="1772.48,-395 1650.48,-395 1650.48,-359 1772.48,-359 1772.48,-395"/>
+<text text-anchor="middle" x="1711.48" y="-373.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
</g>
<!-- filesystem -->
<g id="node5" class="node">
<title>filesystem</title>
-<polygon fill="yellow" stroke="black" points="1383.21,-296.54 1383.21,-311.46 1353.21,-322 1310.79,-322 1280.79,-311.46 1280.79,-296.54 1310.79,-286 1353.21,-286 1383.21,-296.54"/>
-<text text-anchor="middle" x="1332" y="-300.3" font-family="Times,serif" font-size="14.00">filesystem</text>
+<polygon fill="yellow" stroke="black" points="1961.21,-296.54 1961.21,-311.46 1924.46,-322 1872.5,-322 1835.76,-311.46 1835.76,-296.54 1872.5,-286 1924.46,-286 1961.21,-296.54"/>
+<text text-anchor="middle" x="1898.48" y="-300.3" font-family="Times,serif" font-size="14.00">filesystem</text>
</g>
<!-- null -->
<g id="node6" class="node">
<title>null</title>
-<polygon fill="red" stroke="black" points="1832,-322 1797.14,-304 1832,-286 1866.86,-304 1832,-322"/>
-<text text-anchor="middle" x="1832" y="-300.3" font-family="Times,serif" font-size="14.00">null</text>
+<polygon fill="red" stroke="black" points="2090.48,-322 2050.1,-304 2090.48,-286 2130.87,-304 2090.48,-322"/>
+<text text-anchor="middle" x="2090.48" y="-300.3" font-family="Times,serif" font-size="14.00">null</text>
</g>
<!-- ? -->
<g id="node7" class="node">
<title>?</title>
-<ellipse fill="red" stroke="black" cx="168" cy="-304" rx="18" ry="18"/>
-<text text-anchor="middle" x="168" y="-300.3" font-family="Times,serif" font-size="14.00">?</text>
+<ellipse fill="red" stroke="black" cx="255.48" cy="-304" rx="18" ry="18"/>
+<text text-anchor="middle" x="255.48" y="-300.3" font-family="Times,serif" font-size="14.00">?</text>
</g>
<!-- portaudio -->
<g id="node8" class="node">
<title>portaudio</title>
<g id="a_node8"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio">
-<ellipse fill="lightgrey" stroke="black" cx="2037" cy="-770.74" rx="44.39" ry="18"/>
-<text text-anchor="middle" x="2037" y="-767.04" font-family="Times,serif" font-size="14.00">portaudio</text>
+<ellipse fill="lightgrey" stroke="black" cx="1705.48" cy="-770.74" rx="55.79" ry="18"/>
+<text text-anchor="middle" x="1705.48" y="-767.04" font-family="Times,serif" font-size="14.00">portaudio</text>
</a>
</g>
</g>
@@ -67,1050 +67,1062 @@
<g id="node9" class="node">
<title>ALSA</title>
<g id="a_node9"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA">
-<polygon fill="yellow" stroke="black" points="1245.66,-690.28 1245.66,-705.2 1224.19,-715.74 1193.81,-715.74 1172.34,-705.2 1172.34,-690.28 1193.81,-679.74 1224.19,-679.74 1245.66,-690.28"/>
-<text text-anchor="middle" x="1209" y="-694.04" font-family="Times,serif" font-size="14.00">ALSA</text>
+<polygon fill="yellow" stroke="black" points="1351.37,-690.28 1351.37,-705.2 1328.59,-715.74 1296.38,-715.74 1273.6,-705.2 1273.6,-690.28 1296.38,-679.74 1328.59,-679.74 1351.37,-690.28"/>
+<text text-anchor="middle" x="1312.48" y="-694.04" font-family="Times,serif" font-size="14.00">ALSA</text>
</a>
</g>
</g>
<!-- portaudio->ALSA -->
<g id="edge1" class="edge">
<title>portaudio->ALSA</title>
-<path fill="none" stroke="black" d="M1996.06,-763.87C1970.26,-760.31 1936.23,-755.87 1906,-752.74 1661.86,-727.46 1368.5,-708.42 1256.02,-701.54"/>
-<polygon fill="black" stroke="black" points="1255.91,-698.03 1245.71,-700.91 1255.48,-705.01 1255.91,-698.03"/>
+<path fill="none" stroke="black" d="M1658.08,-761.18C1582.82,-747.58 1436.76,-721.19 1360.88,-707.48"/>
+<polygon fill="black" stroke="black" points="1361.12,-703.97 1350.66,-705.64 1359.87,-710.86 1361.12,-703.97"/>
</g>
<!-- JACK -->
<g id="node10" class="node">
<title>JACK</title>
-<ellipse fill="lightgrey" stroke="black" cx="1540" cy="-464" rx="32.49" ry="18"/>
-<text text-anchor="middle" x="1540" y="-460.3" font-family="Times,serif" font-size="14.00">JACK</text>
+<ellipse fill="lightgrey" stroke="black" cx="1540.48" cy="-464" rx="34.39" ry="18"/>
+<text text-anchor="middle" x="1540.48" y="-460.3" font-family="Times,serif" font-size="14.00">JACK</text>
</g>
<!-- portaudio->JACK -->
<g id="edge2" class="edge">
<title>portaudio->JACK</title>
-<path fill="none" stroke="black" d="M1995.71,-764.21C1901.65,-751.52 1679.07,-721.04 1673,-715.74 1616.6,-666.51 1667.27,-616.45 1626,-554 1619.04,-543.46 1612.82,-545.04 1604,-536 1589.85,-521.49 1589.52,-515.1 1576,-500 1572.15,-495.7 1567.88,-491.28 1563.67,-487.09"/>
-<polygon fill="black" stroke="black" points="1565.86,-484.34 1556.25,-479.88 1560.98,-489.36 1565.86,-484.34"/>
+<path fill="none" stroke="black" d="M1661.02,-759.74C1636.46,-751.88 1607.55,-738.37 1590.48,-715.74 1531.98,-638.19 1582.6,-593.28 1555.48,-500 1554.65,-497.14 1553.65,-494.21 1552.56,-491.31"/>
+<polygon fill="black" stroke="black" points="1555.69,-489.71 1548.66,-481.78 1549.21,-492.36 1555.69,-489.71"/>
</g>
<!-- OSS -->
<g id="node11" class="node">
<title>OSS</title>
-<polygon fill="yellow" stroke="black" points="939.69,-296.54 939.69,-311.46 922.88,-322 899.12,-322 882.31,-311.46 882.31,-296.54 899.12,-286 922.88,-286 939.69,-296.54"/>
-<text text-anchor="middle" x="911" y="-300.3" font-family="Times,serif" font-size="14.00">OSS</text>
+<polygon fill="yellow" stroke="black" points="1073.61,-296.54 1073.61,-311.46 1054.21,-322 1026.76,-322 1007.36,-311.46 1007.36,-296.54 1026.76,-286 1054.21,-286 1073.61,-296.54"/>
+<text text-anchor="middle" x="1040.48" y="-300.3" font-family="Times,serif" font-size="14.00">OSS</text>
</g>
<!-- portaudio->OSS -->
<g id="edge3" class="edge">
<title>portaudio->OSS</title>
-<path fill="none" stroke="black" d="M2033.97,-752.55C2020.9,-684.49 1962.22,-433.86 1796,-359 1776.42,-350.18 1118.16,-315.69 949.87,-307"/>
-<polygon fill="black" stroke="black" points="949.89,-303.49 939.73,-306.47 949.53,-310.48 949.89,-303.49"/>
+<path fill="none" stroke="black" d="M1703.86,-752.72C1696.73,-681.88 1665.74,-411.69 1603.48,-359 1583.75,-342.3 1397.23,-343.4 1371.48,-341 1268.17,-331.38 1147,-317.55 1083.81,-310.14"/>
+<polygon fill="black" stroke="black" points="1084.15,-306.66 1073.81,-308.97 1083.33,-313.61 1084.15,-306.66"/>
</g>
<!-- asihpi -->
<g id="node12" class="node">
<title>asihpi</title>
-<polygon fill="yellow" stroke="black" points="2258.44,-510.54 2258.44,-525.46 2238.27,-536 2209.73,-536 2189.56,-525.46 2189.56,-510.54 2209.73,-500 2238.27,-500 2258.44,-510.54"/>
-<text text-anchor="middle" x="2224" y="-514.3" font-family="Times,serif" font-size="14.00">asihpi</text>
+<polygon fill="yellow" stroke="black" points="1908,-510.54 1908,-525.46 1883.68,-536 1849.29,-536 1824.97,-525.46 1824.97,-510.54 1849.29,-500 1883.68,-500 1908,-510.54"/>
+<text text-anchor="middle" x="1866.48" y="-514.3" font-family="Times,serif" font-size="14.00">asihpi</text>
</g>
<!-- portaudio->asihpi -->
<g id="edge4" class="edge">
<title>portaudio->asihpi</title>
-<path fill="none" stroke="black" d="M2060.87,-755.49C2076.45,-745.52 2096.65,-731.25 2112,-715.74 2162.45,-664.74 2197.9,-586.45 2214.09,-545.71"/>
-<polygon fill="black" stroke="black" points="2217.42,-546.79 2217.79,-536.2 2210.9,-544.25 2217.42,-546.79"/>
+<path fill="none" stroke="black" d="M1716.3,-752.9C1743.9,-709.91 1817.1,-595.91 1850.03,-544.63"/>
+<polygon fill="black" stroke="black" points="1853.05,-546.4 1855.51,-536.1 1847.16,-542.62 1853.05,-546.4"/>
</g>
<!-- sndio -->
<g id="node13" class="node">
<title>sndio</title>
<g id="a_node13"><a xlink:href="http://www.sndio.org/" xlink:title="sndio">
-<ellipse fill="lightgrey" stroke="black" cx="1417" cy="-144" rx="29.8" ry="18"/>
-<text text-anchor="middle" x="1417" y="-140.3" font-family="Times,serif" font-size="14.00">sndio</text>
+<ellipse fill="lightgrey" stroke="black" cx="2138.48" cy="-144" rx="36" ry="18"/>
+<text text-anchor="middle" x="2138.48" y="-140.3" font-family="Times,serif" font-size="14.00">sndio</text>
</a>
</g>
</g>
<!-- portaudio->sndio -->
<g id="edge6" class="edge">
<title>portaudio->sndio</title>
-<path fill="none" stroke="black" d="M2066.12,-756.94C2087.4,-747.01 2116.52,-732.19 2140,-715.74 2251.15,-637.85 2655.9,-394.23 2574,-286 2488.17,-172.57 2403.57,-235.17 2266,-199 2231.49,-189.93 2223.32,-185.05 2188,-180 2044.67,-159.49 1593.85,-148.66 1456.87,-145.79"/>
-<polygon fill="black" stroke="black" points="1456.88,-142.29 1446.81,-145.58 1456.74,-149.29 1456.88,-142.29"/>
+<path fill="none" stroke="black" d="M1757.7,-764.28C1831.88,-755.85 1963.46,-738.29 2005.48,-715.74 2132.28,-647.72 2166.17,-611.21 2229.48,-482 2283.14,-372.49 2196.21,-226.91 2156.56,-169.63"/>
+<polygon fill="black" stroke="black" points="2159.26,-167.38 2150.63,-161.22 2153.53,-171.41 2159.26,-167.38"/>
</g>
<!-- ALSA->network card -->
-<g id="edge79" class="edge">
+<g id="edge81" class="edge">
<title>ALSA->network card</title>
-<path fill="none" stroke="green" d="M1172.29,-695.93C1106.7,-693.86 972.64,-686.62 934,-661.74 886.78,-631.34 693.14,-239.59 692,-235 667.98,-138.46 816.67,-96.21 900.15,-80.28"/>
-<polygon fill="green" stroke="green" points="900.79,-83.73 909.99,-78.47 899.52,-76.84 900.79,-83.73"/>
+<path fill="none" stroke="green" d="M1273.61,-695.95C1196.55,-693.86 1027.38,-686.5 975.48,-661.74 740.32,-549.52 665.18,-478.9 573.48,-235 564.67,-211.57 578.44,-129.77 582.48,-126 617.24,-93.58 1312.44,-77.48 1531.78,-73.2"/>
+<polygon fill="green" stroke="green" points="1531.93,-76.69 1541.86,-73 1531.8,-69.69 1531.93,-76.69"/>
</g>
<!-- ALSA->sound card -->
-<g id="edge78" class="edge">
+<g id="edge80" class="edge">
<title>ALSA->sound card</title>
-<path fill="none" stroke="green" d="M1181.39,-685.84C1168.76,-679.96 1154.16,-671.83 1143,-661.74 1061.6,-588.18 977.03,-545.63 1023,-446 1078.11,-326.56 1145.37,-321.63 1272,-286 1360.04,-261.23 1394.94,-308.38 1477,-268 1488.46,-262.36 1498.45,-252.55 1506.17,-243.1"/>
-<polygon fill="green" stroke="green" points="1509.07,-245.08 1512.35,-235 1503.5,-240.83 1509.07,-245.08"/>
+<path fill="none" stroke="green" d="M1273.45,-692.23C1254.12,-687.8 1232.42,-679.04 1220.48,-661.74 1195.98,-626.2 1239.62,-571.49 1262.48,-428 1267.33,-397.6 1255.34,-386.83 1268.48,-359 1292.46,-308.25 1342.92,-265.74 1377.27,-241.07"/>
+<polygon fill="green" stroke="green" points="1379.47,-243.81 1385.63,-235.19 1375.44,-238.08 1379.47,-243.81"/>
</g>
<!-- ALSA->filesystem -->
-<g id="edge84" class="edge">
+<g id="edge86" class="edge">
<title>ALSA->filesystem</title>
-<path fill="none" stroke="black" d="M1182.45,-685.15C1172.96,-679.54 1163.3,-671.81 1158,-661.74 1126.03,-601.02 1174.05,-410.86 1219,-359 1235.44,-340.04 1260.02,-327.19 1282.07,-318.81"/>
-<polygon fill="black" stroke="black" points="1283.42,-322.04 1291.65,-315.38 1281.06,-315.45 1283.42,-322.04"/>
+<path fill="none" stroke="black" d="M1306.81,-679.57C1296.17,-644.29 1276.51,-561.79 1302.48,-500 1306.82,-489.68 1436.51,-364.09 1446.48,-359 1511.01,-326.11 1714.82,-312.63 1825.4,-307.63"/>
+<polygon fill="black" stroke="black" points="1825.64,-311.13 1835.48,-307.19 1825.34,-304.13 1825.64,-311.13"/>
</g>
<!-- ALSA->null -->
-<g id="edge83" class="edge">
+<g id="edge85" class="edge">
<title>ALSA->null</title>
-<path fill="none" stroke="red" d="M1204.93,-679.39C1192.88,-623.2 1163.81,-444.9 1257,-359 1296.04,-323.01 1664.16,-309.61 1790.03,-306.05"/>
-<polygon fill="red" stroke="red" points="1790.51,-309.54 1800.41,-305.77 1790.32,-302.54 1790.51,-309.54"/>
+<path fill="none" stroke="red" d="M1317.13,-679.72C1326.86,-645.07 1350.94,-564.18 1380.48,-500 1399.23,-459.29 1405.14,-449.26 1431.48,-413 1450.36,-387.02 1450.71,-373.25 1479.48,-359 1528.51,-334.73 1916.09,-327.9 1970.48,-322 1998,-319.02 2028.92,-314.61 2052.48,-311.03"/>
+<polygon fill="red" stroke="red" points="2053.07,-314.48 2062.42,-309.51 2052.01,-307.56 2053.07,-314.48"/>
</g>
<!-- ALSA->JACK -->
-<g id="edge81" class="edge">
+<g id="edge83" class="edge">
<title>ALSA->JACK</title>
-<path fill="none" stroke="black" d="M1245.69,-693.18C1271.65,-689.1 1306.14,-680.37 1331,-661.74 1353.62,-644.79 1345.17,-628.14 1365,-608 1406,-566.37 1432.03,-575.6 1475,-536 1489.9,-522.26 1489.38,-515.01 1503,-500 1507.04,-495.55 1511.53,-491 1515.97,-486.72"/>
-<polygon fill="black" stroke="black" points="1518.4,-489.23 1523.27,-479.82 1513.59,-484.14 1518.4,-489.23"/>
+<path fill="none" stroke="black" d="M1348.61,-688.88C1366.19,-683.59 1386.67,-675.06 1401.48,-661.74 1421.51,-643.73 1412.32,-628.76 1429.48,-608 1462.35,-568.25 1491.88,-578.91 1520.48,-536 1529.2,-522.92 1534.16,-506.07 1536.95,-492.06"/>
+<polygon fill="black" stroke="black" points="1540.44,-492.47 1538.7,-482.02 1533.54,-491.27 1540.44,-492.47"/>
</g>
<!-- ALSA->sndio -->
-<g id="edge57" class="edge">
+<g id="edge58" class="edge">
<title>ALSA->sndio</title>
-<path fill="none" stroke="black" d="M1190.27,-681.36C1186.3,-675.47 1182.9,-668.53 1181,-661.74 1132.04,-486.33 1098.28,-396.82 1210,-253 1252.86,-197.83 1332.14,-167.1 1379.32,-153.55"/>
-<polygon fill="black" stroke="black" points="1380.44,-156.87 1389.15,-150.84 1378.58,-150.12 1380.44,-156.87"/>
+<path fill="none" stroke="black" d="M1291.05,-682.04C1285.91,-676.13 1281.26,-668.99 1278.48,-661.74 1230.08,-535.49 1222.29,-491.65 1248.48,-359 1264.68,-276.96 1273.49,-237.96 1347.48,-199 1363.99,-190.31 1926.12,-156.88 2092.57,-147.47"/>
+<polygon fill="black" stroke="black" points="2093.17,-150.95 2102.96,-146.89 2092.78,-143.96 2093.17,-150.95"/>
</g>
<!-- PulseAudio -->
<g id="node14" class="node">
<title>PulseAudio</title>
<g id="a_node14"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio">
-<ellipse fill="lightgrey" stroke="black" cx="1796" cy="-572" rx="51.99" ry="18"/>
-<text text-anchor="middle" x="1796" y="-568.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
+<ellipse fill="lightgrey" stroke="black" cx="2011.48" cy="-572" rx="62.29" ry="18"/>
+<text text-anchor="middle" x="2011.48" y="-568.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
</a>
</g>
</g>
<!-- ALSA->PulseAudio -->
-<g id="edge80" class="edge">
+<g id="edge82" class="edge">
<title>ALSA->PulseAudio</title>
-<path fill="none" stroke="black" d="M1245.69,-690.14C1266.84,-686.93 1293.8,-683.06 1318,-679.74 1379.28,-671.33 1397.57,-682.02 1456,-661.74 1500.01,-646.47 1502.1,-623.59 1546,-608 1607.44,-586.18 1682.32,-577.95 1734.11,-574.85"/>
-<polygon fill="black" stroke="black" points="1734.36,-578.34 1744.15,-574.3 1733.97,-571.35 1734.36,-578.34"/>
+<path fill="none" stroke="black" d="M1350.95,-689.85C1392.81,-683.08 1461.31,-672.25 1520.48,-661.74 1643.96,-639.81 1674.11,-630.5 1797.48,-608 1847.3,-598.92 1904.07,-589.28 1946.69,-582.42"/>
+<polygon fill="black" stroke="black" points="1947.34,-585.86 1956.66,-580.83 1946.23,-578.95 1947.34,-585.86"/>
</g>
<!-- bluez -->
<g id="node15" class="node">
<title>bluez</title>
-<polygon fill="yellow" stroke="black" points="1452.35,-456.54 1452.35,-471.46 1431.64,-482 1402.36,-482 1381.65,-471.46 1381.65,-456.54 1402.36,-446 1431.64,-446 1452.35,-456.54"/>
-<text text-anchor="middle" x="1417" y="-460.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
+<polygon fill="yellow" stroke="black" points="1752,-456.54 1752,-471.46 1727.68,-482 1693.29,-482 1668.97,-471.46 1668.97,-456.54 1693.29,-446 1727.68,-446 1752,-456.54"/>
+<text text-anchor="middle" x="1710.48" y="-460.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
</g>
<!-- ALSA->bluez -->
<g id="edge18" class="edge">
<title>ALSA->bluez</title>
-<path fill="none" stroke="black" d="M1243.84,-689.21C1262.1,-683.91 1283.96,-675.27 1300,-661.74 1314.8,-649.25 1374.9,-541.71 1402.73,-491.11"/>
-<polygon fill="black" stroke="black" points="1405.95,-492.53 1407.69,-482.08 1399.81,-489.16 1405.95,-492.53"/>
+<path fill="none" stroke="black" d="M1351.22,-692.51C1375.15,-688.18 1405.24,-679.42 1426.48,-661.74 1447.18,-644.51 1435.28,-626.88 1454.48,-608 1467.24,-595.46 1474.7,-598.42 1490.48,-590 1557.64,-554.16 1634.68,-509.57 1677.46,-484.49"/>
+<polygon fill="black" stroke="black" points="1679.45,-487.38 1686.3,-479.3 1675.91,-481.34 1679.45,-487.38"/>
</g>
<!-- aRts -->
<g id="node20" class="node">
<title>aRts</title>
-<ellipse fill="lightgrey" stroke="black" cx="472" cy="-144" rx="27" ry="18"/>
-<text text-anchor="middle" x="472" y="-140.3" font-family="Times,serif" font-size="14.00">aRts</text>
+<ellipse fill="lightgrey" stroke="black" cx="623.48" cy="-144" rx="31.7" ry="18"/>
+<text text-anchor="middle" x="623.48" y="-140.3" font-family="Times,serif" font-size="14.00">aRts</text>
</g>
<!-- ALSA->aRts -->
-<g id="edge82" class="edge">
+<g id="edge84" class="edge">
<title>ALSA->aRts</title>
-<path fill="none" stroke="black" d="M1172.38,-695.56C1090.99,-692.57 897.43,-683.36 836,-661.74 744.58,-629.56 472,-518.42 472,-421.5 472,-421.5 472,-421.5 472,-216 472,-201.65 472,-185.67 472,-172.51"/>
-<polygon fill="black" stroke="black" points="475.5,-172.22 472,-162.22 468.5,-172.22 475.5,-172.22"/>
+<path fill="none" stroke="black" d="M1273.37,-697.61C1224.92,-697.23 1140.89,-691.7 1076.48,-661.74 914.11,-586.22 889.21,-532.51 774.48,-395 712.47,-320.67 658.97,-218.16 635.77,-170.84"/>
+<polygon fill="black" stroke="black" points="638.81,-169.08 631.29,-161.62 632.51,-172.14 638.81,-169.08"/>
</g>
<!-- PipeWire -->
<g id="node26" class="node">
<title>PipeWire</title>
<g id="a_node26"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire">
-<ellipse fill="lightgrey" stroke="black" cx="1572" cy="-377" rx="44.39" ry="18"/>
-<text text-anchor="middle" x="1572" y="-373.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
+<ellipse fill="lightgrey" stroke="black" cx="1541.48" cy="-377" rx="53.09" ry="18"/>
+<text text-anchor="middle" x="1541.48" y="-373.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
</a>
</g>
</g>
<!-- ALSA->PipeWire -->
-<g id="edge50" class="edge">
+<g id="edge51" class="edge">
<title>ALSA->PipeWire</title>
-<path fill="none" stroke="black" d="M1212.54,-679.73C1223.04,-633.89 1258.45,-507.12 1340,-446 1406.19,-396.39 1439.83,-418.97 1519,-395 1522.29,-394 1525.69,-392.96 1529.1,-391.89"/>
-<polygon fill="black" stroke="black" points="1530.21,-395.21 1538.69,-388.87 1528.1,-388.54 1530.21,-395.21"/>
+<path fill="none" stroke="black" d="M1312.06,-679.53C1312,-643.1 1316.34,-556.88 1355.48,-500 1390.59,-448.98 1454.71,-414.01 1497.71,-395"/>
+<polygon fill="black" stroke="black" points="1499.28,-398.13 1507.08,-390.96 1496.51,-391.7 1499.28,-398.13"/>
</g>
<!-- JACK->PipeWire -->
-<g id="edge51" class="edge">
+<g id="edge52" class="edge">
<title>JACK->PipeWire</title>
-<path fill="none" stroke="black" d="M1546.32,-446.21C1550.81,-434.29 1556.92,-418.06 1562.05,-404.42"/>
-<polygon fill="black" stroke="black" points="1565.33,-405.64 1565.58,-395.05 1558.78,-403.17 1565.33,-405.64"/>
+<path fill="none" stroke="black" d="M1540.69,-445.8C1540.82,-434.16 1541.01,-418.55 1541.16,-405.24"/>
+<polygon fill="black" stroke="black" points="1544.66,-405.22 1541.28,-395.18 1537.66,-405.13 1544.66,-405.22"/>
</g>
<!-- OSS->sound card -->
-<g id="edge86" class="edge">
+<g id="edge88" class="edge">
<title>OSS->sound card</title>
-<path fill="none" stroke="green" d="M939.7,-299.01C1036.71,-285.54 1353.17,-241.59 1474.79,-224.7"/>
-<polygon fill="green" stroke="green" points="1475.49,-228.13 1484.91,-223.29 1474.53,-221.2 1475.49,-228.13"/>
-<text text-anchor="middle" x="1363" y="-256.8" font-family="Times,serif" font-size="14.00" fill="green">third-party drivers from opensound.com</text>
+<path fill="none" stroke="green" d="M1014.83,-292.47C994.66,-282.74 972.02,-267.62 985.48,-253 1010.01,-226.38 1244.16,-220.01 1354.93,-218.48"/>
+<polygon fill="green" stroke="green" points="1354.98,-221.98 1364.94,-218.35 1354.89,-214.98 1354.98,-221.98"/>
+<text text-anchor="middle" x="1129.48" y="-256.8" font-family="Times,serif" font-size="14.00" fill="green">third-party drivers from opensound.com</text>
</g>
<!-- OSS->ALSA -->
-<g id="edge85" class="edge">
+<g id="edge87" class="edge">
<title>OSS->ALSA</title>
-<path fill="none" stroke="black" d="M913.95,-322.1C919.66,-354 933.35,-424.55 952,-482 955.35,-492.31 1019.58,-654.92 1028,-661.74 1048.17,-678.08 1115.47,-687.77 1162.06,-692.67"/>
-<polygon fill="black" stroke="black" points="1161.94,-696.18 1172.24,-693.7 1162.65,-689.21 1161.94,-696.18"/>
+<path fill="none" stroke="black" d="M1042.73,-322.31C1049.37,-368.76 1072.12,-498.82 1128.48,-590 1150.95,-626.34 1156.35,-638.93 1192.48,-661.74 1213.98,-675.31 1240.94,-683.79 1263.85,-689"/>
+<polygon fill="black" stroke="black" points="1263.22,-692.44 1273.73,-691.1 1264.68,-685.6 1263.22,-692.44"/>
</g>
<!-- RoarAudio -->
<g id="node23" class="node">
<title>RoarAudio</title>
<g id="a_node23"><a xlink:href="http://roaraudio.keep-cool.org/" xlink:title="RoarAudio">
-<ellipse fill="lightgrey" stroke="black" cx="993" cy="-217" rx="50.09" ry="18"/>
-<text text-anchor="middle" x="993" y="-213.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
+<ellipse fill="lightgrey" stroke="black" cx="1720.48" cy="-217" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="1720.48" y="-213.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
</a>
</g>
</g>
<!-- OSS->RoarAudio -->
-<g id="edge35" class="edge">
+<g id="edge36" class="edge">
<title>OSS->RoarAudio</title>
-<path fill="none" stroke="black" d="M926.04,-287.41C938.4,-274.59 956.12,-256.23 970.22,-241.61"/>
-<polygon fill="black" stroke="black" points="972.79,-243.99 977.22,-234.36 967.75,-239.13 972.79,-243.99"/>
+<path fill="none" stroke="black" d="M1073.74,-298.84C1180.4,-285.51 1515.13,-243.67 1656.48,-226"/>
+<polygon fill="black" stroke="black" points="1657.24,-229.43 1666.72,-224.72 1656.37,-222.49 1657.24,-229.43"/>
</g>
<!-- asihpi->sound card -->
<g id="edge5" class="edge">
<title>asihpi->sound card</title>
-<path fill="none" stroke="green" d="M2225.83,-499.66C2229.91,-450.44 2233.73,-309.79 2152,-253 2104.79,-220.19 1710.77,-217.67 1571.52,-217.81"/>
-<polygon fill="green" stroke="green" points="1571.16,-214.31 1561.16,-217.83 1571.17,-221.31 1571.16,-214.31"/>
+<path fill="none" stroke="green" d="M1867.07,-499.9C1866.94,-485.03 1865.22,-463.23 1857.48,-446 1836.45,-399.16 1824.44,-387.12 1781.48,-359 1735.85,-329.13 1715.74,-340.64 1664.48,-322 1592.4,-295.78 1510.6,-261.08 1460.26,-239.15"/>
+<polygon fill="green" stroke="green" points="1461.5,-235.87 1450.94,-235.07 1458.7,-242.28 1461.5,-235.87"/>
</g>
<!-- sndio->network card -->
-<g id="edge55" class="edge">
+<g id="edge56" class="edge">
<title>sndio->network card</title>
-<path fill="none" stroke="black" d="M1378.33,-137.07C1295.86,-124.42 1102.53,-94.78 1007.98,-80.28"/>
-<polygon fill="black" stroke="black" points="1377.97,-140.56 1388.39,-138.61 1379.03,-133.64 1377.97,-140.56"/>
-<polygon fill="black" stroke="black" points="1008.47,-76.81 998.05,-78.76 1007.41,-83.73 1008.47,-76.81"/>
+<path fill="none" stroke="black" d="M2094.07,-137.17C1998.99,-124.69 1775.3,-95.34 1663.5,-80.66"/>
+<polygon fill="black" stroke="black" points="2093.86,-140.67 2104.23,-138.5 2094.77,-133.73 2093.86,-140.67"/>
+<polygon fill="black" stroke="black" points="1663.74,-77.17 1653.37,-79.33 1662.83,-84.11 1663.74,-77.17"/>
</g>
<!-- sndio->ALSA -->
-<g id="edge54" class="edge">
+<g id="edge55" class="edge">
<title>sndio->ALSA</title>
-<path fill="none" stroke="black" d="M1391.29,-153.52C1350.22,-167.07 1270.88,-197.8 1228,-253 1116.28,-396.82 1150.04,-486.33 1199,-661.74 1199.8,-664.61 1200.87,-667.51 1202.06,-670.34"/>
-<polygon fill="black" stroke="black" points="1198.94,-671.96 1206.29,-679.6 1205.31,-669.05 1198.94,-671.96"/>
+<path fill="none" stroke="black" d="M2103.28,-147.23C1954.11,-156.29 1382.14,-190.23 1365.48,-199 1291.49,-237.96 1282.68,-276.96 1266.48,-359 1240.29,-491.65 1248.08,-535.49 1296.48,-661.74 1297.69,-664.88 1299.24,-667.99 1300.93,-671"/>
+<polygon fill="black" stroke="black" points="1298,-672.91 1306.22,-679.59 1303.96,-669.24 1298,-672.91"/>
</g>
<!-- PulseAudio->network card -->
<g id="edge9" class="edge">
<title>PulseAudio->network card</title>
-<path fill="none" stroke="green" d="M1855.34,-564.87C1890.01,-559.9 1934.08,-551.13 1971,-536 2161.14,-458.08 2405.21,-331.14 2266,-180 2179.51,-86.1 1244.61,-73.84 1008.11,-72.24"/>
-<polygon fill="green" stroke="green" points="1854.8,-561.41 1845.36,-566.24 1855.74,-568.35 1854.8,-561.41"/>
-<polygon fill="green" stroke="green" points="1008.05,-68.74 998.03,-72.18 1008.01,-75.74 1008.05,-68.74"/>
-<text text-anchor="middle" x="2437.5" y="-300.3" font-family="Times,serif" font-size="14.00" fill="green">DLNA, RTP, SDP, SAP, RAOP, Tunnel, HTTP</text>
+<path fill="none" stroke="green" d="M2083.06,-567.37C2130.51,-563.27 2193.53,-554.55 2246.48,-536 2291.59,-520.2 2302.63,-512.44 2339.48,-482 2364.02,-461.74 2365.96,-452.32 2386.48,-428 2398.71,-413.52 2403.21,-410.93 2413.48,-395 2442.79,-349.57 2427.93,-322.85 2467.48,-286 2557.59,-202.06 2806.12,-271.31 2723.48,-180 2652.06,-101.08 1894.1,-78.37 1663.6,-73.27"/>
+<polygon fill="green" stroke="green" points="2082.56,-563.9 2072.88,-568.2 2083.13,-570.87 2082.56,-563.9"/>
+<polygon fill="green" stroke="green" points="1663.43,-69.77 1653.35,-73.05 1663.27,-76.76 1663.43,-69.77"/>
+<text text-anchor="middle" x="2619.48" y="-300.3" font-family="Times,serif" font-size="14.00" fill="green">DLNA, RTP, SDP, SAP, RAOP, Tunnel, HTTP</text>
</g>
<!-- PulseAudio->sound card -->
<g id="edge11" class="edge">
<title>PulseAudio->sound card</title>
-<path fill="none" stroke="green" d="M1847.06,-568.47C1878.01,-564.78 1916.99,-556.11 1946,-536 1956.7,-528.58 2072.23,-353.46 2076,-341 2076.13,-340.57 2076.26,-340.36 2076,-340 2017.6,-257.27 1695.12,-228.69 1571.37,-220.68"/>
-<polygon fill="green" stroke="green" points="1571.27,-217.16 1561.07,-220.03 1570.83,-224.15 1571.27,-217.16"/>
+<path fill="none" stroke="green" d="M2073.54,-569.4C2104.31,-565.74 2140.36,-556.78 2166.48,-536 2253.94,-466.42 2239.19,-336.48 2139.48,-286 2109.71,-270.93 1636.96,-234.64 1470.18,-222.24"/>
+<polygon fill="green" stroke="green" points="1470.35,-218.74 1460.11,-221.49 1469.83,-225.72 1470.35,-218.74"/>
</g>
<!-- PulseAudio->null -->
<g id="edge10" class="edge">
<title>PulseAudio->null</title>
-<path fill="none" stroke="red" d="M1826.61,-557.37C1835.08,-552 1843.24,-544.93 1848,-536 1884.2,-468 1857.24,-372.36 1841.39,-328.57"/>
-<polygon fill="red" stroke="red" points="1844.62,-327.21 1837.83,-319.08 1838.07,-329.67 1844.62,-327.21"/>
+<path fill="none" stroke="red" d="M2054.83,-558.86C2090.39,-546.23 2137.93,-522.5 2157.48,-482 2184.09,-426.9 2136.54,-358.3 2108.63,-325"/>
+<polygon fill="red" stroke="red" points="2111.2,-322.62 2102.02,-317.33 2105.9,-327.19 2111.2,-322.62"/>
</g>
<!-- PulseAudio->ALSA -->
<g id="edge7" class="edge">
<title>PulseAudio->ALSA</title>
-<path fill="none" stroke="black" d="M1744.67,-575.08C1696.71,-578.35 1623.96,-586.7 1564,-608 1520.1,-623.59 1518.01,-646.47 1474,-661.74 1415.57,-682.02 1397.28,-671.33 1336,-679.74 1309.54,-683.37 1279.76,-687.66 1255.59,-691.03"/>
-<polygon fill="black" stroke="black" points="1255.03,-687.57 1245.6,-692.4 1255.99,-694.5 1255.03,-687.57"/>
+<path fill="none" stroke="black" d="M1960.66,-582.61C1921.05,-589.45 1864.86,-599 1815.48,-608 1692.11,-630.5 1661.96,-639.81 1538.48,-661.74 1477.88,-672.5 1407.5,-683.6 1361.47,-690.33"/>
+<polygon fill="black" stroke="black" points="1360.85,-686.89 1351.46,-691.79 1361.85,-693.81 1360.85,-686.89"/>
</g>
<!-- PulseAudio->JACK -->
<g id="edge12" class="edge">
<title>PulseAudio->JACK</title>
-<path fill="none" stroke="black" d="M1755.11,-560.74C1738.23,-555.21 1719.12,-547.18 1704,-536 1687.7,-523.95 1693.3,-510.57 1676,-500 1639.33,-477.59 1622.18,-494.29 1581,-482 1578.69,-481.31 1576.34,-480.54 1573.99,-479.71"/>
-<polygon fill="black" stroke="black" points="1575.01,-476.36 1564.42,-476.09 1572.53,-482.9 1575.01,-476.36"/>
+<path fill="none" stroke="black" d="M1951.21,-567.18C1902.43,-562.89 1832.39,-554.01 1773.48,-536 1738.13,-525.19 1733.43,-512.08 1698.48,-500 1660.39,-486.83 1615.36,-477.43 1583.15,-471.71"/>
+<polygon fill="black" stroke="black" points="1583.61,-468.24 1573.16,-469.98 1582.42,-475.14 1583.61,-468.24"/>
</g>
<!-- PulseAudio->OSS -->
<g id="edge8" class="edge">
<title>PulseAudio->OSS</title>
-<path fill="none" stroke="black" d="M1808.66,-544.54C1819.31,-518.24 1830.54,-477.4 1815,-446 1786.74,-388.87 1761.01,-380.47 1701,-359 1647.82,-339.97 1249.29,-345.58 1193,-341 1105.84,-333.91 1004.24,-319.39 949.94,-311.12"/>
-<polygon fill="black" stroke="black" points="1805.39,-543.28 1804.66,-553.85 1811.82,-546.04 1805.39,-543.28"/>
-<polygon fill="black" stroke="black" points="950.15,-307.61 939.73,-309.55 949.09,-314.53 950.15,-307.61"/>
+<path fill="none" stroke="black" d="M1993.03,-546.14C1982.28,-532.15 1968.18,-514.61 1954.48,-500 1930.17,-474.06 1923.08,-468.41 1895.48,-446 1865.32,-421.51 1855.18,-418.82 1824.48,-395 1804.79,-379.72 1804.71,-368.04 1781.48,-359 1740.54,-343.06 1430.3,-344.27 1386.48,-341 1277.29,-332.84 1149.22,-318.18 1083.78,-310.32"/>
+<polygon fill="black" stroke="black" points="1990.42,-548.49 1999.26,-554.34 1996,-544.26 1990.42,-548.49"/>
+<polygon fill="black" stroke="black" points="1084.17,-306.84 1073.83,-309.12 1083.34,-313.79 1084.17,-306.84"/>
</g>
<!-- PulseAudio->sndio -->
-<g id="edge56" class="edge">
+<g id="edge57" class="edge">
<title>PulseAudio->sndio</title>
-<path fill="none" stroke="black" d="M1847.35,-568.51C1884.11,-564.95 1933.83,-556.41 1973,-536 2083.95,-478.2 2176,-466.1 2176,-341 2176,-341 2176,-341 2176,-216 2176,-143.15 1614.49,-143.09 1457.4,-144.5"/>
-<polygon fill="black" stroke="black" points="1457.19,-141 1447.22,-144.6 1457.26,-148 1457.19,-141"/>
+<path fill="none" stroke="black" d="M2072.35,-567.64C2109.73,-563.63 2157.7,-554.92 2196.48,-536 2314.51,-478.42 2364.33,-460.64 2418.48,-341 2430.54,-314.36 2376.65,-342.18 2355.48,-322 2307.27,-276.03 2357.37,-224.15 2307.48,-180 2289.41,-164.01 2227.17,-154.28 2183.5,-149.27"/>
+<polygon fill="black" stroke="black" points="2183.71,-145.77 2173.39,-148.15 2182.94,-152.73 2183.71,-145.77"/>
</g>
<!-- PulseAudio->bluez -->
<g id="edge13" class="edge">
<title>PulseAudio->bluez</title>
-<path fill="none" stroke="black" d="M1756.87,-560.06C1684.71,-539.87 1531.35,-496.98 1457.89,-476.44"/>
-<polygon fill="black" stroke="black" points="1458.64,-473.01 1448.07,-473.69 1456.76,-479.75 1458.64,-473.01"/>
+<path fill="none" stroke="black" d="M1948.83,-570.68C1905.94,-568.08 1849.01,-559.79 1804.48,-536 1785.07,-525.63 1787.72,-513.68 1770.48,-500 1762.77,-493.88 1753.88,-488.1 1745.34,-483.07"/>
+<polygon fill="black" stroke="black" points="1747.06,-480.02 1736.63,-478.12 1743.59,-486.11 1747.06,-480.02"/>
</g>
<!-- ofono -->
<g id="node16" class="node">
<title>ofono</title>
-<polygon fill="yellow" stroke="black" points="1657.54,-456.54 1657.54,-471.46 1637.89,-482 1610.11,-482 1590.46,-471.46 1590.46,-456.54 1610.11,-446 1637.89,-446 1657.54,-456.54"/>
-<text text-anchor="middle" x="1624" y="-460.3" font-family="Times,serif" font-size="14.00">ofono</text>
+<polygon fill="yellow" stroke="black" points="1848.78,-456.54 1848.78,-471.46 1825.76,-482 1793.21,-482 1770.19,-471.46 1770.19,-456.54 1793.21,-446 1825.76,-446 1848.78,-456.54"/>
+<text text-anchor="middle" x="1809.48" y="-460.3" font-family="Times,serif" font-size="14.00">ofono</text>
</g>
<!-- PulseAudio->ofono -->
<g id="edge14" class="edge">
<title>PulseAudio->ofono</title>
-<path fill="none" stroke="black" d="M1763.93,-557.72C1752.25,-552.02 1739.38,-544.66 1729,-536 1713.44,-523.01 1716.91,-512.56 1701,-500 1689.41,-490.85 1675.04,-483.49 1661.86,-477.92"/>
-<polygon fill="black" stroke="black" points="1663.12,-474.65 1652.53,-474.18 1660.52,-481.15 1663.12,-474.65"/>
+<path fill="none" stroke="black" d="M1951.06,-567.02C1903.1,-562.58 1841.24,-553.57 1823.48,-536 1812.13,-524.77 1808.6,-507.18 1807.92,-492.32"/>
+<polygon fill="black" stroke="black" points="1811.42,-492.09 1807.86,-482.11 1804.42,-492.13 1811.42,-492.09"/>
</g>
<!-- sox -->
<g id="node17" class="node">
<title>sox</title>
<g id="a_node17"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox">
-<ellipse fill="lightgrey" stroke="black" cx="1779" cy="-464" rx="27" ry="18"/>
-<text text-anchor="middle" x="1779" y="-460.3" font-family="Times,serif" font-size="14.00">sox</text>
+<ellipse fill="lightgrey" stroke="black" cx="2121.48" cy="-464" rx="27" ry="18"/>
+<text text-anchor="middle" x="2121.48" y="-460.3" font-family="Times,serif" font-size="14.00">sox</text>
</a>
</g>
</g>
<!-- PulseAudio->sox -->
<g id="edge15" class="edge">
<title>PulseAudio->sox</title>
-<path fill="none" stroke="black" d="M1788.15,-553.97C1783.64,-537.28 1779.23,-511.58 1777.37,-492.08"/>
-<polygon fill="black" stroke="black" points="1780.85,-491.7 1776.61,-481.99 1773.87,-492.22 1780.85,-491.7"/>
+<path fill="none" stroke="black" d="M2024.04,-553.97C2041.72,-534.91 2073.6,-504.11 2096.21,-484.21"/>
+<polygon fill="black" stroke="black" points="2098.5,-486.85 2103.77,-477.66 2093.92,-481.56 2098.5,-486.85"/>
</g>
<!-- PulseAudio->PipeWire -->
-<g id="edge49" class="edge">
+<g id="edge50" class="edge">
<title>PulseAudio->PipeWire</title>
-<path fill="none" stroke="black" d="M1767.42,-548.6C1762.78,-544.57 1758.14,-540.28 1754,-536 1739.91,-521.43 1739.75,-514.9 1726,-500 1701.89,-473.88 1694.61,-468.39 1667,-446 1646.1,-429.05 1621.34,-411.41 1602.34,-398.34"/>
-<polygon fill="black" stroke="black" points="1765.24,-551.34 1775.14,-555.1 1769.74,-545.99 1765.24,-551.34"/>
-<polygon fill="black" stroke="black" points="1604.29,-395.43 1594.05,-392.68 1600.34,-401.21 1604.29,-395.43"/>
+<path fill="none" stroke="black" d="M1978.41,-549.69C1972.03,-545.31 1965.46,-540.62 1959.48,-536 1911.64,-499.04 1911.46,-473.24 1857.48,-446 1834.44,-434.37 1681.24,-404.32 1596.92,-388.35"/>
+<polygon fill="black" stroke="black" points="1976.7,-552.75 1986.95,-555.43 1980.61,-546.94 1976.7,-552.75"/>
+<polygon fill="black" stroke="black" points="1597.46,-384.89 1586.99,-386.47 1596.16,-391.77 1597.46,-384.89"/>
</g>
<!-- bluez->Bluetooth card -->
<g id="edge19" class="edge">
<title>bluez->Bluetooth card</title>
-<path fill="none" stroke="green" d="M1381.74,-456.27C1365.83,-451.29 1348.52,-442.7 1339,-428 1334.62,-421.23 1334.51,-412.92 1336.19,-405.04"/>
-<polygon fill="green" stroke="green" points="1339.55,-406 1339.08,-395.42 1332.85,-403.99 1339.55,-406"/>
+<path fill="none" stroke="green" d="M1710.69,-445.8C1710.82,-434.16 1711.01,-418.55 1711.16,-405.24"/>
+<polygon fill="green" stroke="green" points="1714.66,-405.22 1711.28,-395.18 1707.66,-405.13 1714.66,-405.22"/>
</g>
<!-- ofono->phone modem -->
<g id="edge17" class="edge">
<title>ofono->phone modem</title>
-<path fill="none" stroke="green" d="M1600.79,-450.82C1575.58,-437.59 1534.78,-416.18 1503.92,-400"/>
-<polygon fill="green" stroke="green" points="1505.18,-396.7 1494.69,-395.15 1501.92,-402.9 1505.18,-396.7"/>
+<path fill="none" stroke="green" d="M1780.3,-451.71C1774.15,-449.6 1767.65,-447.57 1761.48,-446 1695.2,-429.12 1506.61,-401.71 1404.01,-387.39"/>
+<polygon fill="green" stroke="green" points="1404.44,-383.91 1394.05,-386 1403.47,-390.85 1404.44,-383.91"/>
</g>
<!-- sox->filesystem -->
<g id="edge20" class="edge">
<title>sox->filesystem</title>
-<path fill="none" stroke="black" d="M1771.69,-446.43C1760.3,-422.74 1735.92,-379.76 1701,-359 1650.29,-328.86 1484.8,-314.27 1393.64,-308.36"/>
-<polygon fill="black" stroke="black" points="1393.64,-304.85 1383.44,-307.71 1393.2,-311.84 1393.64,-304.85"/>
+<path fill="none" stroke="black" d="M2107.92,-448.18C2084.55,-422.88 2037.32,-372.74 2017.48,-359 1995.7,-343.91 1969.02,-331.35 1946.44,-322.15"/>
+<polygon fill="black" stroke="black" points="1947.63,-318.86 1937.05,-318.42 1945.05,-325.36 1947.63,-318.86"/>
</g>
<!-- sox->null -->
<g id="edge21" class="edge">
<title>sox->null</title>
-<path fill="none" stroke="red" d="M1784.72,-446.03C1792.65,-422.47 1807.45,-378.51 1820,-341 1821.24,-337.28 1822.56,-333.35 1823.84,-329.5"/>
-<polygon fill="red" stroke="red" points="1827.26,-330.31 1827.1,-319.72 1820.62,-328.1 1827.26,-330.31"/>
+<path fill="none" stroke="red" d="M2118.17,-446.09C2112.75,-418.48 2101.97,-363.54 2095.58,-330.97"/>
+<polygon fill="red" stroke="red" points="2098.95,-329.98 2093.59,-320.85 2092.08,-331.33 2098.95,-329.98"/>
</g>
<!-- sox->ALSA -->
<g id="edge24" class="edge">
<title>sox->ALSA</title>
-<path fill="none" stroke="black" d="M1756.76,-474.32C1704.55,-496.35 1570.3,-553.85 1461,-608 1416.14,-630.22 1408.84,-644.05 1362,-661.74 1327.42,-674.8 1286.52,-683.85 1255.71,-689.47"/>
-<polygon fill="black" stroke="black" points="1254.91,-686.05 1245.68,-691.24 1256.13,-692.95 1254.91,-686.05"/>
+<path fill="none" stroke="black" d="M2098.89,-474.15C2061.64,-488.93 1984.74,-518.23 1917.48,-536 1746.22,-581.25 1688.3,-538.22 1525.48,-608 1488.12,-624.01 1488.3,-644.52 1451.48,-661.74 1423,-675.06 1388.77,-683.76 1361.41,-689.15"/>
+<polygon fill="black" stroke="black" points="1360.46,-685.77 1351.28,-691.06 1361.76,-692.65 1360.46,-685.77"/>
+</g>
+<!-- sox->sndio -->
+<g id="edge25" class="edge">
+<title>sox->sndio</title>
+<path fill="none" stroke="black" d="M2123.99,-445.92C2124.81,-440.22 2125.71,-433.84 2126.48,-428 2132.73,-380.95 2136.59,-369.38 2139.48,-322 2140.46,-306.03 2139.54,-302 2139.48,-286 2139.34,-246.67 2138.99,-201.17 2138.74,-172.73"/>
+<polygon fill="black" stroke="black" points="2142.24,-172.33 2138.65,-162.37 2135.24,-172.4 2142.24,-172.33"/>
</g>
<!-- sox->PulseAudio -->
<g id="edge23" class="edge">
<title>sox->PulseAudio</title>
-<path fill="none" stroke="black" d="M1786.64,-481.29C1791.22,-497.91 1795.72,-523.97 1797.61,-543.74"/>
-<polygon fill="black" stroke="black" points="1794.14,-544.26 1798.38,-553.97 1801.12,-543.73 1794.14,-544.26"/>
+<path fill="none" stroke="black" d="M2110.28,-480.56C2093.95,-498.36 2063.77,-527.67 2040.93,-548.09"/>
+<polygon fill="black" stroke="black" points="2038.39,-545.66 2033.2,-554.9 2043.02,-550.92 2038.39,-545.66"/>
</g>
<!-- libao -->
<g id="node19" class="node">
<title>libao</title>
<g id="a_node19"><a xlink:href="https://www.xiph.org/ao/" xlink:title="libao">
-<ellipse fill="lightgrey" stroke="black" cx="1663" cy="-377" rx="28.7" ry="18"/>
-<text text-anchor="middle" x="1663" y="-373.3" font-family="Times,serif" font-size="14.00">libao</text>
+<ellipse fill="lightgrey" stroke="black" cx="1975.48" cy="-377" rx="33.29" ry="18"/>
+<text text-anchor="middle" x="1975.48" y="-373.3" font-family="Times,serif" font-size="14.00">libao</text>
</a>
</g>
</g>
<!-- sox->libao -->
<g id="edge22" class="edge">
<title>sox->libao</title>
-<path fill="none" stroke="black" d="M1761.38,-450.09C1742.25,-436.07 1711.47,-413.52 1689.43,-397.37"/>
-<polygon fill="black" stroke="black" points="1691.3,-394.4 1681.17,-391.31 1687.16,-400.05 1691.3,-394.4"/>
+<path fill="none" stroke="black" d="M2099.46,-453.56C2093.35,-451.02 2086.69,-448.34 2080.48,-446 2057.2,-437.23 2048.74,-440.93 2027.48,-428 2015.78,-420.88 2004.59,-410.72 1995.6,-401.41"/>
+<polygon fill="black" stroke="black" points="1997.98,-398.83 1988.61,-393.88 1992.85,-403.59 1997.98,-398.83"/>
</g>
<!-- X11 bell -->
<g id="node18" class="node">
<title>X11 bell</title>
-<ellipse fill="lightgrey" stroke="black" cx="1724" cy="-697.74" rx="41.69" ry="18"/>
-<text text-anchor="middle" x="1724" y="-694.04" font-family="Times,serif" font-size="14.00">X11 bell</text>
+<ellipse fill="lightgrey" stroke="black" cx="1947.48" cy="-697.74" rx="48.99" ry="18"/>
+<text text-anchor="middle" x="1947.48" y="-694.04" font-family="Times,serif" font-size="14.00">X11 bell</text>
</g>
<!-- X11 bell->PulseAudio -->
<g id="edge16" class="edge">
<title>X11 bell->PulseAudio</title>
-<path fill="none" stroke="black" d="M1733.16,-679.92C1743.01,-661.97 1759.25,-632.77 1774,-608 1775.91,-604.79 1777.96,-601.44 1780,-598.13"/>
-<polygon fill="black" stroke="black" points="1782.98,-599.97 1785.32,-589.63 1777.05,-596.26 1782.98,-599.97"/>
+<path fill="none" stroke="black" d="M1956.25,-679.79C1967.01,-658.99 1985.37,-623.49 1997.95,-599.17"/>
+<polygon fill="black" stroke="black" points="2001.13,-600.63 2002.62,-590.14 1994.92,-597.41 2001.13,-600.63"/>
</g>
<!-- libao->filesystem -->
-<g id="edge25" class="edge">
+<g id="edge26" class="edge">
<title>libao->filesystem</title>
-<path fill="none" stroke="black" d="M1641.24,-365.2C1636.01,-362.91 1630.38,-360.67 1625,-359 1546.91,-334.72 1453.52,-319.83 1393.51,-312"/>
-<polygon fill="black" stroke="black" points="1393.81,-308.51 1383.44,-310.71 1392.92,-315.45 1393.81,-308.51"/>
+<path fill="none" stroke="black" d="M1959.15,-360.94C1949.11,-351.68 1936.01,-339.61 1924.56,-329.05"/>
+<polygon fill="black" stroke="black" points="1926.68,-326.23 1916.95,-322.03 1921.93,-331.38 1926.68,-326.23"/>
</g>
<!-- libao->null -->
-<g id="edge31" class="edge">
+<g id="edge32" class="edge">
<title>libao->null</title>
-<path fill="none" stroke="red" d="M1691.38,-374.78C1722.02,-372.24 1771.13,-364.49 1806,-341 1811.24,-337.47 1815.8,-332.51 1819.56,-327.39"/>
-<polygon fill="red" stroke="red" points="1822.59,-329.15 1825.14,-318.87 1816.74,-325.32 1822.59,-329.15"/>
+<path fill="none" stroke="red" d="M1996.58,-362.98C2016.12,-350.91 2045.2,-332.96 2065.81,-320.23"/>
+<polygon fill="red" stroke="red" points="2067.68,-323.19 2074.35,-314.96 2064,-317.24 2067.68,-323.19"/>
</g>
<!-- libao->ALSA -->
-<g id="edge27" class="edge">
+<g id="edge28" class="edge">
<title>libao->ALSA</title>
-<path fill="none" stroke="black" d="M1641.22,-388.73C1635.99,-391.03 1630.37,-393.28 1625,-395 1516.18,-429.88 1466.84,-380.79 1373,-446 1326.66,-478.21 1272.35,-616.21 1239,-661.74 1236.5,-665.15 1233.75,-668.65 1230.97,-672.05"/>
-<polygon fill="black" stroke="black" points="1228.27,-669.82 1224.5,-679.72 1233.62,-674.33 1228.27,-669.82"/>
+<path fill="none" stroke="black" d="M1943.13,-381.01C1849.71,-389.95 1580.87,-417.52 1497.48,-446 1451.52,-461.7 1431.58,-461.11 1402.48,-500 1358.25,-559.12 1406.46,-600.99 1364.48,-661.74 1359.92,-668.35 1353.66,-674.06 1347.07,-678.84"/>
+<polygon fill="black" stroke="black" points="1345.06,-675.96 1338.64,-684.39 1348.91,-681.81 1345.06,-675.96"/>
</g>
<!-- libao->OSS -->
-<g id="edge26" class="edge">
+<g id="edge27" class="edge">
<title>libao->OSS</title>
-<path fill="none" stroke="black" d="M1641.8,-364.79C1636.46,-362.45 1630.63,-360.3 1625,-359 1511.27,-332.67 1216.01,-353.96 1100,-341 1047.35,-335.12 987.4,-322.71 949.4,-314.12"/>
-<polygon fill="black" stroke="black" points="949.82,-310.62 939.29,-311.8 948.26,-317.44 949.82,-310.62"/>
+<path fill="none" stroke="black" d="M1950.01,-365.27C1943.14,-362.79 1935.62,-360.46 1928.48,-359 1790.23,-330.7 1752.35,-349.44 1611.48,-341 1414.37,-329.19 1179.06,-314.01 1083.75,-307.82"/>
+<polygon fill="black" stroke="black" points="1083.83,-304.32 1073.63,-307.16 1083.38,-311.3 1083.83,-304.32"/>
</g>
<!-- libao->sndio -->
-<g id="edge34" class="edge">
+<g id="edge35" class="edge">
<title>libao->sndio</title>
-<path fill="none" stroke="black" d="M1658.62,-358.99C1648.77,-324.03 1621.59,-243.62 1570,-199 1537.56,-170.94 1489.59,-157.16 1456.04,-150.59"/>
-<polygon fill="black" stroke="black" points="1456.59,-147.14 1446.12,-148.78 1455.33,-154.02 1456.59,-147.14"/>
+<path fill="none" stroke="black" d="M1986.95,-359.76C2015.06,-319.91 2087.59,-217.13 2121.07,-169.68"/>
+<polygon fill="black" stroke="black" points="2124.13,-171.41 2127.03,-161.23 2118.41,-167.38 2124.13,-171.41"/>
</g>
<!-- libao->PulseAudio -->
-<g id="edge29" class="edge">
+<g id="edge30" class="edge">
<title>libao->PulseAudio</title>
-<path fill="none" stroke="black" d="M1674.7,-393.58C1691.85,-416.57 1724.66,-461.07 1751,-500 1761.03,-514.83 1771.79,-531.75 1780.26,-545.36"/>
-<polygon fill="black" stroke="black" points="1777.49,-547.52 1785.73,-554.18 1783.44,-543.83 1777.49,-547.52"/>
+<path fill="none" stroke="black" d="M1978.67,-395.09C1984.94,-428.68 1998.9,-503.54 2006.43,-543.93"/>
+<polygon fill="black" stroke="black" points="2003.01,-544.68 2008.29,-553.87 2009.9,-543.4 2003.01,-544.68"/>
</g>
<!-- libao->aRts -->
-<g id="edge28" class="edge">
+<g id="edge29" class="edge">
<title>libao->aRts</title>
-<path fill="none" stroke="black" d="M1641.8,-364.79C1636.46,-362.45 1630.63,-360.3 1625,-359 1461.98,-321.32 1035.05,-363.64 873,-322 725.83,-284.18 564.28,-197.67 500.32,-161.44"/>
-<polygon fill="black" stroke="black" points="502.02,-158.38 491.6,-156.47 498.55,-164.46 502.02,-158.38"/>
+<path fill="none" stroke="black" d="M1949.44,-365.44C1942.71,-363.02 1935.4,-360.68 1928.48,-359 1867.95,-344.32 1849.74,-356.8 1789.48,-341 1767.69,-335.28 1763.2,-330.85 1742.48,-322 1620.1,-269.72 1598.69,-230.87 1469.48,-199 1452.92,-194.92 873.51,-163.13 856.48,-162 789.33,-157.52 711.33,-151.71 664.76,-148.17"/>
+<polygon fill="black" stroke="black" points="664.99,-144.68 654.76,-147.41 664.46,-151.66 664.99,-144.68"/>
</g>
<!-- ESD -->
<g id="node21" class="node">
<title>ESD</title>
-<ellipse fill="lightgrey" stroke="black" cx="839" cy="-144" rx="27.1" ry="18"/>
-<text text-anchor="middle" x="839" y="-140.3" font-family="Times,serif" font-size="14.00">ESD</text>
+<ellipse fill="lightgrey" stroke="black" cx="896.48" cy="-144" rx="31.4" ry="18"/>
+<text text-anchor="middle" x="896.48" y="-140.3" font-family="Times,serif" font-size="14.00">ESD</text>
</g>
<!-- libao->ESD -->
-<g id="edge30" class="edge">
+<g id="edge31" class="edge">
<title>libao->ESD</title>
-<path fill="none" stroke="black" d="M1641.36,-364.79C1636.12,-362.51 1630.46,-360.39 1625,-359 1522.4,-332.89 1253.08,-346.17 1150,-322 1049.24,-298.37 1021.1,-290.9 934,-235 904.76,-216.23 876.55,-187.77 858.58,-167.89"/>
-<polygon fill="black" stroke="black" points="861.02,-165.36 851.76,-160.21 855.78,-170.01 861.02,-165.36"/>
+<path fill="none" stroke="black" d="M1948.53,-366.25C1905.64,-350.74 1826.62,-322.15 1826.48,-322 1787.01,-280.58 1833.48,-234.34 1788.48,-199 1721.07,-146.05 1105.16,-144.28 938.11,-144.78"/>
+<polygon fill="black" stroke="black" points="937.76,-141.28 927.77,-144.82 937.78,-148.28 937.76,-141.28"/>
</g>
<!-- NAS -->
<g id="node22" class="node">
<title>NAS</title>
-<ellipse fill="lightgrey" stroke="black" cx="295" cy="-304" rx="90.98" ry="18"/>
-<text text-anchor="middle" x="295" y="-300.3" font-family="Times,serif" font-size="14.00">Network Audio Server</text>
+<ellipse fill="lightgrey" stroke="black" cx="405.48" cy="-304" rx="114.28" ry="18"/>
+<text text-anchor="middle" x="405.48" y="-300.3" font-family="Times,serif" font-size="14.00">Network Audio Server</text>
</g>
<!-- libao->NAS -->
-<g id="edge32" class="edge">
+<g id="edge33" class="edge">
<title>libao->NAS</title>
-<path fill="none" stroke="black" d="M1641.81,-364.75C1636.47,-362.41 1630.64,-360.27 1625,-359 1539.57,-339.74 924.49,-344.9 837,-341 679.11,-333.96 495.66,-320.71 387.78,-312.39"/>
-<polygon fill="black" stroke="black" points="387.82,-308.89 377.58,-311.61 387.28,-315.87 387.82,-308.89"/>
+<path fill="none" stroke="black" d="M1943.25,-372.7C1904.79,-368.87 1838.51,-362.62 1781.48,-359 1319.29,-329.7 768.68,-313.82 528.12,-307.83"/>
+<polygon fill="black" stroke="black" points="528.03,-304.33 517.95,-307.58 527.86,-311.32 528.03,-304.33"/>
</g>
<!-- libao->RoarAudio -->
-<g id="edge33" class="edge">
+<g id="edge34" class="edge">
<title>libao->RoarAudio</title>
-<path fill="none" stroke="black" d="M1641.33,-364.89C1636.1,-362.61 1630.44,-360.46 1625,-359 1472.66,-318.06 1425.57,-358.06 1272,-322 1183.41,-301.2 1084.72,-259.83 1031.72,-236.01"/>
-<polygon fill="black" stroke="black" points="1032.92,-232.71 1022.37,-231.78 1030.04,-239.09 1032.92,-232.71"/>
+<path fill="none" stroke="black" d="M1949.44,-365.46C1942.7,-363.04 1935.4,-360.69 1928.48,-359 1869.69,-344.62 1843.99,-374.37 1793.48,-341 1759.35,-318.45 1738.91,-273.97 1728.68,-245.14"/>
+<polygon fill="black" stroke="black" points="1731.88,-243.65 1725.37,-235.29 1725.24,-245.89 1731.88,-243.65"/>
</g>
<!-- ESD->network card -->
-<g id="edge43" class="edge">
+<g id="edge44" class="edge">
<title>ESD->network card</title>
-<path fill="none" stroke="black" d="M858.25,-131.12C874.33,-121.19 897.71,-106.75 917.35,-94.63"/>
-<polygon fill="black" stroke="black" points="919.39,-97.48 926.06,-89.25 915.72,-91.52 919.39,-97.48"/>
+<path fill="none" stroke="black" d="M927.06,-139.9C1032.76,-129.2 1384.34,-93.59 1531.65,-78.67"/>
+<polygon fill="black" stroke="black" points="1532.3,-82.12 1541.9,-77.63 1531.6,-75.16 1532.3,-82.12"/>
</g>
<!-- ESD->ALSA -->
-<g id="edge42" class="edge">
+<g id="edge43" class="edge">
<title>ESD->ALSA</title>
-<path fill="none" stroke="black" d="M829.04,-160.95C809.48,-194.27 769.33,-273.77 786,-341 809.58,-436.13 832.75,-455.73 889,-536 932.29,-597.78 936.85,-625.49 1003,-661.74 1052.63,-688.94 1118.26,-695.98 1161.97,-697.34"/>
-<polygon fill="black" stroke="black" points="1161.97,-700.84 1172.04,-697.56 1162.12,-693.84 1161.97,-700.84"/>
+<path fill="none" stroke="black" d="M866.33,-149.18C830.2,-156.08 774.48,-173.6 774.48,-216 774.48,-341 774.48,-341 774.48,-341 774.48,-416.21 982.8,-502.37 1037.48,-554 1084.55,-598.44 1079.12,-629.92 1135.48,-661.74 1174.88,-683.98 1226.16,-692.27 1263.37,-695.26"/>
+<polygon fill="black" stroke="black" points="1263.25,-698.76 1273.48,-695.98 1263.75,-691.78 1263.25,-698.76"/>
</g>
<!-- ESD->OSS -->
-<g id="edge41" class="edge">
+<g id="edge42" class="edge">
<title>ESD->OSS</title>
-<path fill="none" stroke="black" d="M841.72,-162.21C845.07,-180.8 851.76,-210.98 863,-235 870.31,-250.63 881.25,-266.48 890.84,-278.94"/>
-<polygon fill="black" stroke="black" points="888.25,-281.31 897.2,-286.98 893.74,-276.96 888.25,-281.31"/>
+<path fill="none" stroke="black" d="M904.12,-161.54C916.53,-187 943.18,-236.18 977.48,-268 985.84,-275.75 996.23,-282.42 1006.15,-287.79"/>
+<polygon fill="black" stroke="black" points="1004.55,-290.91 1015.05,-292.36 1007.75,-284.68 1004.55,-290.91"/>
</g>
<!-- NAS->network card -->
-<g id="edge108" class="edge">
+<g id="edge110" class="edge">
<title>NAS->network card</title>
-<path fill="none" stroke="black" d="M302.48,-285.82C319.72,-248.65 366.21,-161.24 436,-126 516.21,-85.5 784.1,-75.34 899.91,-72.82"/>
-<polygon fill="black" stroke="black" points="900.04,-76.32 909.97,-72.61 899.9,-69.32 900.04,-76.32"/>
+<path fill="none" stroke="black" d="M407.44,-285.81C412.96,-246.2 432.62,-148.73 495.48,-107 538.75,-78.28 1300.75,-73.1 1531.69,-72.19"/>
+<polygon fill="black" stroke="black" points="1531.97,-75.69 1541.95,-72.15 1531.94,-68.69 1531.97,-75.69"/>
</g>
<!-- RoarAudio->network card -->
-<g id="edge40" class="edge">
+<g id="edge41" class="edge">
<title>RoarAudio->network card</title>
-<path fill="none" stroke="black" d="M985.67,-188.93C978.69,-163.16 968.25,-124.6 961.28,-98.89"/>
-<polygon fill="black" stroke="black" points="982.38,-190.18 988.37,-198.92 989.14,-188.35 982.38,-190.18"/>
-<polygon fill="black" stroke="black" points="964.61,-97.8 958.62,-89.06 957.86,-99.63 964.61,-97.8"/>
-<text text-anchor="middle" x="1047.5" y="-140.3" font-family="Times,serif" font-size="14.00">IPv4, DECnet, OpenSLP</text>
+<path fill="none" stroke="black" d="M1699.83,-191.82C1677.35,-165.5 1641.55,-123.59 1618.8,-96.96"/>
+<polygon fill="black" stroke="black" points="1697.22,-194.15 1706.37,-199.48 1702.54,-189.6 1697.22,-194.15"/>
+<polygon fill="black" stroke="black" points="1621.35,-94.55 1612.19,-89.22 1616.02,-99.09 1621.35,-94.55"/>
+<text text-anchor="middle" x="1758.48" y="-140.3" font-family="Times,serif" font-size="14.00">IPv4, DECnet, OpenSLP</text>
</g>
<!-- RoarAudio->sndio -->
-<g id="edge36" class="edge">
+<g id="edge37" class="edge">
<title>RoarAudio->sndio</title>
-<path fill="none" stroke="black" d="M1034.71,-206.98C1071.11,-199.27 1125.41,-188.17 1173,-180 1245.11,-167.63 1329.72,-156.17 1377.98,-149.93"/>
-<polygon fill="black" stroke="black" points="1378.53,-153.38 1388,-148.64 1377.63,-146.44 1378.53,-153.38"/>
+<path fill="none" stroke="black" d="M1770.9,-207.44C1853.72,-193.37 2017.11,-165.62 2095.09,-152.37"/>
+<polygon fill="black" stroke="black" points="2095.79,-155.8 2105.06,-150.68 2094.61,-148.9 2095.79,-155.8"/>
</g>
<!-- RoarAudio->PulseAudio -->
-<g id="edge37" class="edge">
+<g id="edge38" class="edge">
<title>RoarAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M1033.4,-227.72C1084.95,-239.63 1177,-259.32 1257,-268 1291.2,-271.71 1851.8,-261.55 1876,-286 1891.69,-301.85 1907.2,-485.45 1868,-536 1861.74,-544.07 1853.14,-550.39 1844.06,-555.31"/>
-<polygon fill="black" stroke="black" points="1842.35,-552.24 1834.89,-559.76 1845.41,-558.54 1842.35,-552.24"/>
+<path fill="none" stroke="black" d="M1779.12,-219.63C1881.89,-223.73 2088.5,-237.88 2139.48,-286 2203.84,-346.74 2200.13,-397.31 2174.48,-482 2166.13,-509.61 2161.86,-519.1 2138.48,-536 2120.8,-548.78 2098.66,-556.9 2077.85,-562.05"/>
+<polygon fill="black" stroke="black" points="2077.05,-558.64 2068.08,-564.28 2078.6,-565.46 2077.05,-558.64"/>
</g>
<!-- RoarAudio->aRts -->
-<g id="edge39" class="edge">
+<g id="edge40" class="edge">
<title>RoarAudio->aRts</title>
-<path fill="none" stroke="black" d="M946.76,-209.7C844.49,-195.76 600.84,-162.56 508.41,-149.96"/>
-<polygon fill="black" stroke="black" points="508.79,-146.48 498.41,-148.6 507.85,-153.42 508.79,-146.48"/>
+<path fill="none" stroke="black" d="M1664.56,-210.99C1623.14,-207.37 1565.32,-202.53 1514.48,-199 1222.28,-178.73 1148.78,-180.88 856.48,-162 789.32,-157.66 711.32,-151.8 664.76,-148.22"/>
+<polygon fill="black" stroke="black" points="664.99,-144.73 654.75,-147.45 664.45,-151.71 664.99,-144.73"/>
</g>
<!-- RoarAudio->ESD -->
-<g id="edge38" class="edge">
+<g id="edge39" class="edge">
<title>RoarAudio->ESD</title>
-<path fill="none" stroke="black" d="M963.31,-202.31C936.53,-189.96 897.29,-171.87 870.09,-159.33"/>
-<polygon fill="black" stroke="black" points="871.2,-155.99 860.66,-154.98 868.27,-162.35 871.2,-155.99"/>
+<path fill="none" stroke="black" d="M1664.49,-211.18C1508.79,-197.76 1073.18,-160.23 937.42,-148.53"/>
+<polygon fill="black" stroke="black" points="937.33,-145.01 927.06,-147.63 936.72,-151.98 937.33,-145.01"/>
</g>
<!-- libcanberra -->
<g id="node24" class="node">
<title>libcanberra</title>
<g id="a_node24"><a xlink:href="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" xlink:title="libcanberra">
-<ellipse fill="lightgrey" stroke="black" cx="1350" cy="-843.74" rx="50.09" ry="18"/>
-<text text-anchor="middle" x="1350" y="-840.04" font-family="Times,serif" font-size="14.00">libcanberra</text>
+<ellipse fill="lightgrey" stroke="black" cx="1217.48" cy="-843.74" rx="63.89" ry="18"/>
+<text text-anchor="middle" x="1217.48" y="-840.04" font-family="Times,serif" font-size="14.00">libcanberra</text>
</a>
</g>
</g>
<!-- libcanberra->null -->
-<g id="edge48" class="edge">
+<g id="edge49" class="edge">
<title>libcanberra->null</title>
-<path fill="none" stroke="red" d="M1346.38,-825.56C1329.31,-743.54 1258.96,-394.4 1291,-359 1324.35,-322.15 1669,-309.39 1790.16,-306.02"/>
-<polygon fill="red" stroke="red" points="1790.27,-309.51 1800.17,-305.74 1790.08,-302.52 1790.27,-309.51"/>
+<path fill="none" stroke="red" d="M1154.66,-840.23C1117.32,-835.11 1072.64,-821.82 1048.48,-788.74 1001.31,-724.14 809.44,-811.78 1065.48,-446 1121.77,-365.59 1172.94,-381.48 1268.48,-359 1295.86,-352.56 1963.92,-322.62 1970.48,-322 1998.04,-319.39 2028.96,-314.97 2052.51,-311.29"/>
+<polygon fill="red" stroke="red" points="2053.12,-314.74 2062.45,-309.72 2052.02,-307.83 2053.12,-314.74"/>
</g>
<!-- libcanberra->ALSA -->
-<g id="edge46" class="edge">
+<g id="edge47" class="edge">
<title>libcanberra->ALSA</title>
-<path fill="none" stroke="black" d="M1308.19,-833.67C1282.34,-825.94 1250.48,-812.23 1231,-788.74 1216.45,-771.19 1211.26,-745.48 1209.54,-726.03"/>
-<polygon fill="black" stroke="black" points="1213.03,-725.72 1208.9,-715.96 1206.04,-726.16 1213.03,-725.72"/>
+<path fill="none" stroke="black" d="M1228.57,-825.94C1245.07,-800.93 1276.22,-753.71 1295.58,-724.37"/>
+<polygon fill="black" stroke="black" points="1298.59,-726.15 1301.18,-715.88 1292.75,-722.3 1298.59,-726.15"/>
</g>
<!-- libcanberra->OSS -->
-<g id="edge45" class="edge">
+<g id="edge46" class="edge">
<title>libcanberra->OSS</title>
-<path fill="none" stroke="black" d="M1300.01,-842.24C1189.85,-838.29 924.94,-812.68 786,-661.74 694.37,-562.19 674.64,-468.58 754,-359 780.89,-321.87 834.97,-310.03 872.07,-306.39"/>
-<polygon fill="black" stroke="black" points="872.37,-309.88 882.05,-305.57 871.8,-302.9 872.37,-309.88"/>
+<path fill="none" stroke="black" d="M1156.4,-838.57C1040.58,-829.82 800.48,-807.4 800.48,-771.74 800.48,-771.74 800.48,-771.74 800.48,-633.87 800.48,-494.1 805.44,-429.88 912.48,-340 936.19,-320.1 970.26,-311.45 997.29,-307.72"/>
+<polygon fill="black" stroke="black" points="997.76,-311.19 1007.27,-306.52 996.93,-304.24 997.76,-311.19"/>
</g>
<!-- libcanberra->PulseAudio -->
-<g id="edge44" class="edge">
+<g id="edge45" class="edge">
<title>libcanberra->PulseAudio</title>
-<path fill="none" stroke="black" d="M1374.61,-827.85C1449.84,-782.36 1676.77,-645.11 1762.62,-593.19"/>
-<polygon fill="black" stroke="black" points="1764.44,-596.18 1771.19,-588.01 1760.82,-590.19 1764.44,-596.18"/>
+<path fill="none" stroke="black" d="M1281.17,-841.67C1407.42,-838.71 1684.68,-827.84 1770.48,-788.74 1797.07,-776.62 1938.84,-626.47 1961.48,-608 1967,-603.5 1973.07,-598.95 1979.01,-594.69"/>
+<polygon fill="black" stroke="black" points="1981.38,-597.3 1987.56,-588.69 1977.36,-591.57 1981.38,-597.3"/>
</g>
<!-- gstreamer -->
<g id="node25" class="node">
<title>gstreamer</title>
-<ellipse fill="lightgrey" stroke="black" cx="1680" cy="-770.74" rx="46.29" ry="18"/>
-<text text-anchor="middle" x="1680" y="-767.04" font-family="Times,serif" font-size="14.00">gstreamer</text>
+<ellipse fill="lightgrey" stroke="black" cx="1926.48" cy="-770.74" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="1926.48" y="-767.04" font-family="Times,serif" font-size="14.00">gstreamer</text>
</g>
<!-- libcanberra->gstreamer -->
-<g id="edge47" class="edge">
+<g id="edge48" class="edge">
<title>libcanberra->gstreamer</title>
-<path fill="none" stroke="black" d="M1395.59,-836.21C1436.71,-829.99 1498.72,-819.82 1552,-807.74 1580,-801.39 1611,-792.72 1635.48,-785.47"/>
-<polygon fill="black" stroke="black" points="1636.63,-788.79 1645.21,-782.57 1634.62,-782.08 1636.63,-788.79"/>
+<path fill="none" stroke="black" d="M1281.09,-842.02C1418.28,-840 1738.09,-832.7 1843.48,-807.74 1859.01,-804.06 1875.28,-797.64 1889.26,-791.22"/>
+<polygon fill="black" stroke="black" points="1891,-794.27 1898.53,-786.82 1888,-787.95 1891,-794.27"/>
</g>
<!-- gstreamer->ALSA -->
-<g id="edge109" class="edge">
+<g id="edge111" class="edge">
<title>gstreamer->ALSA</title>
-<path fill="none" stroke="black" d="M1637.79,-763.38C1549.84,-750.12 1347.56,-719.63 1255.8,-705.79"/>
-<polygon fill="black" stroke="black" points="1256.1,-702.3 1245.69,-704.27 1255.06,-709.22 1256.1,-702.3"/>
+<path fill="none" stroke="black" d="M1872.26,-763.47C1754.04,-749.8 1474.61,-717.49 1361.39,-704.4"/>
+<polygon fill="black" stroke="black" points="1361.62,-700.9 1351.29,-703.23 1360.82,-707.85 1361.62,-700.9"/>
</g>
<!-- gstreamer->JACK -->
-<g id="edge111" class="edge">
+<g id="edge113" class="edge">
<title>gstreamer->JACK</title>
-<path fill="none" stroke="black" d="M1665.05,-753.4C1656.52,-743.25 1646.3,-729.54 1640,-715.74 1609.42,-648.75 1644.54,-615.48 1604,-554 1596.46,-542.57 1588.07,-546.25 1579,-536 1567.26,-522.74 1557.63,-505.34 1550.88,-491.09"/>
-<polygon fill="black" stroke="black" points="1553.99,-489.47 1546.67,-481.81 1547.62,-492.36 1553.99,-489.47"/>
+<path fill="none" stroke="black" d="M1905.55,-753.8C1894.98,-746.54 1881.63,-738.52 1868.48,-733.74 1815.32,-714.41 1791.5,-743.98 1742.48,-715.74 1636.71,-654.8 1651.5,-593.05 1572.48,-500 1569.11,-496.02 1565.44,-491.87 1561.84,-487.87"/>
+<polygon fill="black" stroke="black" points="1564.4,-485.49 1555.07,-480.46 1559.23,-490.21 1564.4,-485.49"/>
</g>
<!-- gstreamer->OSS -->
-<g id="edge110" class="edge">
+<g id="edge112" class="edge">
<title>gstreamer->OSS</title>
-<path fill="none" stroke="black" d="M1714.66,-758.83C1732.06,-752.76 1753.17,-744.46 1771,-734.74 1836.7,-698.92 1842.72,-663.45 1857,-590 1878.49,-479.48 1857.35,-401.28 1753,-359 1703.02,-338.75 1321.8,-344.71 1268,-341 1152.32,-333.03 1016.13,-317.62 950.41,-309.8"/>
-<polygon fill="black" stroke="black" points="950.45,-306.28 940.1,-308.57 949.61,-313.23 950.45,-306.28"/>
+<path fill="none" stroke="black" d="M1961.07,-756.03C1974.65,-750.13 1990.14,-742.75 2003.48,-734.74 2049.13,-707.32 2074.95,-709.5 2098.48,-661.74 2109.04,-640.32 2101.91,-631.64 2098.48,-608 2094.89,-583.23 2096.89,-574.47 2082.48,-554 2040.31,-494.06 1885.59,-383.43 1816.48,-359 1736.15,-330.6 1518.49,-346.89 1433.48,-341 1306.12,-332.18 1155.95,-317.13 1083.66,-309.59"/>
+<polygon fill="black" stroke="black" points="1083.88,-306.09 1073.57,-308.53 1083.15,-313.05 1083.88,-306.09"/>
</g>
<!-- gstreamer->sndio -->
-<g id="edge58" class="edge">
+<g id="edge59" class="edge">
<title>gstreamer->sndio</title>
-<path fill="none" stroke="black" d="M1722.31,-763.53C1790.22,-752.07 1925.89,-722.96 2024,-661.74 2039.61,-652 2252,-439.9 2252,-421.5 2252,-421.5 2252,-421.5 2252,-216 2252,-159.89 2186.31,-189.44 2131,-180 1999.96,-157.63 1588.24,-148.19 1457.36,-145.7"/>
-<polygon fill="black" stroke="black" points="1457.07,-142.2 1447,-145.51 1456.93,-149.2 1457.07,-142.2"/>
+<path fill="none" stroke="black" d="M1972.08,-759.19C2042.1,-742.35 2179.73,-706.64 2291.48,-661.74 2355.99,-635.82 2374.46,-631.17 2430.48,-590 2438.92,-583.8 2691.5,-331.68 2695.48,-322 2736.41,-222.42 2506.32,-223.78 2321.48,-180 2274.16,-168.79 2219.29,-158.67 2182.07,-152.23"/>
+<polygon fill="black" stroke="black" points="2182.51,-148.76 2172.06,-150.52 2181.33,-155.66 2182.51,-148.76"/>
</g>
<!-- gstreamer->PulseAudio -->
-<g id="edge112" class="edge">
+<g id="edge114" class="edge">
<title>gstreamer->PulseAudio</title>
-<path fill="none" stroke="black" d="M1714.85,-758.74C1735.67,-750.33 1760.75,-736.56 1775,-715.74 1798.66,-681.16 1800.36,-630.82 1798.71,-600.09"/>
-<polygon fill="black" stroke="black" points="1802.2,-599.83 1798.01,-590.09 1795.21,-600.31 1802.2,-599.83"/>
+<path fill="none" stroke="black" d="M1959.86,-755.84C1976.64,-746.99 1995.49,-733.75 2005.48,-715.74 2025.42,-679.81 2022.07,-630.61 2017.22,-600.36"/>
+<polygon fill="black" stroke="black" points="2020.6,-599.37 2015.4,-590.13 2013.7,-600.59 2020.6,-599.37"/>
</g>
<!-- gstreamer->PipeWire -->
-<g id="edge52" class="edge">
+<g id="edge53" class="edge">
<title>gstreamer->PipeWire</title>
-<path fill="none" stroke="black" d="M1650.07,-756.88C1615.25,-740.25 1558.84,-707.86 1530,-661.74 1478.64,-579.6 1460.35,-534.82 1499,-446 1507.45,-426.57 1524.5,-410.18 1540,-398.36"/>
-<polygon fill="black" stroke="black" points="1542.34,-400.98 1548.38,-392.28 1538.23,-395.32 1542.34,-400.98"/>
+<path fill="none" stroke="black" d="M1872.37,-763.4C1810.92,-755.21 1715.64,-739.15 1688.48,-715.74 1591.04,-631.75 1640.86,-561.15 1583.48,-446 1576.21,-431.41 1566.77,-415.89 1558.68,-403.37"/>
+<polygon fill="black" stroke="black" points="1561.49,-401.27 1553.08,-394.83 1555.64,-405.11 1561.49,-401.27"/>
</g>
<!-- PipeWire->? -->
-<g id="edge53" class="edge">
+<g id="edge54" class="edge">
<title>PipeWire->?</title>
-<path fill="none" stroke="red" d="M1540.42,-364.25C1533.45,-362.12 1526.05,-360.2 1519,-359 1365.59,-332.97 974.55,-345.37 819,-341 680.32,-337.11 327.69,-362.49 195,-322 193.58,-321.57 192.15,-321.03 190.75,-320.43"/>
-<polygon fill="red" stroke="red" points="192.35,-317.32 181.88,-315.69 189.05,-323.49 192.35,-317.32"/>
+<path fill="none" stroke="red" d="M1493.37,-369C1466.91,-365.42 1433.45,-361.34 1403.48,-359 1279.24,-349.32 401.63,-358.53 282.48,-322 281.06,-321.56 279.64,-321.03 278.23,-320.43"/>
+<polygon fill="red" stroke="red" points="279.83,-317.32 269.36,-315.69 276.53,-323.49 279.83,-317.32"/>
</g>
<!-- OpenAL -->
<g id="node27" class="node">
<title>OpenAL</title>
<g id="a_node27"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL">
-<ellipse fill="lightgrey" stroke="black" cx="1855" cy="-843.74" rx="41.69" ry="18"/>
-<text text-anchor="middle" x="1855" y="-840.04" font-family="Times,serif" font-size="14.00">OpenAL</text>
+<ellipse fill="lightgrey" stroke="black" cx="1923.48" cy="-843.74" rx="47.39" ry="18"/>
+<text text-anchor="middle" x="1923.48" y="-840.04" font-family="Times,serif" font-size="14.00">OpenAL</text>
</a>
</g>
</g>
<!-- OpenAL->filesystem -->
-<g id="edge65" class="edge">
+<g id="edge66" class="edge">
<title>OpenAL->filesystem</title>
-<path fill="none" stroke="black" d="M1895.61,-839.38C1956.31,-833.42 2066.14,-818.7 2090,-788.74 2194.6,-657.38 2039.12,-574.48 1931,-446 1894.35,-402.45 1888.8,-382.6 1837,-359 1759.31,-323.61 1510.18,-310.86 1393.44,-306.75"/>
-<polygon fill="black" stroke="black" points="1393.36,-303.25 1383.24,-306.4 1393.12,-310.24 1393.36,-303.25"/>
+<path fill="none" stroke="black" d="M1969.08,-838.6C2027.34,-832.19 2122.9,-817.47 2141.48,-788.74 2224.32,-660.71 2223,-583.7 2157.48,-446 2121.37,-370.08 2025.01,-333.54 1960.56,-317.1"/>
+<polygon fill="black" stroke="black" points="1961.05,-313.62 1950.51,-314.63 1959.38,-320.42 1961.05,-313.62"/>
</g>
<!-- OpenAL->null -->
-<g id="edge66" class="edge">
+<g id="edge68" class="edge">
<title>OpenAL->null</title>
-<path fill="none" stroke="red" d="M1896.16,-840.99C1947.43,-837.93 2037.26,-829.68 2111,-807.74 2201.31,-780.86 2252.9,-796.16 2302,-715.74 2326.96,-674.87 2309.34,-655.32 2302,-608 2288.06,-518.13 2302.1,-479.44 2240,-413 2188.87,-358.29 1959.27,-322.09 1868.8,-309.72"/>
-<polygon fill="red" stroke="red" points="1869.11,-306.23 1858.73,-308.37 1868.18,-313.17 1869.11,-306.23"/>
+<path fill="none" stroke="red" d="M1970.95,-841.6C2088.29,-838.22 2389.23,-826.07 2481.48,-788.74 2541,-764.66 2594.48,-762.95 2594.48,-698.74 2594.48,-698.74 2594.48,-698.74 2594.48,-517 2594.48,-355.64 2435.78,-371.33 2277.48,-340 2225.66,-329.74 2165.59,-318.64 2127.81,-311.75"/>
+<polygon fill="red" stroke="red" points="2128.24,-308.27 2117.77,-309.92 2126.98,-315.16 2128.24,-308.27"/>
</g>
<!-- OpenAL->portaudio -->
-<g id="edge63" class="edge">
+<g id="edge64" class="edge">
<title>OpenAL->portaudio</title>
-<path fill="none" stroke="black" d="M1891.75,-835.23C1916.93,-829.39 1950.75,-820.19 1979,-807.74 1988.68,-803.47 1998.66,-797.8 2007.55,-792.23"/>
-<polygon fill="black" stroke="black" points="2009.54,-795.12 2016.03,-786.75 2005.74,-789.24 2009.54,-795.12"/>
+<path fill="none" stroke="black" d="M1888.46,-831.33C1851.77,-819.38 1793.9,-800.54 1753.08,-787.24"/>
+<polygon fill="black" stroke="black" points="1753.94,-783.84 1743.35,-784.07 1751.78,-790.5 1753.94,-783.84"/>
</g>
<!-- OpenAL->ALSA -->
-<g id="edge60" class="edge">
+<g id="edge61" class="edge">
<title>OpenAL->ALSA</title>
-<path fill="none" stroke="black" d="M1814.14,-839.69C1759.63,-835.15 1660.32,-825.2 1577,-807.74 1454.8,-782.13 1314.33,-735.61 1247.81,-712.52"/>
-<polygon fill="black" stroke="black" points="1248.75,-709.14 1238.16,-709.15 1246.45,-715.75 1248.75,-709.14"/>
+<path fill="none" stroke="black" d="M1876.93,-840.19C1773.48,-834.08 1527.46,-816.97 1449.48,-788.74 1407.23,-773.44 1364.98,-742.77 1338.8,-721.52"/>
+<polygon fill="black" stroke="black" points="1340.83,-718.65 1330.89,-714.98 1336.37,-724.05 1340.83,-718.65"/>
</g>
<!-- OpenAL->JACK -->
-<g id="edge64" class="edge">
+<g id="edge65" class="edge">
<title>OpenAL->JACK</title>
-<path fill="none" stroke="black" d="M1815.21,-838.28C1756.83,-830.96 1651.96,-814.56 1625,-788.74 1540.67,-707.98 1536.36,-554.55 1538.4,-492.28"/>
-<polygon fill="black" stroke="black" points="1541.91,-492.22 1538.82,-482.09 1534.91,-491.93 1541.91,-492.22"/>
+<path fill="none" stroke="black" d="M1876.35,-841.09C1761.27,-836.57 1468.75,-822.07 1377.48,-788.74 1321.32,-768.23 1293.08,-768.25 1264.48,-715.74 1256.83,-701.69 1257.09,-693.93 1264.48,-679.74 1309.59,-593.21 1357.68,-598.59 1444.48,-554 1465.87,-543.02 1476.68,-550.98 1495.48,-536 1503.65,-529.5 1516.74,-508.09 1526.7,-490.47"/>
+<polygon fill="black" stroke="black" points="1529.78,-492.13 1531.59,-481.69 1523.67,-488.73 1529.78,-492.13"/>
</g>
<!-- OpenAL->OSS -->
-<g id="edge61" class="edge">
+<g id="edge62" class="edge">
<title>OpenAL->OSS</title>
-<path fill="none" stroke="black" d="M1813.36,-842.32C1757.42,-840.7 1655.51,-833.99 1573,-807.74 1442.26,-766.14 1419.15,-731.49 1301,-661.74 1269.32,-643.04 1048.88,-508.14 1023,-482 1010.76,-469.64 954.26,-376.9 926.49,-330.82"/>
-<polygon fill="black" stroke="black" points="929.34,-328.77 921.19,-322 923.34,-332.38 929.34,-328.77"/>
+<path fill="none" stroke="black" d="M1875.98,-841.96C1704.38,-838.85 1122.71,-825.66 1048.48,-788.74 981.89,-755.61 965.31,-731.49 939.48,-661.74 894.52,-540.31 982.59,-389.43 1022.38,-330.37"/>
+<polygon fill="black" stroke="black" points="1025.34,-332.25 1028.1,-322.02 1019.57,-328.29 1025.34,-332.25"/>
+</g>
+<!-- OpenAL->sndio -->
+<g id="edge67" class="edge">
+<title>OpenAL->sndio</title>
+<path fill="none" stroke="black" d="M1970.96,-842.76C2097.14,-842.15 2438,-836.06 2538.48,-788.74 2740.81,-693.46 2696.67,-543.64 2726.48,-322 2730.64,-291.07 2734.04,-276.48 2713.48,-253 2680.98,-215.87 2663.46,-214.1 2616.48,-199 2463.68,-149.89 2270.9,-144.08 2184.29,-144.24"/>
+<polygon fill="black" stroke="black" points="2184.25,-140.74 2174.27,-144.28 2184.28,-147.74 2184.25,-140.74"/>
</g>
<!-- OpenAL->PulseAudio -->
-<g id="edge59" class="edge">
+<g id="edge60" class="edge">
<title>OpenAL->PulseAudio</title>
-<path fill="none" stroke="black" d="M1875.14,-827.92C1886.55,-818.21 1899.76,-804.44 1906,-788.74 1911.91,-773.87 1908.33,-768.57 1906,-752.74 1901.06,-719.22 1899.58,-709.83 1884,-679.74 1865.4,-643.82 1854.11,-638.89 1828,-608 1824.99,-604.44 1821.74,-600.74 1818.51,-597.14"/>
-<polygon fill="black" stroke="black" points="1820.89,-594.54 1811.57,-589.5 1815.71,-599.25 1820.89,-594.54"/>
+<path fill="none" stroke="black" d="M1967.46,-836.84C2019.41,-828.87 2101.14,-812.82 2119.48,-788.74 2154.94,-742.19 2140.05,-700.89 2065.48,-608 2061.16,-602.61 2055.78,-597.79 2050.1,-593.57"/>
+<polygon fill="black" stroke="black" points="2051.89,-590.55 2041.65,-587.82 2047.95,-596.34 2051.89,-590.55"/>
</g>
<!-- SoundIO -->
<g id="node28" class="node">
<title>SoundIO</title>
<g id="a_node28"><a xlink:href="http://libsound.io/" xlink:title="SoundIO">
-<ellipse fill="lightgrey" stroke="black" cx="1855" cy="-770.74" rx="42.49" ry="18"/>
-<text text-anchor="middle" x="1855" y="-767.04" font-family="Times,serif" font-size="14.00">SoundIO</text>
+<ellipse fill="lightgrey" stroke="black" cx="2059.48" cy="-770.74" rx="50.89" ry="18"/>
+<text text-anchor="middle" x="2059.48" y="-767.04" font-family="Times,serif" font-size="14.00">SoundIO</text>
</a>
</g>
</g>
<!-- OpenAL->SoundIO -->
-<g id="edge62" class="edge">
+<g id="edge63" class="edge">
<title>OpenAL->SoundIO</title>
-<path fill="none" stroke="black" d="M1855,-825.55C1855,-817.53 1855,-807.79 1855,-798.81"/>
-<polygon fill="black" stroke="black" points="1858.5,-798.77 1855,-788.77 1851.5,-798.77 1858.5,-798.77"/>
+<path fill="none" stroke="black" d="M1950.35,-828.71C1971.17,-817.84 2000.23,-802.67 2023.13,-790.72"/>
+<polygon fill="black" stroke="black" points="2024.96,-793.71 2032.21,-785.98 2021.72,-787.51 2024.96,-793.71"/>
</g>
<!-- SoundIO->null -->
-<g id="edge70" class="edge">
+<g id="edge72" class="edge">
<title>SoundIO->null</title>
-<path fill="none" stroke="red" d="M1877.11,-755.39C1938.58,-713.51 2105.15,-585.56 2076,-446 2067.37,-404.7 2070.06,-386.43 2038,-359 1992,-319.64 1920.56,-308.54 1875.05,-305.65"/>
-<polygon fill="red" stroke="red" points="1875.09,-302.15 1864.91,-305.12 1874.72,-309.14 1875.09,-302.15"/>
+<path fill="none" stroke="red" d="M2109.09,-766.46C2153.73,-761.39 2219.37,-748.5 2266.48,-715.74 2322.48,-676.79 2333.98,-655.06 2354.48,-590 2395.04,-461.31 2259.99,-446.74 2157.48,-359 2142.77,-346.41 2125.79,-332.73 2112.6,-322.28"/>
+<polygon fill="red" stroke="red" points="2114.56,-319.37 2104.54,-315.93 2110.23,-324.87 2114.56,-319.37"/>
</g>
<!-- SoundIO->ALSA -->
-<g id="edge69" class="edge">
+<g id="edge71" class="edge">
<title>SoundIO->ALSA</title>
-<path fill="none" stroke="black" d="M1815.87,-763.81C1792.44,-760.35 1762.05,-756.04 1735,-752.74 1558.42,-731.18 1347.78,-711.32 1255.82,-702.94"/>
-<polygon fill="black" stroke="black" points="1256,-699.44 1245.72,-702.02 1255.36,-706.41 1256,-699.44"/>
+<path fill="none" stroke="black" d="M2021.58,-758.62C2012.75,-756.37 2003.34,-754.24 1994.48,-752.74 1759.4,-713.01 1473.66,-702.39 1361.25,-699.65"/>
+<polygon fill="black" stroke="black" points="1361.31,-696.15 1351.23,-699.42 1361.15,-703.15 1361.31,-696.15"/>
</g>
<!-- SoundIO->JACK -->
-<g id="edge67" class="edge">
+<g id="edge69" class="edge">
<title>SoundIO->JACK</title>
-<path fill="none" stroke="black" d="M1844.25,-753.26C1818.98,-715.27 1752.59,-619.79 1682,-554 1651.16,-525.25 1639.88,-522.15 1604,-500 1593.85,-493.74 1582.51,-487.34 1572.22,-481.77"/>
-<polygon fill="black" stroke="black" points="1573.61,-478.54 1563.14,-476.9 1570.3,-484.71 1573.61,-478.54"/>
+<path fill="none" stroke="black" d="M2020.86,-759.08C1978.22,-747.04 1912.56,-727.57 1889.48,-715.74 1746.52,-642.47 1733.19,-589.04 1599.48,-500 1590.71,-494.16 1580.95,-488.17 1571.94,-482.84"/>
+<polygon fill="black" stroke="black" points="1573.64,-479.78 1563.24,-477.76 1570.11,-485.82 1573.64,-479.78"/>
</g>
<!-- SoundIO->PulseAudio -->
-<g id="edge68" class="edge">
+<g id="edge70" class="edge">
<title>SoundIO->PulseAudio</title>
-<path fill="none" stroke="black" d="M1849.87,-752.62C1839.55,-718.24 1816.26,-640.55 1803.96,-599.53"/>
-<polygon fill="black" stroke="black" points="1807.3,-598.51 1801.08,-589.94 1800.6,-600.52 1807.3,-598.51"/>
+<path fill="none" stroke="black" d="M2079.23,-754.13C2084.24,-748.31 2087.87,-741.27 2086.48,-733.74 2075.64,-674.91 2067.73,-660.18 2038.48,-608 2036.61,-604.66 2034.44,-601.29 2032.16,-598.03"/>
+<polygon fill="black" stroke="black" points="2034.78,-595.68 2026,-589.75 2029.16,-599.86 2034.78,-595.68"/>
</g>
<!-- RtAudio -->
<g id="node29" class="node">
<title>RtAudio</title>
<g id="a_node29"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio">
-<ellipse fill="lightgrey" stroke="black" cx="1281" cy="-770.74" rx="40.89" ry="18"/>
-<text text-anchor="middle" x="1281" y="-767.04" font-family="Times,serif" font-size="14.00">RtAudio</text>
+<ellipse fill="lightgrey" stroke="black" cx="1506.48" cy="-770.74" rx="48.19" ry="18"/>
+<text text-anchor="middle" x="1506.48" y="-767.04" font-family="Times,serif" font-size="14.00">RtAudio</text>
</a>
</g>
</g>
<!-- RtAudio->ALSA -->
-<g id="edge72" class="edge">
+<g id="edge74" class="edge">
<title>RtAudio->ALSA</title>
-<path fill="none" stroke="black" d="M1278.54,-752.72C1276.95,-746.26 1274.32,-739.16 1270,-733.74 1263.73,-725.88 1255.18,-719.45 1246.46,-714.35"/>
-<polygon fill="black" stroke="black" points="1247.88,-711.14 1237.41,-709.51 1244.58,-717.31 1247.88,-711.14"/>
+<path fill="none" stroke="black" d="M1473.73,-757.5C1454.95,-750.5 1430.91,-741.58 1409.48,-733.74 1390.79,-726.9 1370.04,-719.4 1352.54,-713.1"/>
+<polygon fill="black" stroke="black" points="1353.25,-709.64 1342.66,-709.55 1350.88,-716.22 1353.25,-709.64"/>
</g>
<!-- RtAudio->JACK -->
-<g id="edge73" class="edge">
+<g id="edge75" class="edge">
<title>RtAudio->JACK</title>
-<path fill="none" stroke="black" d="M1298.28,-754.34C1337.58,-718.73 1435.23,-626.75 1500,-536 1510.22,-521.68 1519.94,-504.53 1527.25,-490.67"/>
-<polygon fill="black" stroke="black" points="1530.41,-492.17 1531.89,-481.68 1524.19,-488.95 1530.41,-492.17"/>
+<path fill="none" stroke="black" d="M1509.96,-752.54C1517.55,-713.98 1535.41,-617.63 1541.48,-536 1542.55,-521.69 1542.44,-505.71 1542,-492.54"/>
+<polygon fill="black" stroke="black" points="1545.49,-492.09 1541.58,-482.24 1538.49,-492.38 1545.49,-492.09"/>
</g>
<!-- RtAudio->OSS -->
-<g id="edge71" class="edge">
+<g id="edge73" class="edge">
<title>RtAudio->OSS</title>
-<path fill="none" stroke="black" d="M1244.4,-762.51C1187.27,-749.83 1075.45,-719.3 998,-661.74 941.35,-619.64 923.77,-602.81 901,-536 877.01,-465.62 892.97,-376.16 903.63,-332.07"/>
-<polygon fill="black" stroke="black" points="907.09,-332.67 906.13,-322.12 900.3,-330.97 907.09,-332.67"/>
-<text text-anchor="middle" x="928.5" y="-514.3" font-family="Times,serif" font-size="14.00">OSS 4.0+</text>
+<path fill="none" stroke="black" d="M1497.68,-752.84C1467.88,-697.11 1365.38,-516.8 1234.48,-413 1183.45,-372.53 1115.28,-338.44 1074.82,-319.93"/>
+<polygon fill="black" stroke="black" points="1076.2,-316.71 1065.65,-315.79 1073.32,-323.09 1076.2,-316.71"/>
+<text text-anchor="middle" x="1389.48" y="-514.3" font-family="Times,serif" font-size="14.00">OSS 4.0+</text>
</g>
<!-- RtAudio->PulseAudio -->
-<g id="edge74" class="edge">
+<g id="edge76" class="edge">
<title>RtAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M1313.4,-759.46C1334.67,-752.63 1363.07,-743.37 1388,-734.74 1443.36,-715.58 1581.93,-662.46 1583,-661.74 1610.09,-643.56 1604.63,-624.11 1633,-608 1664,-590.4 1702.9,-581.63 1734.93,-577.27"/>
-<polygon fill="black" stroke="black" points="1735.57,-580.72 1745.06,-576.01 1734.71,-573.77 1735.57,-580.72"/>
+<path fill="none" stroke="black" d="M1552.45,-765.37C1620.66,-756.69 1749.45,-731.63 1831.48,-661.74 1851.98,-644.27 1838.18,-624.48 1859.48,-608 1882.38,-590.29 1912.65,-581.27 1940.14,-576.77"/>
+<polygon fill="black" stroke="black" points="1940.74,-580.22 1950.13,-575.3 1939.73,-573.29 1940.74,-580.22"/>
</g>
<!-- JUCE -->
<g id="node30" class="node">
<title>JUCE</title>
-<ellipse fill="lightgrey" stroke="black" cx="1052" cy="-770.74" rx="31.7" ry="18"/>
-<text text-anchor="middle" x="1052" y="-767.04" font-family="Times,serif" font-size="14.00">JUCE</text>
+<ellipse fill="lightgrey" stroke="black" cx="1093.48" cy="-770.74" rx="36" ry="18"/>
+<text text-anchor="middle" x="1093.48" y="-767.04" font-family="Times,serif" font-size="14.00">JUCE</text>
</g>
<!-- JUCE->? -->
-<g id="edge77" class="edge">
+<g id="edge79" class="edge">
<title>JUCE->?</title>
-<path fill="none" stroke="red" d="M1022.29,-764.2C958.28,-751.59 803.49,-717.45 684,-661.74 473.86,-563.77 256.37,-382.03 189.09,-323.6"/>
-<polygon fill="red" stroke="red" points="191.13,-320.74 181.29,-316.8 186.53,-326.01 191.13,-320.74"/>
+<path fill="none" stroke="red" d="M1067.12,-758.37C1023.82,-739.48 935.19,-699.93 862.48,-661.74 629.55,-539.4 359.19,-370.58 279.02,-319.94"/>
+<polygon fill="red" stroke="red" points="280.53,-316.75 270.2,-314.36 276.78,-322.67 280.53,-316.75"/>
</g>
<!-- JUCE->ALSA -->
-<g id="edge75" class="edge">
+<g id="edge77" class="edge">
<title>JUCE->ALSA</title>
-<path fill="none" stroke="black" d="M1076.43,-759.04C1081.55,-756.89 1086.93,-754.69 1092,-752.74 1114.82,-743.95 1121.66,-744.7 1144,-734.74 1155.3,-729.7 1167.25,-723.38 1177.79,-717.46"/>
-<polygon fill="black" stroke="black" points="1179.7,-720.4 1186.63,-712.39 1176.21,-714.33 1179.7,-720.4"/>
+<path fill="none" stroke="black" d="M1120.99,-759.05C1126.75,-756.89 1132.8,-754.69 1138.48,-752.74 1183,-737.44 1234.55,-721.68 1269.93,-711.17"/>
+<polygon fill="black" stroke="black" points="1271.31,-714.41 1279.9,-708.21 1269.32,-707.7 1271.31,-714.41"/>
</g>
<!-- JUCE->JACK -->
-<g id="edge76" class="edge">
+<g id="edge78" class="edge">
<title>JUCE->JACK</title>
-<path fill="none" stroke="black" d="M1068.28,-755.15C1089.36,-736.58 1127.61,-704.02 1163,-679.74 1284.66,-596.28 1440.85,-514.83 1507.51,-481.16"/>
-<polygon fill="black" stroke="black" points="1509.32,-484.17 1516.68,-476.55 1506.17,-477.92 1509.32,-484.17"/>
+<path fill="none" stroke="black" d="M1067.18,-758.29C1057.43,-752.19 1049.58,-743.85 1053.48,-733.74 1080.64,-663.36 1106.54,-652.45 1167.48,-608 1273.23,-530.87 1425.77,-489.75 1498.65,-473.46"/>
+<polygon fill="black" stroke="black" points="1499.79,-476.79 1508.81,-471.23 1498.29,-469.95 1499.79,-476.79"/>
</g>
<!-- SDL1 -->
<g id="node31" class="node">
<title>SDL1</title>
<g id="a_node31"><a xlink:href="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" xlink:title="libSDL-1.2">
-<ellipse fill="lightgrey" stroke="black" cx="698" cy="-770.74" rx="50.89" ry="18"/>
-<text text-anchor="middle" x="698" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL-1.2</text>
+<ellipse fill="lightgrey" stroke="black" cx="709.48" cy="-770.74" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="709.48" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL-1.2</text>
</a>
</g>
</g>
<!-- SDL1->filesystem -->
-<g id="edge90" class="edge">
+<g id="edge92" class="edge">
<title>SDL1->filesystem</title>
-<path fill="none" stroke="black" d="M705.48,-752.79C729.14,-700.81 807.16,-541.41 914,-446 1005.24,-364.52 1048.49,-366.11 1168,-340 1204.83,-331.95 1246.36,-323.09 1278.41,-316.3"/>
-<polygon fill="black" stroke="black" points="1279.41,-319.67 1288.47,-314.17 1277.96,-312.82 1279.41,-319.67"/>
+<path fill="none" stroke="black" d="M715.47,-752.55C740.27,-684.46 842.48,-433.78 1026.48,-359 1099.52,-329.32 1629.06,-312.23 1825.45,-306.86"/>
+<polygon fill="black" stroke="black" points="1825.77,-310.35 1835.67,-306.58 1825.58,-303.35 1825.77,-310.35"/>
</g>
<!-- SDL1->null -->
-<g id="edge94" class="edge">
+<g id="edge96" class="edge">
<title>SDL1->null</title>
-<path fill="none" stroke="red" d="M715.58,-753.73C756.32,-716.47 859.93,-620.66 942,-536 979.46,-497.36 979.3,-477.41 1023,-446 1102.04,-389.18 1131.5,-389.32 1224,-359 1259.96,-347.21 1269.56,-345.5 1307,-340 1485,-313.86 1699.86,-307.23 1789.5,-305.56"/>
-<polygon fill="red" stroke="red" points="1789.61,-309.05 1799.55,-305.38 1789.49,-302.06 1789.61,-309.05"/>
+<path fill="none" stroke="red" d="M726.28,-753.31C747.38,-732.47 784.46,-695.23 814.48,-661.74 872.72,-596.77 986.33,-397.79 1064.48,-359 1067.3,-357.6 1967.35,-322.29 1970.48,-322 1998.05,-319.49 2028.97,-315.07 2052.52,-311.37"/>
+<polygon fill="red" stroke="red" points="2053.13,-314.82 2062.45,-309.78 2052.02,-307.9 2053.13,-314.82"/>
</g>
<!-- SDL1->ALSA -->
-<g id="edge87" class="edge">
+<g id="edge89" class="edge">
<title>SDL1->ALSA</title>
-<path fill="none" stroke="black" d="M744.25,-763.31C841.2,-749.84 1064.79,-718.78 1162.21,-705.24"/>
-<polygon fill="black" stroke="black" points="1162.92,-708.68 1172.34,-703.83 1161.95,-701.74 1162.92,-708.68"/>
+<path fill="none" stroke="black" d="M764.06,-763.31C880.59,-749.59 1152.16,-717.62 1263.52,-704.51"/>
+<polygon fill="black" stroke="black" points="1263.95,-707.98 1273.47,-703.33 1263.13,-701.03 1263.95,-707.98"/>
</g>
<!-- SDL1->OSS -->
-<g id="edge92" class="edge">
+<g id="edge94" class="edge">
<title>SDL1->OSS</title>
-<path fill="none" stroke="black" d="M690.68,-752.88C665.47,-691.9 588.95,-480.06 686,-359 694.95,-347.83 698.83,-345.61 712,-340 764.55,-317.62 830.76,-309.55 871.99,-306.64"/>
-<polygon fill="black" stroke="black" points="872.41,-310.12 882.16,-305.99 871.96,-303.14 872.41,-310.12"/>
+<path fill="none" stroke="black" d="M706.77,-752.38C699.12,-697.5 682.4,-524.73 754.48,-413 780.94,-372 792.52,-361.16 836.48,-340 888.08,-315.16 954.49,-307.68 997.28,-305.58"/>
+<polygon fill="black" stroke="black" points="997.51,-309.07 1007.36,-305.16 997.22,-302.08 997.51,-309.07"/>
</g>
<!-- SDL1->PulseAudio -->
-<g id="edge93" class="edge">
+<g id="edge95" class="edge">
<title>SDL1->PulseAudio</title>
-<path fill="none" stroke="black" d="M747.37,-766.56C844.79,-759.94 1068.5,-742.96 1255,-715.74 1337.45,-703.71 1357.19,-695.58 1439,-679.74 1480.76,-671.66 1495.78,-682.33 1533,-661.74 1561.55,-645.95 1554.25,-623.42 1583,-608 1608.83,-594.15 1682.62,-584.16 1736.11,-578.48"/>
-<polygon fill="black" stroke="black" points="1736.6,-581.95 1746.18,-577.44 1735.88,-574.99 1736.6,-581.95"/>
+<path fill="none" stroke="black" d="M768,-766.45C882.2,-759.68 1142.68,-742.55 1360.48,-715.74 1507.99,-697.58 1546.85,-699.9 1690.48,-661.74 1756.51,-644.2 1768.76,-626.63 1834.48,-608 1871.49,-597.51 1913.72,-589.03 1947.65,-583.05"/>
+<polygon fill="black" stroke="black" points="1948.64,-586.43 1957.9,-581.27 1947.45,-579.53 1948.64,-586.43"/>
</g>
<!-- SDL1->aRts -->
-<g id="edge88" class="edge">
+<g id="edge90" class="edge">
<title>SDL1->aRts</title>
-<path fill="none" stroke="black" d="M679.97,-753.63C641.07,-718 548.48,-628.32 495,-536 414.16,-396.46 434.15,-341.64 420,-181 418.99,-169.58 427.46,-161.49 437.84,-155.91"/>
-<polygon fill="black" stroke="black" points="439.6,-158.95 447.26,-151.63 436.71,-152.58 439.6,-158.95"/>
+<path fill="none" stroke="black" d="M683.43,-754.51C674.74,-748.84 665.29,-742.01 657.48,-734.74 627.37,-706.68 619.02,-698.49 600.48,-661.74 545.39,-552.5 538.03,-517.22 532.48,-395 531.37,-370.54 528.48,-363.46 535.48,-340 554.46,-276.46 589.77,-206.7 609.4,-170.3"/>
+<polygon fill="black" stroke="black" points="612.56,-171.83 614.27,-161.37 606.41,-168.48 612.56,-171.83"/>
</g>
<!-- SDL1->ESD -->
-<g id="edge89" class="edge">
+<g id="edge91" class="edge">
<title>SDL1->ESD</title>
-<path fill="none" stroke="black" d="M685.1,-752.94C677.62,-742.62 668.44,-728.9 662,-715.74 650.89,-693.01 649.43,-686.45 644,-661.74 624.88,-574.76 585.15,-391.49 609,-340 650.53,-250.34 755.85,-186.89 808.32,-159.74"/>
-<polygon fill="black" stroke="black" points="810.14,-162.74 817.48,-155.09 806.98,-156.5 810.14,-162.74"/>
+<path fill="none" stroke="black" d="M698.01,-752.66C659.7,-693.35 542.28,-491.73 608.48,-340 651.16,-242.2 691.96,-227.56 787.48,-180 809.91,-168.83 836.67,-160.18 858.07,-154.27"/>
+<polygon fill="black" stroke="black" points="859.04,-157.63 867.79,-151.67 857.23,-150.87 859.04,-157.63"/>
</g>
<!-- SDL1->NAS -->
-<g id="edge91" class="edge">
+<g id="edge93" class="edge">
<title>SDL1->NAS</title>
-<path fill="none" stroke="black" d="M649.23,-765.42C605.6,-759.65 541.41,-746.33 494,-715.74 467.99,-698.96 467.22,-687.47 450,-661.74 374.56,-549 322.08,-393.54 302.97,-331.81"/>
-<polygon fill="black" stroke="black" points="306.26,-330.61 299.99,-322.07 299.57,-332.66 306.26,-330.61"/>
+<path fill="none" stroke="black" d="M654.97,-763.17C630.83,-758.25 603.09,-749.67 581.48,-734.74 548.5,-711.94 547,-697.3 528.48,-661.74 467.98,-545.53 426.94,-393.17 411.88,-332.07"/>
+<polygon fill="black" stroke="black" points="415.22,-330.96 409.45,-322.08 408.41,-332.62 415.22,-330.96"/>
</g>
<!-- SDL2 -->
<g id="node32" class="node">
<title>SDL2</title>
<g id="a_node32"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL-2.0">
-<ellipse fill="lightgrey" stroke="black" cx="353" cy="-770.74" rx="50.89" ry="18"/>
-<text text-anchor="middle" x="353" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
+<ellipse fill="lightgrey" stroke="black" cx="393.48" cy="-770.74" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="393.48" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
</a>
</g>
</g>
<!-- SDL2->filesystem -->
-<g id="edge98" class="edge">
+<g id="edge100" class="edge">
<title>SDL2->filesystem</title>
-<path fill="none" stroke="black" d="M358.96,-752.68C360.92,-746.99 363.08,-740.6 365,-734.74 406.89,-606.59 359.68,-538.25 458,-446 577.77,-333.63 650.39,-369.25 812,-340 898.32,-324.38 1152.19,-312.34 1270.28,-307.42"/>
-<polygon fill="black" stroke="black" points="1270.75,-310.91 1280.6,-307 1270.46,-303.91 1270.75,-310.91"/>
+<path fill="none" stroke="black" d="M400.47,-752.71C402.76,-747.02 405.28,-740.62 407.48,-734.74 446.24,-631.25 411.93,-578.73 489.48,-500 617.37,-370.18 696.34,-397.34 874.48,-359 1056.24,-319.88 1623.07,-308.65 1825.62,-305.84"/>
+<polygon fill="black" stroke="black" points="1825.9,-309.34 1835.85,-305.7 1825.8,-302.34 1825.9,-309.34"/>
</g>
<!-- SDL2->null -->
-<g id="edge103" class="edge">
+<g id="edge105" class="edge">
<title>SDL2->null</title>
-<path fill="none" stroke="red" d="M381.39,-755.63C417.52,-736.94 480.86,-701.65 528,-661.74 552.22,-641.24 552.63,-630.5 575,-608 600.53,-582.32 606.28,-574.68 636,-554 677.79,-524.93 691.35,-522.52 737,-500 895.2,-421.97 935.01,-393.5 1108,-359 1190.36,-342.57 1212.31,-346.96 1296,-340 1481.08,-324.61 1702.58,-311.98 1791.83,-307.13"/>
-<polygon fill="red" stroke="red" points="1792.25,-310.62 1802.04,-306.58 1791.87,-303.63 1792.25,-310.62"/>
+<path fill="none" stroke="red" d="M409.71,-753.01C476.47,-685.6 739.49,-433.94 1015.48,-359 1220.44,-303.35 1758.95,-340.92 1970.48,-322 1998.23,-319.52 2029.38,-315.06 2052.98,-311.33"/>
+<polygon fill="red" stroke="red" points="2053.62,-314.77 2062.93,-309.73 2052.5,-307.86 2053.62,-314.77"/>
</g>
<!-- SDL2->ALSA -->
-<g id="edge95" class="edge">
+<g id="edge97" class="edge">
<title>SDL2->ALSA</title>
-<path fill="none" stroke="black" d="M402.37,-766.22C486.62,-760.17 663.55,-747.22 813,-734.74 939.06,-724.22 1087.54,-710.31 1161.76,-703.26"/>
-<polygon fill="black" stroke="black" points="1162.54,-706.7 1172.16,-702.27 1161.88,-699.73 1162.54,-706.7"/>
+<path fill="none" stroke="black" d="M450.97,-765.71C614.85,-754.21 1077.02,-721.68 1145.48,-715.74 1185.17,-712.3 1230.1,-707.68 1263.35,-704.13"/>
+<polygon fill="black" stroke="black" points="1264.14,-707.57 1273.71,-703.02 1263.39,-700.61 1264.14,-707.57"/>
</g>
<!-- SDL2->JACK -->
-<g id="edge100" class="edge">
+<g id="edge102" class="edge">
<title>SDL2->JACK</title>
-<path fill="none" stroke="black" d="M399.27,-763.23C440.99,-757.03 503.92,-746.86 558,-734.74 652.77,-713.5 1306.1,-524.82 1400,-500 1433.98,-491.02 1472.75,-481.37 1500.87,-474.48"/>
-<polygon fill="black" stroke="black" points="1501.83,-477.85 1510.71,-472.08 1500.17,-471.05 1501.83,-477.85"/>
+<path fill="none" stroke="black" d="M440.36,-759.43C469.34,-752.85 507.21,-743.86 540.48,-734.74 879.38,-641.83 952.68,-577.26 1295.48,-500 1365.14,-484.3 1447.6,-474.24 1496.89,-469.1"/>
+<polygon fill="black" stroke="black" points="1497.3,-472.58 1506.89,-468.08 1496.59,-465.62 1497.3,-472.58"/>
</g>
<!-- SDL2->OSS -->
-<g id="edge104" class="edge">
+<g id="edge106" class="edge">
<title>SDL2->OSS</title>
-<path fill="none" stroke="black" d="M351.67,-752.42C348.22,-699.71 342.03,-537.3 385,-413 394.35,-385.97 395.66,-374.01 420,-359 495.43,-312.48 769.11,-305.88 871.76,-305.06"/>
-<polygon fill="black" stroke="black" points="872.02,-308.56 882,-304.99 871.97,-301.56 872.02,-308.56"/>
+<path fill="none" stroke="black" d="M392.91,-752.47C392.04,-715.61 391.82,-626.64 406.48,-554 416.56,-504.12 412.98,-485.96 444.48,-446 498.22,-377.85 526.3,-367.9 608.48,-340 679.56,-315.87 902.26,-308.09 997.06,-305.83"/>
+<polygon fill="black" stroke="black" points="997.25,-309.33 1007.17,-305.6 997.09,-302.33 997.25,-309.33"/>
</g>
<!-- SDL2->sndio -->
-<g id="edge106" class="edge">
+<g id="edge108" class="edge">
<title>SDL2->sndio</title>
-<path fill="none" stroke="black" d="M302.81,-768.08C235.82,-762.74 120.55,-741.73 77,-661.74 62.75,-635.57 76.45,-345.22 141,-286 187.89,-242.99 1166.76,-164.49 1377.32,-148.06"/>
-<polygon fill="black" stroke="black" points="1377.62,-151.55 1387.32,-147.29 1377.08,-144.57 1377.62,-151.55"/>
+<path fill="none" stroke="black" d="M333.78,-769.45C259.61,-765.38 136.63,-745.54 85.48,-661.74 73.04,-641.35 80.53,-631.36 85.48,-608 101.73,-531.41 164.62,-331.29 228.48,-286 288.9,-243.15 1483.58,-184.97 1557.48,-180 1661.47,-173.01 1975.09,-154.56 2093.01,-147.66"/>
+<polygon fill="black" stroke="black" points="2093.36,-151.14 2103.14,-147.06 2092.95,-144.15 2093.36,-151.14"/>
</g>
<!-- SDL2->PulseAudio -->
-<g id="edge105" class="edge">
+<g id="edge107" class="edge">
<title>SDL2->PulseAudio</title>
-<path fill="none" stroke="black" d="M398.6,-762.86C580.07,-735.54 1251.47,-634.81 1465,-608 1559.7,-596.11 1669.98,-584.99 1736.32,-578.6"/>
-<polygon fill="black" stroke="black" points="1736.96,-582.06 1746.58,-577.62 1736.29,-575.09 1736.96,-582.06"/>
+<path fill="none" stroke="black" d="M447.01,-762.46C498.43,-755.44 578.28,-744.48 647.48,-734.74 1039.65,-679.55 1135.75,-650.53 1529.48,-608 1675.01,-592.28 1846.04,-581.73 1940.23,-576.61"/>
+<polygon fill="black" stroke="black" points="1940.69,-580.09 1950.49,-576.05 1940.32,-573.1 1940.69,-580.09"/>
</g>
<!-- SDL2->aRts -->
-<g id="edge96" class="edge">
+<g id="edge98" class="edge">
<title>SDL2->aRts</title>
-<path fill="none" stroke="black" d="M302.26,-769.52C221.85,-768.31 69.57,-762.33 24,-734.74 7.55,-724.78 0,-717.97 0,-698.74 0,-698.74 0,-698.74 0,-216 0,-172.1 323.43,-152.23 434.83,-146.69"/>
-<polygon fill="black" stroke="black" points="435.11,-150.18 444.93,-146.19 434.77,-143.18 435.11,-150.18"/>
+<path fill="none" stroke="black" d="M334.04,-768.26C236.76,-765.21 52.32,-756.59 32.48,-734.74 -37.97,-657.12 25.11,-600.33 55.48,-500 85.14,-402.05 64.8,-354.88 140.48,-286 207.08,-225.39 479.68,-170.95 583.28,-152.06"/>
+<polygon fill="black" stroke="black" points="584.12,-155.46 593.34,-150.24 582.87,-148.57 584.12,-155.46"/>
</g>
<!-- SDL2->ESD -->
-<g id="edge97" class="edge">
+<g id="edge99" class="edge">
<title>SDL2->ESD</title>
-<path fill="none" stroke="black" d="M302.16,-769.75C231.28,-768.71 107.66,-762.79 74,-734.74 17.89,-687.97 42.29,-333.35 86,-286 135.67,-232.19 657.19,-166.61 801.93,-149.34"/>
-<polygon fill="black" stroke="black" points="802.56,-152.79 812.08,-148.13 801.73,-145.83 802.56,-152.79"/>
+<path fill="none" stroke="black" d="M334.54,-767.23C246.52,-762.91 89.01,-752.75 70.48,-734.74 7.75,-673.75 132.75,-331.71 187.48,-286 239.82,-242.3 714.2,-171.19 856.39,-150.69"/>
+<polygon fill="black" stroke="black" points="857.02,-154.14 866.42,-149.25 856.03,-147.21 857.02,-154.14"/>
</g>
<!-- SDL2->NAS -->
-<g id="edge101" class="edge">
+<g id="edge103" class="edge">
<title>SDL2->NAS</title>
-<path fill="none" stroke="black" d="M347.56,-752.67C345.77,-746.98 343.78,-740.59 342,-734.74 308.01,-622.74 284.61,-597.86 268,-482 265.73,-466.16 266.49,-461.93 268,-446 271.8,-405.96 281.54,-360.37 288.22,-332.14"/>
-<polygon fill="black" stroke="black" points="291.67,-332.76 290.61,-322.21 284.86,-331.11 291.67,-332.76"/>
+<path fill="none" stroke="black" d="M390.32,-752.72C384.57,-720.91 372.65,-650.19 368.48,-590 363.05,-511.51 361.45,-491.04 371.48,-413 374.59,-388.87 373.31,-382.25 380.48,-359 383.36,-349.68 387.52,-339.88 391.62,-331.23"/>
+<polygon fill="black" stroke="black" points="394.87,-332.56 396.16,-322.04 388.59,-329.46 394.87,-332.56"/>
</g>
<!-- FusionSound -->
<g id="node33" class="node">
<title>FusionSound</title>
-<ellipse fill="red" stroke="black" cx="178" cy="-634.87" rx="100.32" ry="26.74"/>
-<text text-anchor="middle" x="178" y="-638.67" font-family="Times,serif" font-size="14.00">DirectFB/FusionSound</text>
-<text text-anchor="middle" x="178" y="-623.67" font-family="Times,serif" font-size="14.00">[dead]</text>
+<ellipse fill="red" stroke="black" cx="213.48" cy="-634.87" rx="126.64" ry="26.74"/>
+<text text-anchor="middle" x="213.48" y="-638.67" font-family="Times,serif" font-size="14.00">DirectFB/FusionSound</text>
+<text text-anchor="middle" x="213.48" y="-623.67" font-family="Times,serif" font-size="14.00">[dead]</text>
</g>
<!-- SDL2->FusionSound -->
-<g id="edge99" class="edge">
+<g id="edge101" class="edge">
<title>SDL2->FusionSound</title>
-<path fill="none" stroke="red" d="M301.98,-769.68C260.38,-766.58 203.95,-754.78 175,-715.74 165.8,-703.33 165.17,-686.62 167.39,-671.68"/>
-<polygon fill="red" stroke="red" points="170.86,-672.18 169.32,-661.7 163.99,-670.86 170.86,-672.18"/>
+<path fill="none" stroke="red" d="M341.01,-762.09C290.45,-753.52 219.22,-737.86 202.48,-715.74 192.99,-703.19 193.96,-686.27 198.02,-671.23"/>
+<polygon fill="red" stroke="red" points="201.36,-672.28 201.06,-661.69 194.69,-670.15 201.36,-672.28"/>
</g>
<!-- OpenSL ES -->
<g id="node34" class="node">
<title>OpenSL ES</title>
-<ellipse fill="lightgrey" stroke="black" cx="237" cy="-697.74" rx="52.79" ry="18"/>
-<text text-anchor="middle" x="237" y="-694.04" font-family="Times,serif" font-size="14.00">OpenSL ES</text>
+<ellipse fill="lightgrey" stroke="black" cx="275.48" cy="-697.74" rx="63.89" ry="18"/>
+<text text-anchor="middle" x="275.48" y="-694.04" font-family="Times,serif" font-size="14.00">OpenSL ES</text>
</g>
<!-- SDL2->OpenSL ES -->
-<g id="edge102" class="edge">
+<g id="edge104" class="edge">
<title>SDL2->OpenSL ES</title>
-<path fill="none" stroke="black" d="M328.68,-754.86C311.78,-744.51 289.05,-730.6 270.44,-719.21"/>
-<polygon fill="black" stroke="black" points="272.04,-716.08 261.68,-713.85 268.39,-722.05 272.04,-716.08"/>
+<path fill="none" stroke="black" d="M367.88,-754.33C350.99,-744.17 328.65,-730.73 310.17,-719.61"/>
+<polygon fill="black" stroke="black" points="311.82,-716.52 301.45,-714.36 308.21,-722.52 311.82,-716.52"/>
</g>
<!-- FusionSound->? -->
-<g id="edge107" class="edge">
+<g id="edge109" class="edge">
<title>FusionSound->?</title>
-<path fill="none" stroke="red" d="M174.45,-607.92C171.57,-584.68 168,-549.63 168,-519 168,-519 168,-519 168,-376 168,-361.65 168,-345.67 168,-332.51"/>
-<polygon fill="red" stroke="red" points="171.5,-332.22 168,-322.22 164.5,-332.22 171.5,-332.22"/>
+<path fill="none" stroke="red" d="M221.43,-607.68C227.73,-584.57 235.48,-549.86 235.48,-519 235.48,-519 235.48,-519 235.48,-376 235.48,-360.39 240.02,-343.54 244.77,-330.18"/>
+<polygon fill="red" stroke="red" points="248.09,-331.31 248.38,-320.72 241.55,-328.82 248.09,-331.31"/>
</g>
<!-- OpenSL ES->? -->
-<g id="edge134" class="edge">
+<g id="edge136" class="edge">
<title>OpenSL ES->?</title>
-<path fill="none" stroke="red" d="M262.07,-681.79C268.83,-676.39 275.3,-669.65 279,-661.74 289.13,-640.11 289.23,-629.58 279,-608 273.59,-596.58 264.01,-600.51 257,-590 192.63,-493.5 220.25,-449.52 182,-340 180.9,-336.85 179.68,-333.56 178.44,-330.32"/>
-<polygon fill="red" stroke="red" points="181.65,-328.93 174.71,-320.92 175.14,-331.5 181.65,-328.93"/>
+<path fill="none" stroke="red" d="M316.19,-683.76C326.18,-678.55 335.67,-671.41 341.48,-661.74 353.8,-641.27 347.95,-630.99 341.48,-608 338.94,-598.97 334.45,-598.49 330.48,-590 316.38,-559.82 306.48,-552.31 306.48,-519 306.48,-519 306.48,-519 306.48,-376 306.48,-354.81 291.32,-335.62 277.53,-322.55"/>
+<polygon fill="red" stroke="red" points="279.49,-319.61 269.69,-315.59 274.84,-324.84 279.49,-319.61"/>
</g>
<!-- phonon -->
<g id="node35" class="node">
<title>phonon</title>
-<ellipse fill="lightgrey" stroke="black" cx="2147" cy="-843.74" rx="37.09" ry="18"/>
-<text text-anchor="middle" x="2147" y="-840.04" font-family="Times,serif" font-size="14.00">phonon</text>
+<ellipse fill="lightgrey" stroke="black" cx="2494.48" cy="-843.74" rx="44.69" ry="18"/>
+<text text-anchor="middle" x="2494.48" y="-840.04" font-family="Times,serif" font-size="14.00">phonon</text>
</g>
<!-- phonon->PulseAudio -->
-<g id="edge115" class="edge">
+<g id="edge117" class="edge">
<title>phonon->PulseAudio</title>
-<path fill="none" stroke="black" d="M2139.19,-825.96C2129.61,-806.64 2111.92,-774.77 2090,-752.74 2013.7,-676.05 1898.5,-618.02 1837.43,-590.56"/>
-<polygon fill="black" stroke="black" points="1838.66,-587.28 1828.1,-586.41 1835.82,-593.67 1838.66,-587.28"/>
+<path fill="none" stroke="black" d="M2470.47,-828.49C2385.06,-777.81 2100.92,-609.2 2098.48,-608 2085.68,-601.68 2071.44,-595.58 2058.25,-590.29"/>
+<polygon fill="black" stroke="black" points="2059.45,-587 2048.86,-586.59 2056.88,-593.52 2059.45,-587"/>
</g>
<!-- phonon->gstreamer -->
-<g id="edge113" class="edge">
+<g id="edge115" class="edge">
<title>phonon->gstreamer</title>
-<path fill="none" stroke="black" d="M2111.9,-837.4C2030.44,-825.02 1828.22,-794.27 1732.21,-779.68"/>
-<polygon fill="black" stroke="black" points="1732.56,-776.19 1722.14,-778.15 1731.5,-783.11 1732.56,-776.19"/>
+<path fill="none" stroke="black" d="M2450.54,-839.73C2363.83,-833.39 2164.81,-816.9 1999.48,-788.74 1993.25,-787.68 1986.76,-786.41 1980.33,-785.05"/>
+<polygon fill="black" stroke="black" points="1980.84,-781.57 1970.32,-782.85 1979.33,-788.41 1980.84,-781.57"/>
</g>
<!-- VLC -->
<g id="node36" class="node">
<title>VLC</title>
<g id="a_node36"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC">
-<ellipse fill="lightgrey" stroke="black" cx="2358" cy="-770.74" rx="28.7" ry="18"/>
-<text text-anchor="middle" x="2358" y="-767.04" font-family="Times,serif" font-size="14.00">VLC</text>
+<ellipse fill="lightgrey" stroke="black" cx="2442.48" cy="-770.74" rx="29.8" ry="18"/>
+<text text-anchor="middle" x="2442.48" y="-767.04" font-family="Times,serif" font-size="14.00">VLC</text>
</a>
</g>
</g>
<!-- phonon->VLC -->
-<g id="edge114" class="edge">
+<g id="edge116" class="edge">
<title>phonon->VLC</title>
-<path fill="none" stroke="black" d="M2183.39,-840.3C2218.57,-836.79 2272.64,-828.27 2315,-807.74 2322.52,-804.1 2329.82,-798.85 2336.22,-793.49"/>
-<polygon fill="black" stroke="black" points="2338.64,-796.02 2343.78,-786.75 2333.98,-790.79 2338.64,-796.02"/>
+<path fill="none" stroke="black" d="M2505.16,-825.93C2507.76,-819.64 2508.93,-812.6 2505.48,-806.74 2499.35,-796.31 2488.86,-788.77 2478.19,-783.42"/>
+<polygon fill="black" stroke="black" points="2479.42,-780.14 2468.86,-779.27 2476.57,-786.53 2479.42,-780.14"/>
</g>
<!-- VLC->filesystem -->
-<g id="edge128" class="edge">
+<g id="edge130" class="edge">
<title>VLC->filesystem</title>
-<path fill="none" stroke="black" d="M2379.03,-758.32C2393.32,-749.07 2410.57,-734.51 2416,-715.74 2435.98,-646.69 2451.53,-616.49 2416,-554 2355.41,-447.46 2289.3,-466.45 2179,-413 2118.61,-383.74 2103.47,-373.71 2038,-359 1915.97,-331.58 1541.86,-313.63 1393.52,-307.42"/>
-<polygon fill="black" stroke="black" points="1393.37,-303.91 1383.24,-307 1393.08,-310.91 1393.37,-303.91"/>
+<path fill="none" stroke="black" d="M2452.28,-753.38C2454.93,-747.39 2456.97,-740.43 2456.48,-733.74 2450.69,-653.23 2465.96,-626.5 2430.48,-554 2401.19,-494.15 2381.13,-484.14 2326.48,-446 2230.53,-379.03 2197.28,-374.55 2085.48,-340 2047.43,-328.24 2003.73,-319.79 1968.15,-314.15"/>
+<polygon fill="black" stroke="black" points="1968.28,-310.63 1957.86,-312.56 1967.21,-317.54 1968.28,-310.63"/>
</g>
<!-- VLC->null -->
-<g id="edge126" class="edge">
+<g id="edge128" class="edge">
<title>VLC->null</title>
-<path fill="none" stroke="red" d="M2385.53,-765.81C2420.96,-759.03 2478,-741.47 2478,-698.74 2478,-698.74 2478,-698.74 2478,-376 2478,-315.18 2019.79,-306.45 1875.18,-305.2"/>
-<polygon fill="red" stroke="red" points="1874.95,-301.7 1864.92,-305.12 1874.9,-308.7 1874.95,-301.7"/>
+<path fill="none" stroke="red" d="M2469.17,-762.44C2492.15,-755.58 2522.79,-744.9 2530.48,-734.74 2610.51,-629.16 2552.8,-536.96 2456.48,-446 2403.22,-395.7 2384.09,-387.21 2316.48,-359 2253.97,-332.92 2176.23,-317.82 2130.13,-310.51"/>
+<polygon fill="red" stroke="red" points="2130.38,-307.01 2119.96,-308.95 2129.31,-313.93 2130.38,-307.01"/>
</g>
<!-- VLC->ALSA -->
-<g id="edge127" class="edge">
+<g id="edge129" class="edge">
<title>VLC->ALSA</title>
-<path fill="none" stroke="black" d="M2329.44,-767.91C2280.46,-764.77 2177.25,-758.18 2090,-752.74 1771.34,-732.87 1387.79,-709.57 1256.07,-701.59"/>
-<polygon fill="black" stroke="black" points="1256.12,-698.09 1245.93,-700.98 1255.7,-705.07 1256.12,-698.09"/>
+<path fill="none" stroke="black" d="M2412.83,-767.83C2328.96,-762.42 2082.9,-746.58 1878.48,-733.74 1687.22,-721.72 1459.57,-707.74 1361.46,-701.74"/>
+<polygon fill="black" stroke="black" points="1361.45,-698.23 1351.26,-701.11 1361.02,-705.22 1361.45,-698.23"/>
</g>
<!-- VLC->JACK -->
-<g id="edge129" class="edge">
+<g id="edge131" class="edge">
<title>VLC->JACK</title>
-<path fill="none" stroke="black" d="M2351.84,-752.89C2343.58,-732.59 2326.99,-698.86 2302,-679.74 2081.59,-511.11 1974.92,-560.2 1704,-500 1650.07,-488.02 1634.26,-496.69 1581,-482 1578.68,-481.36 1576.32,-480.62 1573.96,-479.82"/>
-<polygon fill="black" stroke="black" points="1574.96,-476.46 1564.37,-476.26 1572.52,-483.02 1574.96,-476.46"/>
+<path fill="none" stroke="black" d="M2414.98,-763.52C2315.65,-740.54 1967.2,-655.61 1698.48,-536 1669.72,-523.2 1665.97,-513.4 1637.48,-500 1618.76,-491.19 1597.17,-483.2 1579.11,-477.09"/>
+<polygon fill="black" stroke="black" points="1580.08,-473.72 1569.49,-473.89 1577.88,-480.36 1580.08,-473.72"/>
</g>
<!-- VLC->OSS -->
-<g id="edge131" class="edge">
+<g id="edge133" class="edge">
<title>VLC->OSS</title>
-<path fill="none" stroke="black" d="M2358.79,-752.74C2358.75,-746.69 2358.31,-739.85 2357,-733.74 2333.49,-623.75 2342.33,-576.63 2260,-500 2187.47,-432.49 1934.18,-378.33 1837,-359 1720.32,-335.79 1688.74,-347.38 1570,-340 1334.76,-325.38 1052.04,-311.66 950.05,-306.83"/>
-<polygon fill="black" stroke="black" points="950.07,-303.33 939.92,-306.35 949.74,-310.32 950.07,-303.33"/>
+<path fill="none" stroke="black" d="M2432.97,-753.39C2429.21,-747.15 2424.78,-740.03 2420.48,-733.74 2403.49,-708.85 2400.65,-701.18 2379.48,-679.74 2343.06,-642.84 2330.36,-637.16 2287.48,-608 2264.93,-592.67 1890.55,-367.03 1864.48,-359 1863.89,-358.82 1253.64,-318.93 1083.86,-307.83"/>
+<polygon fill="black" stroke="black" points="1083.99,-304.34 1073.78,-307.18 1083.53,-311.32 1083.99,-304.34"/>
</g>
<!-- VLC->sndio -->
-<g id="edge133" class="edge">
+<g id="edge135" class="edge">
<title>VLC->sndio</title>
-<path fill="none" stroke="black" d="M2386.49,-768.31C2456.07,-764.06 2629,-748.47 2629,-698.74 2629,-698.74 2629,-698.74 2629,-259.5 2629,-156.81 2507.04,-217.34 2406,-199 2219.31,-165.11 1619.57,-149.52 1457.62,-145.86"/>
-<polygon fill="black" stroke="black" points="1457.24,-142.36 1447.16,-145.63 1457.08,-149.35 1457.24,-142.36"/>
+<path fill="none" stroke="black" d="M2471.49,-765.9C2500.67,-760.34 2544.3,-747.02 2565.48,-715.74 2578.56,-696.42 2707.36,-344.96 2711.48,-322 2714.31,-306.25 2716.43,-301.22 2711.48,-286 2683.63,-200.36 2616.12,-219.75 2528.48,-199 2405.65,-169.92 2257.09,-154.69 2183.84,-148.47"/>
+<polygon fill="black" stroke="black" points="2183.85,-144.96 2173.59,-147.61 2183.26,-151.93 2183.85,-144.96"/>
</g>
<!-- VLC->PulseAudio -->
-<g id="edge132" class="edge">
+<g id="edge134" class="edge">
<title>VLC->PulseAudio</title>
-<path fill="none" stroke="black" d="M2332.17,-762.47C2280.82,-747.49 2163.02,-710.45 2072,-661.74 2035.85,-642.39 2034.82,-623.86 1997,-608 1952.43,-589.31 1898.28,-580.6 1857.41,-576.54"/>
-<polygon fill="black" stroke="black" points="1857.6,-573.05 1847.32,-575.61 1856.96,-580.02 1857.6,-573.05"/>
+<path fill="none" stroke="black" d="M2428.06,-754.67C2395.75,-721.94 2313.71,-644.39 2228.48,-608 2182.51,-588.37 2126.77,-579.66 2083.29,-575.84"/>
+<polygon fill="black" stroke="black" points="2083.33,-572.34 2073.08,-575.02 2082.76,-579.31 2083.33,-572.34"/>
</g>
<!-- VLC->OpenSL ES -->
-<g id="edge130" class="edge">
+<g id="edge132" class="edge">
<title>VLC->OpenSL ES</title>
-<path fill="none" stroke="black" d="M2329.46,-767.61C2280.5,-764.02 2177.32,-756.78 2090,-752.74 1387.93,-720.25 535.26,-703.9 299.81,-699.79"/>
-<polygon fill="black" stroke="black" points="299.78,-696.29 289.72,-699.62 299.66,-703.29 299.78,-696.29"/>
+<path fill="none" stroke="black" d="M2412.66,-767.94C2355.7,-764.55 2227.49,-757.16 2119.48,-752.74 1431.35,-724.56 598.18,-705.62 349.16,-700.28"/>
+<polygon fill="black" stroke="black" points="348.87,-696.77 338.79,-700.06 348.72,-703.77 348.87,-696.77"/>
</g>
<!-- ClanLib -->
<g id="node37" class="node">
<title>ClanLib</title>
<g id="a_node37"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib">
-<ellipse fill="lightgrey" stroke="black" cx="1141" cy="-770.74" rx="39.79" ry="18"/>
-<text text-anchor="middle" x="1141" y="-767.04" font-family="Times,serif" font-size="14.00">ClanLib</text>
+<ellipse fill="lightgrey" stroke="black" cx="1193.48" cy="-770.74" rx="46.29" ry="18"/>
+<text text-anchor="middle" x="1193.48" y="-767.04" font-family="Times,serif" font-size="14.00">ClanLib</text>
</a>
</g>
</g>
<!-- ClanLib->ALSA -->
-<g id="edge116" class="edge">
+<g id="edge118" class="edge">
<title>ClanLib->ALSA</title>
-<path fill="none" stroke="black" d="M1156.09,-753.98C1164.82,-744.87 1175.99,-733.21 1185.82,-722.95"/>
-<polygon fill="black" stroke="black" points="1188.61,-725.09 1193,-715.44 1183.56,-720.24 1188.61,-725.09"/>
+<path fill="none" stroke="black" d="M1217.57,-755.37C1235.7,-744.55 1260.75,-729.61 1280.56,-717.79"/>
+<polygon fill="black" stroke="black" points="1282.45,-720.73 1289.25,-712.6 1278.87,-714.72 1282.45,-720.73"/>
</g>
<!-- ClanLib->OSS -->
-<g id="edge117" class="edge">
+<g id="edge119" class="edge">
<title>ClanLib->OSS</title>
-<path fill="none" stroke="black" d="M1110.64,-758.99C1033.49,-731.67 836,-661.74 836,-661.74 732.97,-560.49 702.84,-455.19 790,-340 808.84,-315.1 844.29,-307.09 871.98,-304.87"/>
-<polygon fill="black" stroke="black" points="872.37,-308.36 882.15,-304.28 871.97,-301.37 872.37,-308.36"/>
+<path fill="none" stroke="black" d="M1169.62,-755.22C1141.42,-736.85 1095,-702.65 1068.48,-661.74 1014.73,-578.79 1007.72,-544.61 1014.48,-446 1017.16,-407.06 1018.91,-397.29 1026.48,-359 1028.22,-350.22 1030.53,-340.74 1032.77,-332.21"/>
+<polygon fill="black" stroke="black" points="1036.19,-332.96 1035.42,-322.39 1029.44,-331.13 1036.19,-332.96"/>
</g>
<!-- allegro -->
<g id="node38" class="node">
<title>allegro</title>
<g id="a_node38"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro">
-<ellipse fill="lightgrey" stroke="black" cx="565" cy="-916.74" rx="35.19" ry="18"/>
-<text text-anchor="middle" x="565" y="-913.04" font-family="Times,serif" font-size="14.00">allegro</text>
+<ellipse fill="lightgrey" stroke="black" cx="500.48" cy="-916.74" rx="42.79" ry="18"/>
+<text text-anchor="middle" x="500.48" y="-913.04" font-family="Times,serif" font-size="14.00">allegro</text>
</a>
</g>
</g>
<!-- allegro->OSS -->
-<g id="edge118" class="edge">
+<g id="edge120" class="edge">
<title>allegro->OSS</title>
-<path fill="none" stroke="black" d="M530.75,-912.26C491.34,-906.14 432,-889.5 432,-844.74 432,-844.74 432,-844.74 432,-733.74 432,-636.26 585.95,-422.39 660,-359 691.45,-332.08 809.41,-315.8 871.78,-308.89"/>
-<polygon fill="black" stroke="black" points="872.45,-312.33 882.02,-307.78 871.7,-305.37 872.45,-312.33"/>
+<path fill="none" stroke="black" d="M493.3,-898.86C487.92,-884.69 481.48,-863.75 481.48,-844.74 481.48,-844.74 481.48,-844.74 481.48,-733.74 481.48,-525.3 586.91,-469.76 763.48,-359 836.16,-313.41 939.01,-304.92 996.75,-304.11"/>
+<polygon fill="black" stroke="black" points="997.02,-307.61 1006.99,-304.04 996.97,-300.61 997.02,-307.61"/>
</g>
<!-- allegro->PulseAudio -->
-<g id="edge120" class="edge">
+<g id="edge122" class="edge">
<title>allegro->PulseAudio</title>
-<path fill="none" stroke="black" d="M600.27,-915.23C823.14,-911.91 2031.73,-892.62 2193,-861.74 2287.17,-843.71 2340.85,-867.17 2396,-788.74 2530.2,-597.87 2036.64,-575.05 1858.1,-572.95"/>
-<polygon fill="black" stroke="black" points="1858.1,-569.45 1848.07,-572.85 1858.03,-576.45 1858.1,-569.45"/>
+<path fill="none" stroke="black" d="M543.39,-915.43C834.71,-913.23 2512.23,-898.96 2548.48,-861.74 2636.36,-771.52 2393.31,-650.7 2287.48,-608 2251.32,-593.41 2150.99,-583.3 2081.81,-577.82"/>
+<polygon fill="black" stroke="black" points="2081.66,-574.3 2071.42,-577.02 2081.11,-581.28 2081.66,-574.3"/>
</g>
<!-- allegro->OpenAL -->
-<g id="edge119" class="edge">
+<g id="edge121" class="edge">
<title>allegro->OpenAL</title>
-<path fill="none" stroke="black" d="M599.84,-913.82C778.34,-904 1590.29,-859.31 1803.56,-847.57"/>
-<polygon fill="black" stroke="black" points="1804.06,-851.05 1813.85,-847.01 1803.67,-844.06 1804.06,-851.05"/>
+<path fill="none" stroke="black" d="M543.07,-913.62C748.02,-903.39 1632.46,-859.26 1866.49,-847.58"/>
+<polygon fill="black" stroke="black" points="1867,-851.06 1876.82,-847.07 1866.65,-844.07 1867,-851.06"/>
</g>
<!-- allegro->SDL1 -->
-<g id="edge122" class="edge">
+<g id="edge124" class="edge">
<title>allegro->SDL1</title>
-<path fill="none" stroke="black" d="M579.49,-900.06C602.72,-874.9 648.49,-825.34 675.85,-795.72"/>
-<polygon fill="black" stroke="black" points="678.5,-798.01 682.71,-788.29 673.36,-793.26 678.5,-798.01"/>
+<path fill="none" stroke="black" d="M522.06,-900.87C559.24,-875.26 635.49,-822.72 678.39,-793.16"/>
+<polygon fill="black" stroke="black" points="680.51,-795.95 686.76,-787.4 676.54,-790.19 680.51,-795.95"/>
</g>
<!-- allegro->SDL2 -->
-<g id="edge123" class="edge">
+<g id="edge125" class="edge">
<title>allegro->SDL2</title>
-<path fill="none" stroke="black" d="M530.02,-914.96C498.05,-912.61 450.88,-904.89 418,-880.74 389.91,-860.11 371.71,-823.35 361.91,-798.28"/>
-<polygon fill="black" stroke="black" points="365.1,-796.8 358.33,-788.65 358.54,-799.24 365.1,-796.8"/>
+<path fill="none" stroke="black" d="M484.48,-899.85C478.89,-894.02 472.71,-887.25 467.48,-880.74 445.59,-853.46 423.45,-819.87 409.17,-797.25"/>
+<polygon fill="black" stroke="black" points="412,-795.19 403.73,-788.57 406.07,-798.9 412,-795.19"/>
</g>
<!-- allegro->OpenSL ES -->
-<g id="edge121" class="edge">
+<g id="edge123" class="edge">
<title>allegro->OpenSL ES</title>
-<path fill="none" stroke="black" d="M530.81,-912.65C489.86,-907.58 420.58,-894.52 371,-861.74 331.39,-835.55 323.13,-825.43 293,-788.74 276.41,-768.54 261,-743.06 250.56,-724.37"/>
-<polygon fill="black" stroke="black" points="253.59,-722.62 245.71,-715.54 247.45,-725.99 253.59,-722.62"/>
+<path fill="none" stroke="black" d="M474.67,-902.12C437.65,-881.58 369.05,-839.62 324.48,-788.74 307.81,-769.71 294.54,-744.05 286.04,-725"/>
+<polygon fill="black" stroke="black" points="289.21,-723.5 282.03,-715.71 282.78,-726.28 289.21,-723.5"/>
</g>
<!-- telepathy -->
<g id="node39" class="node">
<title>telepathy</title>
-<ellipse fill="lightgrey" stroke="black" cx="1075" cy="-464" rx="42.79" ry="18"/>
-<text text-anchor="middle" x="1075" y="-460.3" font-family="Times,serif" font-size="14.00">telepathy</text>
+<ellipse fill="lightgrey" stroke="black" cx="1149.48" cy="-464" rx="54.69" ry="18"/>
+<text text-anchor="middle" x="1149.48" y="-460.3" font-family="Times,serif" font-size="14.00">telepathy</text>
</g>
<!-- telepathy->phone modem -->
-<g id="edge124" class="edge">
+<g id="edge126" class="edge">
<title>telepathy->phone modem</title>
-<path fill="none" stroke="black" d="M1113.74,-456.24C1174,-445.46 1293.94,-422.97 1404.45,-395.29"/>
-<polygon fill="black" stroke="black" points="1405.59,-398.61 1414.42,-392.77 1403.87,-391.82 1405.59,-398.61"/>
-<text text-anchor="middle" x="1327.5" y="-416.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
+<path fill="none" stroke="black" d="M1180.2,-448.96C1209.72,-435.47 1254.74,-414.9 1288.71,-399.37"/>
+<polygon fill="black" stroke="black" points="1290.34,-402.48 1297.98,-395.14 1287.43,-396.11 1290.34,-402.48"/>
+<text text-anchor="middle" x="1257.48" y="-416.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
</g>
<!-- telepathy->? -->
-<g id="edge125" class="edge">
+<g id="edge127" class="edge">
<title>telepathy->?</title>
-<path fill="none" stroke="red" d="M1035.35,-456.88C921.71,-439.32 585.09,-387.02 306,-341 256.62,-332.86 241.74,-339.9 195,-322 193.78,-321.53 192.55,-321.01 191.33,-320.44"/>
-<polygon fill="red" stroke="red" points="192.75,-317.22 182.3,-315.46 189.37,-323.35 192.75,-317.22"/>
+<path fill="none" stroke="red" d="M1101.3,-455.43C921.91,-427.21 302,-329.38 282.48,-322 281.09,-321.47 279.69,-320.87 278.31,-320.21"/>
+<polygon fill="red" stroke="red" points="279.93,-317.11 269.5,-315.3 276.53,-323.23 279.93,-317.11"/>
</g>
</g>
</svg>