commit: 1ca8e42757ead82d117e03d7777d0e1680e58b94
parent 5ecb924e1620a368ca54c8bf8d2282f107bf0fe3
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 11 Sep 2021 06:40:25 +0200
linux audio output: Remove filesystem and null targets
Diffstat:
8 files changed, 831 insertions(+), 1104 deletions(-)
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=2021091102" /></figure>
+<figure><img loading="lazy" title="Linux Audio Output APIs" src="/images/linux-audio-output.svg?serial=2021091103" /></figure>
<p>You'll definitely need a large screen if you want to see the whole thing at once.</p>
<h3>Other formats</h3>
<ul>
@@ -17,13 +17,14 @@
<li>New paths: sox → sndio ; OpenAL → sndio</li>
<li>Removed "OpenSL ES", it's pretty much Android-only, which is considered out-of-scope</li>
<li>Removed "network card" target, it should be redone per-protocol, in probably a dedicated graph</li>
+ <li>Removed "filesystem" and "null" targets, this is more for diagnostics purposes and graphviz doesn't have layers</li>
<li>Removed "?" target, in favor of going nowhere</li>
</ul>
</dt>
</dl>
<h2>Cleaned out variant</h2>
<p>This is a variant which only contains APIs/software which is available in current distributions rather than including all the paths that are technically still present in codebases.</p>
-<figure><img loading="lazy" title="Linux Audio Output APIs" src="/images/linux-audio-output-current.svg?serial=2021091101" /></figure>
+<figure><img loading="lazy" title="Linux Audio Output APIs" src="/images/linux-audio-output-current.svg?serial=2021091102" /></figure>
<h3>Other formats</h3>
<ul>
<li><a href="/images/linux-audio-output-current.dot">Graphviz DOT</a>: source, has comments and URLs</li>
diff --git a/images/linux-audio-output-current.dot b/images/linux-audio-output-current.dot
@@ -7,8 +7,6 @@ digraph "Linux Audio Output APIs (current-only)" {
"sound card" [ shape=box fillcolor=cyan ];
"phone modem" [ shape=box fillcolor=cyan ];
"Bluetooth card" [ shape=box fillcolor=cyan ];
- filesystem [ shape=octagon fillcolor=yellow ];
- null [ shape=diamond fillcolor=red ];
portaudio [ URL="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" ];
portaudio -> ALSA;
@@ -19,12 +17,10 @@ digraph "Linux Audio Output APIs (current-only)" {
// https://rudd-o.com/linux-and-free-software/how-pulseaudio-works
PulseAudio [ URL="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" ];
PulseAudio -> ALSA;
- PulseAudio -> null [ color=red ];
PulseAudio -> "sound card" [ color=green ];
PulseAudio -> JACK;
PulseAudio -> bluez;
PulseAudio -> ofono;
- PulseAudio -> sox;
"X11 bell" -> PulseAudio;
PipeWire [ URL="http://pipewire.org/" ];
@@ -42,18 +38,14 @@ digraph "Linux Audio Output APIs (current-only)" {
bluez -> "Bluetooth card" [ color=green ];
sox [ URL="http://sox.sourceforge.net/Docs/Features" ];
- sox -> filesystem;
- sox -> null [ color=red ];
sox -> libao;
- sox -> PulseAudio;
+ sox -> PulseAudio [ dir=both ];
sox -> ALSA;
sox -> sndio;
libao [ URL="https://www.xiph.org/ao/" ];
- libao -> filesystem;
libao -> ALSA;
libao -> PulseAudio;
- libao -> null [ color=red ];
libao -> NAS;
libao -> RoarAudio;
libao -> sndio;
@@ -68,12 +60,10 @@ digraph "Linux Audio Output APIs (current-only)" {
libcanberra -> PulseAudio;
libcanberra -> ALSA;
libcanberra -> gstreamer;
- libcanberra -> null [ color=red ];
sndio [ URL="http://www.sndio.org/" ];
- sndio -> ALSA;
+ sndio -> ALSA [ dir=both ];
PulseAudio -> sndio;
- ALSA -> sndio;
gstreamer -> sndio;
OpenAL [ URL="https://www.openal-soft.org/" ];
@@ -82,15 +72,12 @@ digraph "Linux Audio Output APIs (current-only)" {
OpenAL -> SoundIO;
OpenAL -> portaudio;
OpenAL -> JACK;
- OpenAL -> filesystem;
OpenAL -> sndio;
- OpenAL -> null [ color=red ];
SoundIO [ URL="http://libsound.io/" ];
SoundIO -> JACK;
SoundIO -> PulseAudio;
SoundIO -> ALSA;
- SoundIO -> null [ color=red ];
RtAudio [ URL="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" ];
RtAudio -> ALSA;
@@ -105,19 +92,15 @@ digraph "Linux Audio Output APIs (current-only)" {
ALSA -> "sound card" [ color=green ];
ALSA -> PulseAudio;
ALSA -> JACK;
- ALSA -> null [ color=red ];
- ALSA -> filesystem;
// https://wiki.libsdl.org/FAQUsingSDL
SDL2 [ label="libSDL-2.0" URL="https://hg.libsdl.org/SDL/file/355a4f94a782" ];
SDL2 -> ALSA;
- SDL2 -> filesystem;
SDL2 -> JACK;
SDL2 -> NAS;
// Maybe SDL2 -> "NaCL";
- SDL2 -> null [ color=red ];
SDL2 -> PulseAudio;
SDL2 -> sndio;
@@ -144,9 +127,7 @@ digraph "Linux Audio Output APIs (current-only)" {
telepathy -> "phone modem" [ label="?" fontcolor=red ];
VLC [ URL="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" ];
- VLC -> null [ color=red ];
VLC -> ALSA;
- VLC -> filesystem;
VLC -> JACK;
VLC -> PulseAudio;
VLC -> sndio;
diff --git a/images/linux-audio-output-current.png b/images/linux-audio-output-current.png
Binary files differ.
diff --git a/images/linux-audio-output-current.svg b/images/linux-audio-output-current.svg
@@ -4,797 +4,685 @@
<!-- Generated by graphviz version 2.47.1 (20210417.1919)
-->
<!-- Title: Linux Audio Output APIs (current-only) Pages: 1 -->
-<svg width="1754pt" height="695pt"
- viewBox="0.00 0.00 1754.00 695.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="1894pt" height="695pt"
+ viewBox="0.00 0.00 1893.60 695.00" 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 691)">
<title>Linux Audio Output APIs (current-only)</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-691 1750,-691 1750,4 -4,4"/>
-<text text-anchor="middle" x="873" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs (current-only)</text>
-<text text-anchor="middle" x="873" 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="873" 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,-691 1889.6,-691 1889.6,4 -4,4"/>
+<text text-anchor="middle" x="942.8" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs (current-only)</text>
+<text text-anchor="middle" x="942.8" 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="942.8" y="-7.8" font-family="Times,serif" font-size="14.00"> https://hacktivis.me/articles/linux-audio-output</text>
<!-- sound card -->
<g id="node1" class="node">
<title>sound card</title>
-<polygon fill="cyan" stroke="black" points="1003.5,-322 908.5,-322 908.5,-286 1003.5,-286 1003.5,-322"/>
-<text text-anchor="middle" x="956" y="-300.3" font-family="Times,serif" font-size="14.00">sound card</text>
+<polygon fill="cyan" stroke="black" points="1330.5,-322 1235.5,-322 1235.5,-286 1330.5,-286 1330.5,-322"/>
+<text text-anchor="middle" x="1283" y="-300.3" font-family="Times,serif" font-size="14.00">sound card</text>
</g>
<!-- phone modem -->
<g id="node2" class="node">
<title>phone modem</title>
-<polygon fill="cyan" stroke="black" points="665.5,-235 548.5,-235 548.5,-199 665.5,-199 665.5,-235"/>
-<text text-anchor="middle" x="607" y="-213.3" font-family="Times,serif" font-size="14.00">phone modem</text>
+<polygon fill="cyan" stroke="black" points="1853.5,-235 1736.5,-235 1736.5,-199 1853.5,-199 1853.5,-235"/>
+<text text-anchor="middle" x="1795" y="-213.3" font-family="Times,serif" font-size="14.00">phone modem</text>
</g>
<!-- Bluetooth card -->
<g id="node3" class="node">
<title>Bluetooth card</title>
-<polygon fill="cyan" stroke="black" points="421,-89 299,-89 299,-53 421,-53 421,-89"/>
-<text text-anchor="middle" x="360" y="-67.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
-</g>
-<!-- filesystem -->
-<g id="node4" class="node">
-<title>filesystem</title>
-<polygon fill="yellow" stroke="black" points="1265.72,-136.54 1265.72,-151.46 1228.98,-162 1177.02,-162 1140.28,-151.46 1140.28,-136.54 1177.02,-126 1228.98,-126 1265.72,-136.54"/>
-<text text-anchor="middle" x="1203" y="-140.3" font-family="Times,serif" font-size="14.00">filesystem</text>
-</g>
-<!-- null -->
-<g id="node5" class="node">
-<title>null</title>
-<polygon fill="red" stroke="black" points="1082,-162 1041.61,-144 1082,-126 1122.39,-144 1082,-162"/>
-<text text-anchor="middle" x="1082" y="-140.3" font-family="Times,serif" font-size="14.00">null</text>
+<polygon fill="cyan" stroke="black" points="1368,-89 1246,-89 1246,-53 1368,-53 1368,-89"/>
+<text text-anchor="middle" x="1307" y="-67.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
</g>
<!-- portaudio -->
-<g id="node6" class="node">
+<g id="node4" class="node">
<title>portaudio</title>
-<g id="a_node6"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio">
-<ellipse fill="lightgrey" stroke="black" cx="1353" cy="-523" rx="55.79" ry="18"/>
-<text text-anchor="middle" x="1353" y="-519.3" font-family="Times,serif" font-size="14.00">portaudio</text>
+<g id="a_node4"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio">
+<ellipse fill="lightgrey" stroke="black" cx="661" cy="-523" rx="55.79" ry="18"/>
+<text text-anchor="middle" x="661" y="-519.3" font-family="Times,serif" font-size="14.00">portaudio</text>
</a>
</g>
</g>
<!-- ALSA -->
-<g id="node7" class="node">
+<g id="node5" class="node">
<title>ALSA</title>
-<g id="a_node7"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA">
-<polygon fill="yellow" stroke="black" points="1048.89,-442.54 1048.89,-457.46 1026.11,-468 993.89,-468 971.11,-457.46 971.11,-442.54 993.89,-432 1026.11,-432 1048.89,-442.54"/>
-<text text-anchor="middle" x="1010" y="-446.3" font-family="Times,serif" font-size="14.00">ALSA</text>
+<g id="a_node5"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA">
+<polygon fill="yellow" stroke="black" points="1023.89,-442.54 1023.89,-457.46 1001.11,-468 968.89,-468 946.11,-457.46 946.11,-442.54 968.89,-432 1001.11,-432 1023.89,-442.54"/>
+<text text-anchor="middle" x="985" y="-446.3" 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="M1328.31,-506.62C1315.29,-499.22 1298.79,-490.91 1283,-486 1207.12,-462.42 1114.64,-454.71 1059.13,-452.2"/>
-<polygon fill="black" stroke="black" points="1059.01,-448.69 1048.87,-451.77 1058.72,-455.68 1059.01,-448.69"/>
+<path fill="none" stroke="black" d="M702.15,-510.75C710.04,-508.73 718.26,-506.72 726,-505 769.23,-495.39 780.61,-495.83 824,-487 863.25,-479.01 907.67,-469 939.9,-461.57"/>
+<polygon fill="black" stroke="black" points="940.95,-464.92 949.91,-459.25 939.38,-458.1 940.95,-464.92"/>
</g>
<!-- JACK -->
-<g id="node8" class="node">
+<g id="node6" class="node">
<title>JACK</title>
-<ellipse fill="lightgrey" stroke="black" cx="252" cy="-304" rx="34.39" ry="18"/>
-<text text-anchor="middle" x="252" y="-300.3" font-family="Times,serif" font-size="14.00">JACK</text>
+<ellipse fill="lightgrey" stroke="black" cx="1172" cy="-304" rx="34.39" ry="18"/>
+<text text-anchor="middle" x="1172" y="-300.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="M1302.51,-515.05C1275.67,-511.57 1242.09,-507.57 1212,-505 1049.72,-491.13 633.67,-521.99 480,-468 401.91,-440.56 396.44,-406.99 329,-359 313.03,-347.63 295.1,-335.05 280.56,-324.89"/>
-<polygon fill="black" stroke="black" points="282.2,-321.77 272,-318.91 278.19,-327.51 282.2,-321.77"/>
+<path fill="none" stroke="black" d="M683.24,-506.37C729.95,-474.24 842.58,-400.32 947,-359 1008.12,-334.82 1083.03,-319.49 1129.13,-311.57"/>
+<polygon fill="black" stroke="black" points="1129.79,-315.01 1139.08,-309.9 1128.63,-308.11 1129.79,-315.01"/>
</g>
<!-- sndio -->
-<g id="node9" class="node">
+<g id="node7" class="node">
<title>sndio</title>
-<g id="a_node9"><a xlink:href="http://www.sndio.org/" xlink:title="sndio">
-<ellipse fill="lightgrey" stroke="black" cx="1014" cy="-71" rx="36" ry="18"/>
-<text text-anchor="middle" x="1014" y="-67.3" font-family="Times,serif" font-size="14.00">sndio</text>
+<g id="a_node7"><a xlink:href="http://www.sndio.org/" xlink:title="sndio">
+<ellipse fill="lightgrey" stroke="black" cx="677" cy="-304" rx="36" ry="18"/>
+<text text-anchor="middle" x="677" y="-300.3" font-family="Times,serif" font-size="14.00">sndio</text>
</a>
</g>
</g>
<!-- portaudio->sndio -->
<g id="edge3" class="edge">
<title>portaudio->sndio</title>
-<path fill="none" stroke="black" d="M1372.45,-505.81C1432.1,-455.7 1610.49,-302.54 1644,-235 1665.71,-191.25 1665.63,-159.41 1630,-126 1588.64,-87.22 1196.09,-75.67 1060.1,-72.82"/>
-<polygon fill="black" stroke="black" points="1060.08,-69.32 1050.01,-72.61 1059.94,-76.32 1060.08,-69.32"/>
+<path fill="none" stroke="black" d="M678.01,-505.67C683.06,-500.12 688.24,-493.64 692,-487 696.36,-479.29 696.65,-476.75 698,-468 705.34,-420.37 693.85,-364.63 685.19,-332.22"/>
+<polygon fill="black" stroke="black" points="688.44,-330.87 682.39,-322.17 681.7,-332.74 688.44,-330.87"/>
</g>
<!-- ALSA->sound card -->
-<g id="edge60" class="edge">
+<g id="edge49" class="edge">
<title>ALSA->sound card</title>
-<path fill="none" stroke="green" d="M1003.07,-431.95C1000.78,-426.25 998.25,-419.87 996,-414 985.29,-386.05 973.54,-353.86 965.57,-331.74"/>
-<polygon fill="green" stroke="green" points="968.76,-330.27 962.08,-322.05 962.18,-332.64 968.76,-330.27"/>
-</g>
-<!-- ALSA->filesystem -->
-<g id="edge64" class="edge">
-<title>ALSA->filesystem</title>
-<path fill="none" stroke="black" d="M1042.43,-439.45C1068.25,-430.75 1104.37,-416.02 1131,-395 1156.37,-374.98 1316.25,-211.11 1328,-181 1328.16,-180.59 1328.27,-180.35 1328,-180 1325.69,-176.96 1290.82,-167.33 1258.49,-158.95"/>
-<polygon fill="black" stroke="black" points="1259.14,-155.5 1248.58,-156.39 1257.39,-162.28 1259.14,-155.5"/>
-</g>
-<!-- ALSA->null -->
-<g id="edge63" class="edge">
-<title>ALSA->null</title>
-<path fill="none" stroke="red" d="M1038.87,-437.81C1059.17,-428.77 1085.84,-414.35 1104,-395 1128.76,-368.62 1131.79,-357.23 1140,-322 1154.57,-259.52 1146.06,-235.58 1114,-180 1110.78,-174.43 1106.55,-168.99 1102.22,-164.14"/>
-<polygon fill="red" stroke="red" points="1104.44,-161.39 1095,-156.58 1099.38,-166.23 1104.44,-161.39"/>
+<path fill="none" stroke="green" d="M1010.92,-436.47C1061.7,-411.94 1174.81,-357.28 1238.04,-326.73"/>
+<polygon fill="green" stroke="green" points="1239.88,-329.72 1247.36,-322.22 1236.84,-323.42 1239.88,-329.72"/>
</g>
<!-- ALSA->JACK -->
-<g id="edge62" class="edge">
+<g id="edge51" class="edge">
<title>ALSA->JACK</title>
-<path fill="none" stroke="black" d="M971.21,-444.95C899.93,-437.23 743.49,-419.04 613,-395 542.76,-382.06 368.55,-342.06 300,-322 296.39,-320.94 292.66,-319.77 288.95,-318.55"/>
-<polygon fill="black" stroke="black" points="289.84,-315.15 279.24,-315.24 287.58,-321.78 289.84,-315.15"/>
-</g>
-<!-- ALSA->sndio -->
-<g id="edge41" class="edge">
-<title>ALSA->sndio</title>
-<path fill="none" stroke="black" d="M1039.66,-438.13C1069.47,-428.3 1116.05,-412.7 1155,-395 1360.58,-301.6 1738.1,-292.89 1586,-126 1550.54,-87.09 1189.59,-75.77 1059.94,-72.88"/>
-<polygon fill="black" stroke="black" points="1060,-69.38 1049.93,-72.67 1059.85,-76.38 1060,-69.38"/>
+<path fill="none" stroke="black" d="M1001.88,-431.79C1024.67,-409.11 1067.15,-368.72 1108,-340 1117.52,-333.31 1128.45,-326.91 1138.55,-321.46"/>
+<polygon fill="black" stroke="black" points="1140.31,-324.49 1147.53,-316.74 1137.05,-318.29 1140.31,-324.49"/>
</g>
<!-- PulseAudio -->
-<g id="node10" class="node">
+<g id="node8" class="node">
<title>PulseAudio</title>
-<g id="a_node10"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio">
-<ellipse fill="lightgrey" stroke="black" cx="684" cy="-377" rx="62.29" ry="18"/>
-<text text-anchor="middle" x="684" y="-373.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
+<g id="a_node8"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio">
+<ellipse fill="lightgrey" stroke="black" cx="1335" cy="-377" rx="62.29" ry="18"/>
+<text text-anchor="middle" x="1335" y="-373.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
</a>
</g>
</g>
<!-- ALSA->PulseAudio -->
-<g id="edge61" class="edge">
+<g id="edge50" class="edge">
<title>ALSA->PulseAudio</title>
-<path fill="none" stroke="black" d="M972.67,-441.8C915.61,-430 806.65,-406.35 740.08,-391.39"/>
-<polygon fill="black" stroke="black" points="740.7,-387.95 730.18,-389.16 739.16,-394.77 740.7,-387.95"/>
+<path fill="none" stroke="black" d="M1023.8,-442.83C1065.24,-436.65 1132.38,-426.31 1190,-414 1219.57,-407.68 1252.34,-399.06 1279.33,-391.83"/>
+<polygon fill="black" stroke="black" points="1280.24,-395.21 1288.99,-389.24 1278.42,-388.45 1280.24,-395.21"/>
</g>
<!-- bluez -->
-<g id="node11" class="node">
+<g id="node9" class="node">
<title>bluez</title>
-<polygon fill="yellow" stroke="black" points="401.51,-136.54 401.51,-151.46 377.19,-162 342.81,-162 318.49,-151.46 318.49,-136.54 342.81,-126 377.19,-126 401.51,-136.54"/>
-<text text-anchor="middle" x="360" y="-140.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
+<polygon fill="yellow" stroke="black" points="1348.51,-136.54 1348.51,-151.46 1324.19,-162 1289.81,-162 1265.49,-151.46 1265.49,-136.54 1289.81,-126 1324.19,-126 1348.51,-136.54"/>
+<text text-anchor="middle" x="1307" y="-140.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
</g>
<!-- ALSA->bluez -->
-<g id="edge18" class="edge">
+<g id="edge16" class="edge">
<title>ALSA->bluez</title>
-<path fill="none" stroke="black" d="M1016.55,-431.58C1027.52,-399.16 1045.29,-328.94 1012,-286 938.11,-190.68 552.84,-157.13 411.8,-147.93"/>
-<polygon fill="black" stroke="black" points="411.88,-144.43 401.68,-147.29 411.44,-151.42 411.88,-144.43"/>
+<path fill="none" stroke="black" d="M946.16,-449.5C894.61,-447.89 810,-436.36 810,-378 810,-378 810,-378 810,-216 810,-171.39 1127.91,-152.72 1255.21,-147.03"/>
+<polygon fill="black" stroke="black" points="1255.64,-150.52 1265.48,-146.58 1255.34,-143.52 1255.64,-150.52"/>
</g>
<!-- PipeWire -->
-<g id="node15" class="node">
+<g id="node12" class="node">
<title>PipeWire</title>
-<g id="a_node15"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire">
-<ellipse fill="lightgrey" stroke="black" cx="360" cy="-217" rx="53.09" ry="18"/>
-<text text-anchor="middle" x="360" y="-213.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
+<g id="a_node12"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire">
+<ellipse fill="lightgrey" stroke="black" cx="1307" cy="-217" rx="53.09" ry="18"/>
+<text text-anchor="middle" x="1307" y="-213.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
</a>
</g>
</g>
<!-- ALSA->PipeWire -->
-<g id="edge13" class="edge">
+<g id="edge11" class="edge">
<title>ALSA->PipeWire</title>
-<path fill="none" stroke="black" d="M973.02,-433.27C924.05,-413.05 834.56,-378.28 755,-359 637.29,-330.47 595.84,-370.84 485,-322 443.04,-303.51 404.01,-266.62 381.08,-242.12"/>
-<polygon fill="black" stroke="black" points="971.69,-436.5 982.26,-437.11 974.37,-430.04 971.69,-436.5"/>
-<polygon fill="black" stroke="black" points="383.55,-239.64 374.21,-234.64 378.4,-244.37 383.55,-239.64"/>
+<path fill="none" stroke="black" d="M996.56,-422.6C1005.62,-403.68 1019.44,-378.25 1036,-359 1094.97,-290.45 1195.61,-250.66 1256.25,-231.74"/>
+<polygon fill="black" stroke="black" points="993.31,-421.29 992.27,-431.83 999.66,-424.24 993.31,-421.29"/>
+<polygon fill="black" stroke="black" points="1257.44,-235.03 1265.99,-228.77 1255.4,-228.33 1257.44,-235.03"/>
</g>
<!-- JACK->PipeWire -->
-<g id="edge14" class="edge">
+<g id="edge12" class="edge">
<title>JACK->PipeWire</title>
-<path fill="none" stroke="black" d="M278.27,-282.33C294.39,-269.64 315.03,-253.39 331.54,-240.4"/>
-<polygon fill="black" stroke="black" points="276.01,-279.65 270.32,-288.58 280.34,-285.15 276.01,-279.65"/>
-<polygon fill="black" stroke="black" points="334.06,-242.87 339.75,-233.94 329.73,-237.37 334.06,-242.87"/>
+<path fill="none" stroke="black" d="M1201.6,-284.37C1223.02,-270.87 1251.99,-252.63 1274.14,-238.69"/>
+<polygon fill="black" stroke="black" points="1199.69,-281.43 1193.09,-289.72 1203.42,-287.35 1199.69,-281.43"/>
+<polygon fill="black" stroke="black" points="1276.27,-241.49 1282.86,-233.2 1272.54,-235.56 1276.27,-241.49"/>
</g>
<!-- sndio->ALSA -->
-<g id="edge39" class="edge">
+<g id="edge32" class="edge">
<title>sndio->ALSA</title>
-<path fill="none" stroke="black" d="M1050.01,-72.53C1172.55,-74.75 1566.85,-85.24 1604,-126 1756.1,-292.89 1378.58,-301.6 1173,-395 1134.43,-412.52 1088.37,-428 1054.95,-437.84"/>
-<polygon fill="black" stroke="black" points="1053.64,-434.58 1045,-440.71 1055.58,-441.3 1053.64,-434.58"/>
+<path fill="none" stroke="black" d="M699.5,-327.82C728.21,-356.43 776.78,-403.06 799,-414 842.3,-435.32 897.14,-443.7 936.02,-446.97"/>
+<polygon fill="black" stroke="black" points="701.86,-325.23 692.32,-320.62 696.91,-330.17 701.86,-325.23"/>
+<polygon fill="black" stroke="black" points="935.81,-450.46 946.05,-447.72 936.34,-443.48 935.81,-450.46"/>
</g>
<!-- PulseAudio->sound card -->
-<g id="edge6" class="edge">
-<title>PulseAudio->sound card</title>
-<path fill="none" stroke="green" d="M728.61,-364.36C774.96,-352.26 847.65,-333.28 898.33,-320.05"/>
-<polygon fill="green" stroke="green" points="899.37,-323.4 908.16,-317.49 897.6,-316.63 899.37,-323.4"/>
-</g>
-<!-- PulseAudio->null -->
<g id="edge5" class="edge">
-<title>PulseAudio->null</title>
-<path fill="none" stroke="red" d="M704.78,-359.76C729.25,-340.97 771.48,-309.58 810,-286 895.91,-233.42 1003.56,-181.47 1053.78,-157.99"/>
-<polygon fill="red" stroke="red" points="1055.44,-161.08 1063.03,-153.69 1052.49,-154.73 1055.44,-161.08"/>
+<title>PulseAudio->sound card</title>
+<path fill="none" stroke="green" d="M1322.68,-359.17C1316.36,-350.55 1308.53,-339.86 1301.51,-330.27"/>
+<polygon fill="green" stroke="green" points="1304.33,-328.2 1295.6,-322.2 1298.68,-332.33 1304.33,-328.2"/>
</g>
<!-- PulseAudio->ALSA -->
<g id="edge4" class="edge">
<title>PulseAudio->ALSA</title>
-<path fill="none" stroke="black" d="M734.05,-387.85C797.21,-401.06 904.68,-424.45 965.24,-438.16"/>
-<polygon fill="black" stroke="black" points="964.73,-441.63 975.26,-440.44 966.29,-434.81 964.73,-441.63"/>
+<path fill="none" stroke="black" d="M1296.91,-391.36C1271.78,-398.68 1238.22,-407.55 1208,-414 1148.79,-426.65 1079.51,-437.22 1033.95,-443.33"/>
+<polygon fill="black" stroke="black" points="1033.49,-439.86 1024.04,-444.64 1034.41,-446.8 1033.49,-439.86"/>
</g>
<!-- PulseAudio->JACK -->
-<g id="edge7" class="edge">
+<g id="edge6" class="edge">
<title>PulseAudio->JACK</title>
-<path fill="none" stroke="black" d="M626.81,-369.73C554.98,-361.74 435.84,-348.14 392,-341 350.79,-334.29 340.22,-333.22 300,-322 296.23,-320.95 292.32,-319.75 288.45,-318.49"/>
-<polygon fill="black" stroke="black" points="289.55,-315.17 278.96,-315.27 287.3,-321.8 289.55,-315.17"/>
+<path fill="none" stroke="black" d="M1302.01,-361.63C1274.47,-349.63 1235.3,-332.57 1207.17,-320.32"/>
+<polygon fill="black" stroke="black" points="1208.28,-316.98 1197.71,-316.2 1205.48,-323.4 1208.28,-316.98"/>
</g>
<!-- PulseAudio->sndio -->
-<g id="edge40" class="edge">
+<g id="edge33" class="edge">
<title>PulseAudio->sndio</title>
-<path fill="none" stroke="black" d="M628.37,-368.51C575.78,-360.15 502.4,-344.75 485,-322 451.71,-278.47 524.75,-211.57 539,-199 664.13,-88.62 875.1,-72.76 967.87,-71.43"/>
-<polygon fill="black" stroke="black" points="968.09,-74.93 978.06,-71.34 968.03,-67.93 968.09,-74.93"/>
+<path fill="none" stroke="black" d="M1277.76,-369.82C1148.77,-355.9 837.61,-322.33 721.59,-309.81"/>
+<polygon fill="black" stroke="black" points="721.95,-306.33 711.63,-308.74 721.2,-313.29 721.95,-306.33"/>
</g>
<!-- PulseAudio->bluez -->
-<g id="edge8" class="edge">
+<g id="edge7" class="edge">
<title>PulseAudio->bluez</title>
-<path fill="none" stroke="black" d="M628.45,-368.79C569.32,-360.95 479.73,-348.52 446,-341 417.46,-334.63 408.01,-337.16 383,-322 336.77,-293.98 318.4,-285.06 298,-235 291.96,-220.18 291.37,-213.56 298,-199 304.19,-185.41 315.67,-173.91 327.09,-165.06"/>
-<polygon fill="black" stroke="black" points="329.27,-167.8 335.31,-159.09 325.16,-162.13 329.27,-167.8"/>
+<path fill="none" stroke="black" d="M1346.37,-359.18C1349.64,-353.61 1352.9,-347.23 1355,-341 1375.26,-280.91 1395.27,-256.72 1369,-199 1362.81,-185.41 1351.33,-173.91 1339.91,-165.06"/>
+<polygon fill="black" stroke="black" points="1341.84,-162.13 1331.69,-159.09 1337.73,-167.8 1341.84,-162.13"/>
</g>
<!-- ofono -->
-<g id="node12" class="node">
+<g id="node10" class="node">
<title>ofono</title>
-<polygon fill="yellow" stroke="black" points="572.29,-296.54 572.29,-311.46 549.28,-322 516.72,-322 493.71,-311.46 493.71,-296.54 516.72,-286 549.28,-286 572.29,-296.54"/>
-<text text-anchor="middle" x="533" y="-300.3" font-family="Times,serif" font-size="14.00">ofono</text>
+<polygon fill="yellow" stroke="black" points="1758.29,-296.54 1758.29,-311.46 1735.28,-322 1702.72,-322 1679.71,-311.46 1679.71,-296.54 1702.72,-286 1735.28,-286 1758.29,-296.54"/>
+<text text-anchor="middle" x="1719" y="-300.3" font-family="Times,serif" font-size="14.00">ofono</text>
</g>
<!-- PulseAudio->ofono -->
-<g id="edge9" class="edge">
+<g id="edge8" class="edge">
<title>PulseAudio->ofono</title>
-<path fill="none" stroke="black" d="M652.71,-361.29C628.35,-349.84 594.52,-333.92 569.03,-321.94"/>
-<polygon fill="black" stroke="black" points="570.24,-318.64 559.71,-317.56 567.27,-324.98 570.24,-318.64"/>
-</g>
-<!-- sox -->
-<g id="node13" class="node">
-<title>sox</title>
-<g id="a_node13"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox">
-<ellipse fill="lightgrey" stroke="black" cx="1087" cy="-304" rx="27" ry="18"/>
-<text text-anchor="middle" x="1087" y="-300.3" font-family="Times,serif" font-size="14.00">sox</text>
-</a>
-</g>
-</g>
-<!-- PulseAudio->sox -->
-<g id="edge10" class="edge">
-<title>PulseAudio->sox</title>
-<path fill="none" stroke="black" d="M736.85,-367.31C800.3,-357.42 909.55,-340.27 1003,-322 1018.65,-318.94 1036.02,-315.04 1051.02,-311.74"/>
-<polygon fill="black" stroke="black" points="1051.94,-315.12 1060.97,-309.57 1050.45,-308.28 1051.94,-315.12"/>
+<path fill="none" stroke="black" d="M1395.43,-372.51C1475.12,-367.38 1610.76,-356.68 1658,-341 1668.99,-337.35 1680.15,-331.52 1689.87,-325.6"/>
+<polygon fill="black" stroke="black" points="1691.79,-328.52 1698.34,-320.2 1688.02,-322.62 1691.79,-328.52"/>
</g>
<!-- PulseAudio->PipeWire -->
-<g id="edge12" class="edge">
+<g id="edge10" class="edge">
<title>PulseAudio->PipeWire</title>
-<path fill="none" stroke="black" d="M614.8,-370.09C544.88,-362.76 443.14,-347.94 414,-322 390.71,-301.26 375.95,-268.06 367.85,-244.76"/>
-<polygon fill="black" stroke="black" points="614.57,-373.58 624.87,-371.11 615.28,-366.62 614.57,-373.58"/>
-<polygon fill="black" stroke="black" points="371.14,-243.55 364.69,-235.15 364.49,-245.74 371.14,-243.55"/>
+<path fill="none" stroke="black" d="M1340.43,-348.74C1343.07,-330.71 1344.75,-306.68 1340,-286 1336.6,-271.22 1329.55,-255.93 1322.83,-243.6"/>
+<polygon fill="black" stroke="black" points="1336.94,-348.4 1338.76,-358.84 1343.84,-349.54 1336.94,-348.4"/>
+<polygon fill="black" stroke="black" points="1325.82,-241.77 1317.83,-234.81 1319.73,-245.23 1325.82,-241.77"/>
</g>
<!-- bluez->Bluetooth card -->
-<g id="edge19" class="edge">
+<g id="edge17" class="edge">
<title>bluez->Bluetooth card</title>
-<path fill="none" stroke="green" d="M360,-125.81C360,-117.79 360,-108.05 360,-99.07"/>
-<polygon fill="green" stroke="green" points="363.5,-99.03 360,-89.03 356.5,-99.03 363.5,-99.03"/>
+<path fill="none" stroke="green" d="M1307,-125.81C1307,-117.79 1307,-108.05 1307,-99.07"/>
+<polygon fill="green" stroke="green" points="1310.5,-99.03 1307,-89.03 1303.5,-99.03 1310.5,-99.03"/>
</g>
<!-- ofono->phone modem -->
-<g id="edge17" class="edge">
+<g id="edge15" class="edge">
<title>ofono->phone modem</title>
-<path fill="none" stroke="green" d="M547.98,-285.8C558.71,-273.47 573.33,-256.68 585.33,-242.89"/>
-<polygon fill="green" stroke="green" points="588.12,-245.02 592.05,-235.18 582.84,-240.42 588.12,-245.02"/>
-</g>
-<!-- sox->filesystem -->
-<g id="edge20" class="edge">
-<title>sox->filesystem</title>
-<path fill="none" stroke="black" d="M1099.96,-287.87C1105.07,-281.78 1110.91,-274.64 1116,-268 1141.22,-235.08 1168.57,-195.77 1185.74,-170.6"/>
-<polygon fill="black" stroke="black" points="1188.85,-172.24 1191.58,-162 1183.06,-168.31 1188.85,-172.24"/>
-</g>
-<!-- sox->null -->
-<g id="edge21" class="edge">
-<title>sox->null</title>
-<path fill="none" stroke="red" d="M1093.71,-286.37C1101.13,-265.79 1111.27,-229.7 1105,-199 1102.82,-188.33 1098.45,-177.16 1094.1,-167.76"/>
-<polygon fill="red" stroke="red" points="1097.21,-166.15 1089.67,-158.71 1090.93,-169.23 1097.21,-166.15"/>
-</g>
-<!-- sox->ALSA -->
-<g id="edge24" class="edge">
-<title>sox->ALSA</title>
-<path fill="none" stroke="black" d="M1078.35,-321.18C1065.12,-345.91 1039.75,-393.37 1023.91,-422.98"/>
-<polygon fill="black" stroke="black" points="1020.76,-421.45 1019.14,-431.92 1026.94,-424.75 1020.76,-421.45"/>
-</g>
-<!-- sox->sndio -->
-<g id="edge25" class="edge">
-<title>sox->sndio</title>
-<path fill="none" stroke="black" d="M1069.02,-290.52C1053.19,-278.39 1031.14,-258.4 1021,-235 1001.69,-190.44 1005.11,-132.46 1009.47,-99.02"/>
-<polygon fill="black" stroke="black" points="1012.94,-99.46 1010.89,-89.07 1006.01,-98.47 1012.94,-99.46"/>
-</g>
-<!-- sox->PulseAudio -->
-<g id="edge23" class="edge">
-<title>sox->PulseAudio</title>
-<path fill="none" stroke="black" d="M1063.3,-312.7C1050.71,-315.78 1035.15,-319.23 1021,-322 927.53,-340.27 818.26,-357.43 750,-367.31"/>
-<polygon fill="black" stroke="black" points="749.22,-363.89 739.82,-368.77 750.22,-370.82 749.22,-363.89"/>
-</g>
-<!-- libao -->
-<g id="node17" class="node">
-<title>libao</title>
-<g id="a_node17"><a xlink:href="https://www.xiph.org/ao/" xlink:title="libao">
-<ellipse fill="lightgrey" stroke="black" cx="1063" cy="-217" rx="33.29" ry="18"/>
-<text text-anchor="middle" x="1063" y="-213.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="M1082.26,-286.21C1078.93,-274.41 1074.4,-258.38 1070.57,-244.82"/>
-<polygon fill="black" stroke="black" points="1073.9,-243.72 1067.81,-235.05 1067.16,-245.62 1073.9,-243.72"/>
+<path fill="none" stroke="green" d="M1734.38,-285.8C1745.4,-273.47 1760.42,-256.68 1772.75,-242.89"/>
+<polygon fill="green" stroke="green" points="1775.59,-244.96 1779.64,-235.18 1770.37,-240.3 1775.59,-244.96"/>
</g>
<!-- X11 bell -->
-<g id="node14" class="node">
+<g id="node11" class="node">
<title>X11 bell</title>
-<ellipse fill="lightgrey" stroke="black" cx="609" cy="-450" rx="48.99" ry="18"/>
-<text text-anchor="middle" x="609" y="-446.3" font-family="Times,serif" font-size="14.00">X11 bell</text>
+<ellipse fill="lightgrey" stroke="black" cx="1389" cy="-450" rx="48.99" ry="18"/>
+<text text-anchor="middle" x="1389" y="-446.3" font-family="Times,serif" font-size="14.00">X11 bell</text>
</g>
<!-- X11 bell->PulseAudio -->
-<g id="edge11" class="edge">
+<g id="edge9" class="edge">
<title>X11 bell->PulseAudio</title>
-<path fill="none" stroke="black" d="M626.02,-432.89C635.76,-423.67 648.15,-411.94 658.98,-401.68"/>
-<polygon fill="black" stroke="black" points="661.67,-403.96 666.53,-394.54 656.86,-398.87 661.67,-403.96"/>
+<path fill="none" stroke="black" d="M1376.48,-432.53C1369.82,-423.79 1361.51,-412.86 1354.07,-403.08"/>
+<polygon fill="black" stroke="black" points="1356.67,-400.71 1347.83,-394.87 1351.1,-404.95 1356.67,-400.71"/>
</g>
<!-- PipeWire->bluez -->
-<g id="edge15" class="edge">
+<g id="edge13" class="edge">
<title>PipeWire->bluez</title>
-<path fill="none" stroke="black" d="M360,-198.81C360,-190.79 360,-181.05 360,-172.07"/>
-<polygon fill="black" stroke="black" points="363.5,-172.03 360,-162.03 356.5,-172.03 363.5,-172.03"/>
+<path fill="none" stroke="black" d="M1307,-198.81C1307,-190.79 1307,-181.05 1307,-172.07"/>
+<polygon fill="black" stroke="black" points="1310.5,-172.03 1307,-162.03 1303.5,-172.03 1310.5,-172.03"/>
</g>
<!-- gstreamer -->
-<g id="node16" class="node">
+<g id="node13" class="node">
<title>gstreamer</title>
-<ellipse fill="lightgrey" stroke="black" cx="197" cy="-523" rx="59.29" ry="18"/>
-<text text-anchor="middle" x="197" y="-519.3" font-family="Times,serif" font-size="14.00">gstreamer</text>
+<ellipse fill="lightgrey" stroke="black" cx="1590" cy="-523" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="1590" y="-519.3" font-family="Times,serif" font-size="14.00">gstreamer</text>
</g>
<!-- gstreamer->ALSA -->
-<g id="edge72" class="edge">
+<g id="edge57" class="edge">
<title>gstreamer->ALSA</title>
-<path fill="none" stroke="black" d="M250.63,-515.19C277.7,-511.88 311.06,-507.97 341,-505 572.68,-481.98 850.24,-462 960.93,-454.34"/>
-<polygon fill="black" stroke="black" points="961.38,-457.81 971.12,-453.63 960.9,-450.83 961.38,-457.81"/>
+<path fill="none" stroke="black" d="M1536.35,-515.39C1509.28,-512.12 1475.91,-508.2 1446,-505 1362.98,-496.1 1341.96,-496.44 1259,-487 1180.18,-478.03 1088.88,-465.63 1034.09,-457.97"/>
+<polygon fill="black" stroke="black" points="1034.36,-454.48 1023.97,-456.55 1033.39,-461.41 1034.36,-454.48"/>
</g>
<!-- gstreamer->JACK -->
-<g id="edge73" class="edge">
+<g id="edge58" class="edge">
<title>gstreamer->JACK</title>
-<path fill="none" stroke="black" d="M155.64,-510.07C135.06,-501.81 112.06,-488.52 100,-468 71.17,-418.96 64.57,-384.51 100,-340 113.34,-323.24 168.26,-313.83 208.26,-309.08"/>
-<polygon fill="black" stroke="black" points="208.78,-312.54 218.33,-307.95 208,-305.59 208.78,-312.54"/>
+<path fill="none" stroke="black" d="M1615.51,-506.69C1622.11,-501.36 1628.38,-494.74 1632,-487 1646.16,-456.76 1645.16,-433.75 1619,-413 1478.88,-301.84 1401.45,-361.47 1227,-322 1221.46,-320.75 1215.66,-319.21 1210,-317.58"/>
+<polygon fill="black" stroke="black" points="1210.62,-314.11 1200.04,-314.58 1208.6,-320.81 1210.62,-314.11"/>
</g>
<!-- gstreamer->sndio -->
-<g id="edge42" class="edge">
+<g id="edge34" class="edge">
<title>gstreamer->sndio</title>
-<path fill="none" stroke="black" d="M202.81,-504.97C209.79,-486.01 222.74,-454.99 240,-432 301.72,-349.77 493.49,-168.72 587,-126 654.23,-95.29 872.56,-79.79 968.3,-74.34"/>
-<polygon fill="black" stroke="black" points="968.74,-77.82 978.53,-73.77 968.35,-70.83 968.74,-77.82"/>
+<path fill="none" stroke="black" d="M1585.48,-504.97C1578.41,-481.37 1562.61,-438.72 1535,-413 1489.52,-370.64 1466.44,-373.48 1406,-359 1372.67,-351.01 876.44,-318.05 722.31,-307.95"/>
+<polygon fill="black" stroke="black" points="722.45,-304.45 712.24,-307.29 721.99,-311.44 722.45,-304.45"/>
</g>
<!-- gstreamer->PulseAudio -->
-<g id="edge74" class="edge">
+<g id="edge59" class="edge">
<title>gstreamer->PulseAudio</title>
-<path fill="none" stroke="black" d="M209.39,-505.05C230.11,-478.45 274.73,-428.38 327,-413 422.58,-384.89 538.11,-378.24 611.34,-377.21"/>
-<polygon fill="black" stroke="black" points="611.42,-380.71 621.38,-377.1 611.35,-373.71 611.42,-380.71"/>
+<path fill="none" stroke="black" d="M1558.07,-507.77C1547.75,-502.23 1536.73,-495.21 1528,-487 1499.44,-460.15 1511.99,-435.65 1480,-413 1458.17,-397.54 1430.35,-388.86 1404.93,-384"/>
+<polygon fill="black" stroke="black" points="1405.4,-380.53 1394.95,-382.26 1404.2,-387.43 1405.4,-380.53"/>
</g>
<!-- gstreamer->PipeWire -->
-<g id="edge16" class="edge">
+<g id="edge14" class="edge">
<title>gstreamer->PipeWire</title>
-<path fill="none" stroke="black" d="M145.75,-513.9C87.38,-503.2 0,-481.99 0,-451 0,-451 0,-451 0,-303 0,-242.72 193.63,-225.14 296.88,-220.05"/>
-<polygon fill="black" stroke="black" points="297.06,-223.54 306.88,-219.58 296.73,-216.55 297.06,-223.54"/>
+<path fill="none" stroke="black" d="M1621.55,-507.58C1630.49,-502.2 1639.54,-495.34 1646,-487 1661.06,-467.56 1661.41,-454.72 1652,-432 1625.25,-367.42 1432.83,-274.44 1347.53,-235.84"/>
+<polygon fill="black" stroke="black" points="1348.72,-232.54 1338.16,-231.63 1345.85,-238.92 1348.72,-232.54"/>
</g>
-<!-- libao->filesystem -->
-<g id="edge26" class="edge">
-<title>libao->filesystem</title>
-<path fill="none" stroke="black" d="M1086.43,-204.12C1107.28,-193.54 1138.21,-177.86 1162.97,-165.3"/>
-<polygon fill="black" stroke="black" points="1164.79,-168.3 1172.12,-160.66 1161.62,-162.06 1164.79,-168.3"/>
+<!-- sox -->
+<g id="node14" class="node">
+<title>sox</title>
+<g id="a_node14"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox">
+<ellipse fill="lightgrey" stroke="black" cx="527" cy="-596" rx="27" ry="18"/>
+<text text-anchor="middle" x="527" y="-592.3" font-family="Times,serif" font-size="14.00">sox</text>
+</a>
</g>
-<!-- libao->null -->
-<g id="edge29" class="edge">
-<title>libao->null</title>
-<path fill="none" stroke="red" d="M1067.6,-198.81C1069.89,-190.25 1072.7,-179.74 1075.23,-170.28"/>
-<polygon fill="red" stroke="red" points="1078.63,-171.14 1077.83,-160.58 1071.87,-169.33 1078.63,-171.14"/>
+</g>
+<!-- sox->ALSA -->
+<g id="edge20" class="edge">
+<title>sox->ALSA</title>
+<path fill="none" stroke="black" d="M554.06,-594.2C610.37,-591.74 743.41,-581.72 846,-541 872.81,-530.36 875.83,-520.73 900,-505 917.8,-493.41 937.85,-480.66 954.01,-470.46"/>
+<polygon fill="black" stroke="black" points="955.95,-473.37 962.54,-465.08 952.22,-467.45 955.95,-473.37"/>
+</g>
+<!-- sox->sndio -->
+<g id="edge21" class="edge">
+<title>sox->sndio</title>
+<path fill="none" stroke="black" d="M499.78,-594.23C391.86,-590.82 0,-574.95 0,-524 0,-524 0,-524 0,-376 0,-312.45 477.9,-305.57 630.65,-304.99"/>
+<polygon fill="black" stroke="black" points="631.09,-308.49 641.08,-304.96 631.07,-301.49 631.09,-308.49"/>
+</g>
+<!-- sox->PulseAudio -->
+<g id="edge19" class="edge">
+<title>sox->PulseAudio</title>
+<path fill="none" stroke="black" d="M539.98,-569.82C551.84,-549.3 571.29,-521.18 596,-505 652.5,-468.01 824.87,-445.67 891,-432 941.3,-421.6 954.1,-419.93 1005,-413 1095,-400.74 1199.31,-390.3 1266.16,-384.1"/>
+<polygon fill="black" stroke="black" points="536.88,-568.2 535.07,-578.64 542.99,-571.6 536.88,-568.2"/>
+<polygon fill="black" stroke="black" points="1266.52,-387.58 1276.16,-383.18 1265.88,-380.61 1266.52,-387.58"/>
+</g>
+<!-- libao -->
+<g id="node15" class="node">
+<title>libao</title>
+<g id="a_node15"><a xlink:href="https://www.xiph.org/ao/" xlink:title="libao">
+<ellipse fill="lightgrey" stroke="black" cx="478" cy="-523" rx="33.29" ry="18"/>
+<text text-anchor="middle" x="478" y="-519.3" font-family="Times,serif" font-size="14.00">libao</text>
+</a>
+</g>
+</g>
+<!-- sox->libao -->
+<g id="edge18" class="edge">
+<title>sox->libao</title>
+<path fill="none" stroke="black" d="M516.13,-579.24C509.93,-570.27 502.04,-558.83 495.04,-548.69"/>
+<polygon fill="black" stroke="black" points="497.74,-546.45 489.18,-540.21 491.98,-550.42 497.74,-546.45"/>
</g>
<!-- libao->ALSA -->
-<g id="edge27" class="edge">
+<g id="edge22" class="edge">
<title>libao->ALSA</title>
-<path fill="none" stroke="black" d="M1081.34,-232.21C1095.74,-244.62 1114.7,-264.06 1123,-286 1128.66,-300.97 1128.4,-306.94 1123,-322 1107.06,-366.51 1066.82,-405.04 1038.94,-427.65"/>
-<polygon fill="black" stroke="black" points="1036.75,-424.92 1031.08,-433.87 1041.09,-430.41 1036.75,-424.92"/>
+<path fill="none" stroke="black" d="M509.52,-517.23C533.27,-513.69 566.65,-508.84 596,-505 663.89,-496.12 681.15,-496.16 749,-487 813.86,-478.24 888.5,-466.59 936.18,-458.95"/>
+<polygon fill="black" stroke="black" points="936.9,-462.38 946.22,-457.33 935.79,-455.46 936.9,-462.38"/>
</g>
<!-- libao->sndio -->
-<g id="edge32" class="edge">
+<g id="edge26" class="edge">
<title>libao->sndio</title>
-<path fill="none" stroke="black" d="M1052.19,-199.6C1045.78,-189.2 1037.95,-175.26 1033,-162 1025.34,-141.49 1020.43,-117.14 1017.53,-98.94"/>
-<polygon fill="black" stroke="black" points="1020.99,-98.38 1016.05,-89.01 1014.06,-99.42 1020.99,-98.38"/>
+<path fill="none" stroke="black" d="M476.57,-504.71C475.82,-485.5 477.18,-454.27 491,-432 525.99,-375.64 596.3,-338.2 639.75,-319.36"/>
+<polygon fill="black" stroke="black" points="641.26,-322.52 649.11,-315.4 638.54,-316.07 641.26,-322.52"/>
</g>
<!-- libao->PulseAudio -->
-<g id="edge28" class="edge">
+<g id="edge23" class="edge">
<title>libao->PulseAudio</title>
-<path fill="none" stroke="black" d="M1037.42,-228.57C1005.14,-241.91 947.93,-265.59 899,-286 840.72,-310.32 826.26,-316.63 768,-341 754.75,-346.54 740.31,-352.56 727.2,-358.02"/>
-<polygon fill="black" stroke="black" points="725.82,-354.81 717.93,-361.89 728.51,-361.27 725.82,-354.81"/>
+<path fill="none" stroke="black" d="M504.15,-511.85C510.88,-509.43 518.16,-506.97 525,-505 709.44,-451.79 757.26,-442.12 947,-413 1057.04,-396.11 1185.99,-386.47 1264.03,-381.74"/>
+<polygon fill="black" stroke="black" points="1264.46,-385.22 1274.23,-381.13 1264.04,-378.23 1264.46,-385.22"/>
</g>
<!-- NAS -->
-<g id="node18" class="node">
+<g id="node16" class="node">
<title>NAS</title>
-<g id="a_node18"><a xlink:href="http://radscan.com/nas.html" xlink:title="Network Audio System/Server">
-<ellipse fill="lightgrey" stroke="black" cx="1435" cy="-144" rx="151.37" ry="18"/>
-<text text-anchor="middle" x="1435" y="-140.3" font-family="Times,serif" font-size="14.00">Network Audio System/Server</text>
+<g id="a_node16"><a xlink:href="http://radscan.com/nas.html" xlink:title="Network Audio System/Server">
+<ellipse fill="lightgrey" stroke="black" cx="293" cy="-450" rx="151.37" ry="18"/>
+<text text-anchor="middle" x="293" y="-446.3" font-family="Times,serif" font-size="14.00">Network Audio System/Server</text>
</a>
</g>
</g>
<!-- libao->NAS -->
-<g id="edge30" class="edge">
+<g id="edge24" class="edge">
<title>libao->NAS</title>
-<path fill="none" stroke="black" d="M1093.76,-210.13C1148.93,-199.6 1266.56,-177.15 1348.18,-161.57"/>
-<polygon fill="black" stroke="black" points="1349.28,-164.92 1358.45,-159.61 1347.97,-158.05 1349.28,-164.92"/>
+<path fill="none" stroke="black" d="M451.49,-511.83C423.82,-501.21 379.71,-484.28 345.04,-470.97"/>
+<polygon fill="black" stroke="black" points="346.13,-467.64 335.54,-467.32 343.62,-474.18 346.13,-467.64"/>
</g>
<!-- RoarAudio -->
-<g id="node19" class="node">
+<g id="node17" class="node">
<title>RoarAudio</title>
-<g id="a_node19"><a xlink:href="http://roaraudio.keep-cool.org/" xlink:title="RoarAudio">
-<ellipse fill="lightgrey" stroke="black" cx="766" cy="-144" rx="59.29" ry="18"/>
-<text text-anchor="middle" x="766" y="-140.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
+<g id="a_node17"><a xlink:href="http://roaraudio.keep-cool.org/" xlink:title="RoarAudio">
+<ellipse fill="lightgrey" stroke="black" cx="559" cy="-450" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="559" y="-446.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
</a>
</g>
</g>
<!-- libao->RoarAudio -->
-<g id="edge31" class="edge">
+<g id="edge25" class="edge">
<title>libao->RoarAudio</title>
-<path fill="none" stroke="black" d="M1033.16,-208.87C983.63,-197.03 883.68,-173.13 821.06,-158.16"/>
-<polygon fill="black" stroke="black" points="821.51,-154.67 810.97,-155.75 819.88,-161.48 821.51,-154.67"/>
+<path fill="none" stroke="black" d="M494.78,-507.29C505.73,-497.69 520.25,-484.97 532.71,-474.04"/>
+<polygon fill="black" stroke="black" points="535.33,-476.4 540.54,-467.18 530.72,-471.14 535.33,-476.4"/>
</g>
<!-- RoarAudio->sndio -->
-<g id="edge33" class="edge">
+<g id="edge27" class="edge">
<title>RoarAudio->sndio</title>
-<path fill="none" stroke="black" d="M792.66,-127.76C806.19,-120.57 823.08,-112.41 839,-107 882.12,-92.34 933.42,-82.97 969.28,-77.66"/>
-<polygon fill="black" stroke="black" points="970.03,-81.09 979.43,-76.2 969.04,-74.16 970.03,-81.09"/>
+<path fill="none" stroke="black" d="M571.21,-432.37C587.31,-410.66 616.81,-371.69 644,-340 647.45,-335.98 651.21,-331.81 654.92,-327.8"/>
+<polygon fill="black" stroke="black" points="657.59,-330.07 661.9,-320.39 652.49,-325.28 657.59,-330.07"/>
</g>
<!-- RoarAudio->PulseAudio -->
-<g id="edge34" class="edge">
+<g id="edge28" class="edge">
<title>RoarAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M761.25,-162.08C752.24,-193.94 731.5,-264.42 709,-322 705.45,-331.09 701.11,-340.82 697.06,-349.49"/>
-<polygon fill="black" stroke="black" points="693.8,-348.19 692.65,-358.72 700.12,-351.2 693.8,-348.19"/>
+<path fill="none" stroke="black" d="M602.41,-437.75C612.09,-435.56 622.35,-433.48 632,-432 860.81,-396.78 1135.24,-384.13 1262.99,-379.92"/>
+<polygon fill="black" stroke="black" points="1263.16,-383.42 1273.05,-379.6 1262.94,-376.42 1263.16,-383.42"/>
</g>
<!-- libcanberra -->
-<g id="node20" class="node">
+<g id="node18" class="node">
<title>libcanberra</title>
-<g id="a_node20"><a xlink:href="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" xlink:title="libcanberra">
-<ellipse fill="lightgrey" stroke="black" cx="774" cy="-596" rx="63.89" ry="18"/>
-<text text-anchor="middle" x="774" y="-592.3" font-family="Times,serif" font-size="14.00">libcanberra</text>
+<g id="a_node18"><a xlink:href="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" xlink:title="libcanberra">
+<ellipse fill="lightgrey" stroke="black" cx="1503" cy="-596" rx="63.89" ry="18"/>
+<text text-anchor="middle" x="1503" y="-592.3" font-family="Times,serif" font-size="14.00">libcanberra</text>
</a>
</g>
</g>
-<!-- libcanberra->null -->
-<g id="edge38" class="edge">
-<title>libcanberra->null</title>
-<path fill="none" stroke="red" d="M836.07,-591.83C951,-585.32 1187.51,-568.69 1212,-541 1313.45,-426.28 1256.27,-325.53 1170,-199 1156.35,-178.98 1132.58,-165.05 1113.19,-156.36"/>
-<polygon fill="red" stroke="red" points="1114.37,-153.06 1103.8,-152.39 1111.65,-159.51 1114.37,-153.06"/>
-</g>
<!-- libcanberra->ALSA -->
-<g id="edge36" class="edge">
+<g id="edge30" class="edge">
<title>libcanberra->ALSA</title>
-<path fill="none" stroke="black" d="M828.88,-586.64C864.29,-579.17 909.92,-565.48 944,-541 967.1,-524.41 985.4,-497.27 996.82,-477.12"/>
-<polygon fill="black" stroke="black" points="1000,-478.6 1001.72,-468.14 993.86,-475.24 1000,-478.6"/>
+<path fill="none" stroke="black" d="M1440.19,-592.37C1336.18,-587.15 1133.35,-573.1 1070,-541 1062.13,-537.01 1029.38,-501.1 1006.9,-475.87"/>
+<polygon fill="black" stroke="black" points="1009.27,-473.26 1000.01,-468.1 1004.03,-477.91 1009.27,-473.26"/>
</g>
<!-- libcanberra->PulseAudio -->
-<g id="edge35" class="edge">
+<g id="edge29" class="edge">
<title>libcanberra->PulseAudio</title>
-<path fill="none" stroke="black" d="M711.24,-592.66C673.59,-587.62 628.41,-574.37 604,-541 594.55,-528.09 596.05,-518.89 604,-505 620.13,-476.82 648.31,-494.56 667,-468 679.84,-449.76 683.71,-424.49 684.59,-405.37"/>
-<polygon fill="black" stroke="black" points="688.09,-405.27 684.81,-395.2 681.09,-405.12 688.09,-405.27"/>
+<path fill="none" stroke="black" d="M1501.78,-577.8C1498.56,-545.1 1487.09,-473.57 1447,-432 1430.5,-414.89 1407.46,-402.51 1386.57,-393.95"/>
+<polygon fill="black" stroke="black" points="1387.75,-390.65 1377.16,-390.29 1385.21,-397.17 1387.75,-390.65"/>
</g>
<!-- libcanberra->gstreamer -->
-<g id="edge37" class="edge">
+<g id="edge31" class="edge">
<title>libcanberra->gstreamer</title>
-<path fill="none" stroke="black" d="M710.04,-595C619.64,-593.91 449.7,-587.88 308,-560 285.62,-555.6 261.46,-548.1 241.41,-541.09"/>
-<polygon fill="black" stroke="black" points="242.52,-537.77 231.92,-537.7 240.16,-544.36 242.52,-537.77"/>
+<path fill="none" stroke="black" d="M1523.18,-578.53C1534.79,-569.06 1549.55,-557.01 1562.24,-546.65"/>
+<polygon fill="black" stroke="black" points="1564.7,-549.17 1570.23,-540.13 1560.27,-543.74 1564.7,-549.17"/>
</g>
<!-- OpenAL -->
-<g id="node21" class="node">
+<g id="node19" class="node">
<title>OpenAL</title>
-<g id="a_node21"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL">
-<ellipse fill="lightgrey" stroke="black" cx="1296" cy="-596" rx="47.39" ry="18"/>
-<text text-anchor="middle" x="1296" y="-592.3" font-family="Times,serif" font-size="14.00">OpenAL</text>
+<g id="a_node19"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL">
+<ellipse fill="lightgrey" stroke="black" cx="890" cy="-596" rx="47.39" ry="18"/>
+<text text-anchor="middle" x="890" y="-592.3" font-family="Times,serif" font-size="14.00">OpenAL</text>
</a>
</g>
</g>
-<!-- OpenAL->filesystem -->
-<g id="edge48" class="edge">
-<title>OpenAL->filesystem</title>
-<path fill="none" stroke="black" d="M1339.21,-588.22C1378.21,-581.57 1432.27,-570.86 1451,-560 1469.78,-549.11 1484,-545.71 1484,-524 1484,-524 1484,-524 1484,-413 1484,-305.12 1499.24,-248.62 1416,-180 1391.63,-159.91 1306.08,-167.64 1275,-162 1269.63,-161.03 1264.06,-159.91 1258.5,-158.72"/>
-<polygon fill="black" stroke="black" points="1259.07,-155.26 1248.55,-156.52 1257.56,-162.09 1259.07,-155.26"/>
-</g>
-<!-- OpenAL->null -->
-<g id="edge50" class="edge">
-<title>OpenAL->null</title>
-<path fill="none" stroke="red" d="M1339.05,-588.16C1366.72,-581.29 1400.62,-567.69 1418,-541 1466.63,-466.3 1535.61,-619.84 1313,-253 1291.07,-216.85 1288.88,-200.68 1252,-180 1204.58,-153.4 1183.8,-174.97 1131,-162 1124.69,-160.45 1118.04,-158.42 1111.75,-156.31"/>
-<polygon fill="red" stroke="red" points="1112.84,-152.99 1102.25,-152.98 1110.52,-159.59 1112.84,-152.99"/>
-</g>
<!-- OpenAL->portaudio -->
-<g id="edge46" class="edge">
+<g id="edge38" class="edge">
<title>OpenAL->portaudio</title>
-<path fill="none" stroke="black" d="M1309.22,-578.53C1316.31,-569.7 1325.19,-558.63 1333.1,-548.78"/>
-<polygon fill="black" stroke="black" points="1335.92,-550.86 1339.46,-540.87 1330.47,-546.48 1335.92,-550.86"/>
+<path fill="none" stroke="black" d="M854.22,-583.91C815.36,-571.86 753.05,-552.54 709.73,-539.11"/>
+<polygon fill="black" stroke="black" points="710.56,-535.7 699.98,-536.08 708.49,-542.39 710.56,-535.7"/>
</g>
<!-- OpenAL->ALSA -->
-<g id="edge44" class="edge">
+<g id="edge36" class="edge">
<title>OpenAL->ALSA</title>
-<path fill="none" stroke="black" d="M1284.98,-578.4C1270.6,-558.04 1243.52,-523.92 1212,-505 1164.45,-476.46 1101.73,-462.76 1058.87,-456.34"/>
-<polygon fill="black" stroke="black" points="1059.35,-452.88 1048.96,-454.93 1058.37,-459.81 1059.35,-452.88"/>
+<path fill="none" stroke="black" d="M892.96,-578.02C896.97,-558.81 905.58,-527.3 922,-505 929.9,-494.26 935.75,-495.53 946,-487 950.63,-483.15 955.43,-478.91 960.02,-474.75"/>
+<polygon fill="black" stroke="black" points="962.5,-477.23 967.48,-467.88 957.75,-472.08 962.5,-477.23"/>
</g>
<!-- OpenAL->JACK -->
-<g id="edge47" class="edge">
+<g id="edge39" class="edge">
<title>OpenAL->JACK</title>
-<path fill="none" stroke="black" d="M1249.04,-592.99C1059.5,-584.82 360.04,-553.83 341,-541 270.82,-493.72 255.88,-383.33 252.77,-332.06"/>
-<polygon fill="black" stroke="black" points="256.27,-331.87 252.27,-322.06 249.27,-332.22 256.27,-331.87"/>
+<path fill="none" stroke="black" d="M937.68,-595.7C1030.68,-595.94 1230.94,-590.54 1274,-541 1303.13,-507.48 1225.35,-383.48 1189.26,-329.91"/>
+<polygon fill="black" stroke="black" points="1191.96,-327.66 1183.44,-321.36 1186.17,-331.59 1191.96,-327.66"/>
</g>
<!-- OpenAL->sndio -->
-<g id="edge49" class="edge">
+<g id="edge40" class="edge">
<title>OpenAL->sndio</title>
-<path fill="none" stroke="black" d="M1342.88,-592.47C1458.14,-585.63 1746,-564.48 1746,-524 1746,-524 1746,-524 1746,-143 1746,-73.74 1220.11,-70.88 1059.82,-71.62"/>
-<polygon fill="black" stroke="black" points="1059.78,-68.12 1049.8,-71.67 1059.82,-75.12 1059.78,-68.12"/>
+<path fill="none" stroke="black" d="M843,-593.41C768.09,-589.79 626.89,-578.08 596,-541 585.76,-528.71 590.53,-520.04 596,-505 603.33,-484.84 616.76,-486.85 627,-468 651.22,-423.4 665.42,-365.43 672.17,-332"/>
+<polygon fill="black" stroke="black" points="675.63,-332.54 674.1,-322.06 668.75,-331.21 675.63,-332.54"/>
</g>
<!-- OpenAL->PulseAudio -->
-<g id="edge43" class="edge">
+<g id="edge35" class="edge">
<title>OpenAL->PulseAudio</title>
-<path fill="none" stroke="black" d="M1248.98,-593.55C1120.59,-589.18 770.98,-574.3 732,-541 687.33,-502.84 717.96,-468.61 699,-413 698.04,-410.18 696.95,-407.28 695.82,-404.4"/>
-<polygon fill="black" stroke="black" points="698.93,-402.77 691.85,-394.89 692.47,-405.46 698.93,-402.77"/>
+<path fill="none" stroke="black" d="M937.35,-594.04C1065.69,-590.93 1412.8,-579.04 1446,-541 1507.34,-470.71 1368.26,-519.14 1331,-468 1317.88,-450 1320.6,-424.18 1325.59,-404.8"/>
+<polygon fill="black" stroke="black" points="1328.99,-405.64 1328.42,-395.07 1322.27,-403.69 1328.99,-405.64"/>
</g>
<!-- SoundIO -->
-<g id="node22" class="node">
+<g id="node20" class="node">
<title>SoundIO</title>
-<g id="a_node22"><a xlink:href="http://libsound.io/" xlink:title="SoundIO">
-<ellipse fill="lightgrey" stroke="black" cx="1042" cy="-523" rx="50.89" ry="18"/>
-<text text-anchor="middle" x="1042" y="-519.3" font-family="Times,serif" font-size="14.00">SoundIO</text>
+<g id="a_node20"><a xlink:href="http://libsound.io/" xlink:title="SoundIO">
+<ellipse fill="lightgrey" stroke="black" cx="786" cy="-523" rx="50.89" ry="18"/>
+<text text-anchor="middle" x="786" y="-519.3" font-family="Times,serif" font-size="14.00">SoundIO</text>
</a>
</g>
</g>
<!-- OpenAL->SoundIO -->
-<g id="edge45" class="edge">
+<g id="edge37" class="edge">
<title>OpenAL->SoundIO</title>
-<path fill="none" stroke="black" d="M1258.79,-584.7C1219.73,-573.87 1156.53,-556.31 1102,-541 1098.18,-539.93 1094.23,-538.81 1090.25,-537.69"/>
-<polygon fill="black" stroke="black" points="1090.98,-534.26 1080.4,-534.91 1089.07,-541 1090.98,-534.26"/>
-</g>
-<!-- SoundIO->null -->
-<g id="edge54" class="edge">
-<title>SoundIO->null</title>
-<path fill="none" stroke="red" d="M1064.91,-506.81C1094.35,-485.76 1144.02,-444.63 1164,-395 1196.65,-313.89 1189.38,-275.48 1147,-199 1138.02,-182.79 1122.07,-169.43 1108.22,-160.05"/>
-<polygon fill="red" stroke="red" points="1109.83,-156.92 1099.52,-154.47 1106.05,-162.82 1109.83,-156.92"/>
+<path fill="none" stroke="black" d="M880.45,-578.09C876.09,-571.49 870.46,-564.26 864,-559 854.47,-551.24 842.94,-544.83 831.71,-539.72"/>
+<polygon fill="black" stroke="black" points="832.96,-536.45 822.39,-535.73 830.21,-542.89 832.96,-536.45"/>
</g>
<!-- SoundIO->ALSA -->
-<g id="edge53" class="edge">
+<g id="edge43" class="edge">
<title>SoundIO->ALSA</title>
-<path fill="none" stroke="black" d="M1034.42,-505.17C1030.69,-496.9 1026.1,-486.72 1021.92,-477.44"/>
-<polygon fill="black" stroke="black" points="1025.05,-475.88 1017.75,-468.2 1018.67,-478.75 1025.05,-475.88"/>
+<path fill="none" stroke="black" d="M823.66,-510.8C845.01,-504.25 872.15,-495.6 896,-487 913.14,-480.82 931.87,-473.35 947.71,-466.82"/>
+<polygon fill="black" stroke="black" points="949.26,-469.97 957.15,-462.9 946.57,-463.5 949.26,-469.97"/>
</g>
<!-- SoundIO->JACK -->
-<g id="edge51" class="edge">
+<g id="edge41" class="edge">
<title>SoundIO->JACK</title>
-<path fill="none" stroke="black" d="M998.72,-513.5C981.72,-510.42 962,-507.17 944,-505 824.58,-490.59 512.6,-519.71 404,-468 387.18,-459.99 309.64,-371.78 272.26,-328.57"/>
-<polygon fill="black" stroke="black" points="274.75,-326.1 265.56,-320.81 269.45,-330.67 274.75,-326.1"/>
+<path fill="none" stroke="black" d="M801.65,-505.55C820.59,-486.27 854.06,-454.14 887,-432 968.22,-377.42 1076.73,-336.63 1133.58,-317.34"/>
+<polygon fill="black" stroke="black" points="1134.87,-320.6 1143.24,-314.1 1132.64,-313.96 1134.87,-320.6"/>
</g>
<!-- SoundIO->PulseAudio -->
-<g id="edge52" class="edge">
+<g id="edge42" class="edge">
<title>SoundIO->PulseAudio</title>
-<path fill="none" stroke="black" d="M1009.6,-508.97C945.27,-483.09 801.38,-425.21 728.34,-395.84"/>
-<polygon fill="black" stroke="black" points="729.53,-392.54 718.95,-392.06 726.92,-399.04 729.53,-392.54"/>
+<path fill="none" stroke="black" d="M816.25,-508.32C837.69,-498.17 866.83,-483.47 891,-468 912.86,-454 913.08,-442.1 937,-432 994.62,-407.67 1166.94,-390.92 1264.9,-383.08"/>
+<polygon fill="black" stroke="black" points="1265.32,-386.55 1275.02,-382.28 1264.77,-379.58 1265.32,-386.55"/>
</g>
<!-- RtAudio -->
-<g id="node23" class="node">
+<g id="node21" class="node">
<title>RtAudio</title>
-<g id="a_node23"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio">
-<ellipse fill="lightgrey" stroke="black" cx="398" cy="-523" rx="48.19" ry="18"/>
-<text text-anchor="middle" x="398" y="-519.3" font-family="Times,serif" font-size="14.00">RtAudio</text>
+<g id="a_node21"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio">
+<ellipse fill="lightgrey" stroke="black" cx="1217" cy="-523" rx="48.19" ry="18"/>
+<text text-anchor="middle" x="1217" y="-519.3" font-family="Times,serif" font-size="14.00">RtAudio</text>
</a>
</g>
</g>
<!-- RtAudio->ALSA -->
-<g id="edge55" class="edge">
+<g id="edge44" class="edge">
<title>RtAudio->ALSA</title>
-<path fill="none" stroke="black" d="M443.5,-516.72C555.77,-503.7 845.24,-470.11 961.05,-456.68"/>
-<polygon fill="black" stroke="black" points="961.52,-460.15 971.05,-455.52 960.71,-453.19 961.52,-460.15"/>
+<path fill="none" stroke="black" d="M1180.9,-510.93C1173.98,-508.89 1166.78,-506.83 1160,-505 1127.33,-496.16 1118.43,-496.7 1086,-487 1065.04,-480.73 1042.04,-472.63 1023.29,-465.71"/>
+<polygon fill="black" stroke="black" points="1024.5,-462.42 1013.91,-462.2 1022.05,-468.98 1024.5,-462.42"/>
</g>
<!-- RtAudio->JACK -->
-<g id="edge56" class="edge">
+<g id="edge45" class="edge">
<title>RtAudio->JACK</title>
-<path fill="none" stroke="black" d="M353.63,-515.87C283,-505.66 151.55,-484.65 138,-468 102.1,-423.87 104.19,-385.75 138,-340 153.83,-318.58 182.53,-309.85 207.17,-306.47"/>
-<polygon fill="black" stroke="black" points="207.89,-309.91 217.44,-305.32 207.11,-302.95 207.89,-309.91"/>
+<path fill="none" stroke="black" d="M1213.47,-504.97C1205.68,-467.42 1186.98,-377.23 1177.58,-331.93"/>
+<polygon fill="black" stroke="black" points="1180.97,-331.03 1175.51,-321.95 1174.12,-332.45 1180.97,-331.03"/>
</g>
<!-- RtAudio->PulseAudio -->
-<g id="edge57" class="edge">
+<g id="edge46" class="edge">
<title>RtAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M417.95,-506.17C448.18,-482.87 508.1,-439.25 565,-413 584.32,-404.09 606.46,-396.84 626.35,-391.3"/>
-<polygon fill="black" stroke="black" points="627.48,-394.62 636.22,-388.64 625.66,-387.87 627.48,-394.62"/>
+<path fill="none" stroke="black" d="M1228.96,-505.29C1244.76,-483.49 1273.79,-444.42 1301,-413 1304.23,-409.27 1307.74,-405.43 1311.25,-401.72"/>
+<polygon fill="black" stroke="black" points="1313.92,-404 1318.34,-394.37 1308.88,-399.14 1313.92,-404"/>
</g>
<!-- JUCE -->
-<g id="node24" class="node">
+<g id="node22" class="node">
<title>JUCE</title>
-<ellipse fill="lightgrey" stroke="black" cx="649" cy="-523" rx="36" ry="18"/>
-<text text-anchor="middle" x="649" y="-519.3" font-family="Times,serif" font-size="14.00">JUCE</text>
+<ellipse fill="lightgrey" stroke="black" cx="1115" cy="-523" rx="36" ry="18"/>
+<text text-anchor="middle" x="1115" y="-519.3" font-family="Times,serif" font-size="14.00">JUCE</text>
</g>
<!-- JUCE->ALSA -->
-<g id="edge58" class="edge">
+<g id="edge47" class="edge">
<title>JUCE->ALSA</title>
-<path fill="none" stroke="black" d="M681.7,-515.22C696.98,-512.08 715.41,-508.31 732,-505 812.8,-488.88 906.93,-470.73 962.32,-460.11"/>
-<polygon fill="black" stroke="black" points="963.04,-463.53 972.2,-458.22 961.73,-456.66 963.04,-463.53"/>
+<path fill="none" stroke="black" d="M1091.76,-509.31C1071.35,-498.16 1041.41,-481.81 1018.42,-469.25"/>
+<polygon fill="black" stroke="black" points="1019.82,-466.03 1009.36,-464.31 1016.46,-472.17 1019.82,-466.03"/>
</g>
<!-- JUCE->JACK -->
-<g id="edge59" class="edge">
+<g id="edge48" class="edge">
<title>JUCE->JACK</title>
-<path fill="none" stroke="black" d="M613.13,-521.18C557.47,-518.61 448.16,-508.36 366,-468 301.76,-436.45 297.31,-405.83 267,-341 265.57,-337.93 264.12,-334.69 262.72,-331.46"/>
-<polygon fill="black" stroke="black" points="265.84,-329.84 258.73,-321.98 259.38,-332.55 265.84,-329.84"/>
+<path fill="none" stroke="black" d="M1119.47,-504.97C1129.36,-467.34 1153.13,-376.85 1165,-331.64"/>
+<polygon fill="black" stroke="black" points="1168.39,-332.51 1167.55,-321.95 1161.62,-330.73 1168.39,-332.51"/>
</g>
<!-- SDL2 -->
-<g id="node25" class="node">
+<g id="node23" class="node">
<title>SDL2</title>
-<g id="a_node25"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL-2.0">
-<ellipse fill="lightgrey" stroke="black" cx="1572" cy="-523" rx="59.59" ry="18"/>
-<text text-anchor="middle" x="1572" y="-519.3" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
+<g id="a_node23"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL-2.0">
+<ellipse fill="lightgrey" stroke="black" cx="101" cy="-523" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="101" y="-519.3" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
</a>
</g>
</g>
-<!-- SDL2->filesystem -->
-<g id="edge66" class="edge">
-<title>SDL2->filesystem</title>
-<path fill="none" stroke="black" d="M1567.46,-504.92C1564.07,-490.62 1560,-469.63 1560,-451 1560,-451 1560,-451 1560,-340 1560,-260.5 1545.74,-224.72 1480,-180 1442.19,-154.28 1320.15,-169.27 1275,-162 1269.31,-161.08 1263.41,-159.97 1257.54,-158.75"/>
-<polygon fill="black" stroke="black" points="1258.25,-155.32 1247.74,-156.62 1256.77,-162.16 1258.25,-155.32"/>
-</g>
-<!-- SDL2->null -->
-<g id="edge69" class="edge">
-<title>SDL2->null</title>
-<path fill="none" stroke="red" d="M1562.52,-505.12C1526.59,-441.78 1397.27,-219.76 1328,-180 1289.87,-158.11 1173.97,-171.27 1131,-162 1124.65,-160.63 1117.98,-158.68 1111.68,-156.59"/>
-<polygon fill="red" stroke="red" points="1112.78,-153.26 1102.19,-153.24 1110.46,-159.87 1112.78,-153.26"/>
-</g>
<!-- SDL2->ALSA -->
-<g id="edge65" class="edge">
+<g id="edge52" class="edge">
<title>SDL2->ALSA</title>
-<path fill="none" stroke="black" d="M1518.47,-514.81C1463.25,-507.43 1374.63,-495.69 1298,-486 1214.27,-475.41 1116.75,-463.69 1059.38,-456.85"/>
-<polygon fill="black" stroke="black" points="1059.49,-453.34 1049.14,-455.64 1058.66,-460.29 1059.49,-453.34"/>
+<path fill="none" stroke="black" d="M157.98,-517.42C320.37,-504.38 783.61,-467.18 935.85,-454.95"/>
+<polygon fill="black" stroke="black" points="936.58,-458.4 946.27,-454.11 936.02,-451.42 936.58,-458.4"/>
</g>
<!-- SDL2->JACK -->
-<g id="edge67" class="edge">
+<g id="edge53" class="edge">
<title>SDL2->JACK</title>
-<path fill="none" stroke="black" d="M1517.92,-515.13C1488.43,-511.61 1451.26,-507.54 1418,-505 1225.72,-490.3 735.99,-522.47 551,-468 459.09,-440.94 449.63,-403.92 365,-359 339.12,-345.26 309.18,-331.03 286.62,-320.62"/>
-<polygon fill="black" stroke="black" points="287.98,-317.4 277.44,-316.41 285.07,-323.76 287.98,-317.4"/>
+<path fill="none" stroke="black" d="M96.03,-504.81C91.32,-484.49 87.44,-451.06 106,-432 178.59,-357.48 935.39,-316.34 1127.73,-307.04"/>
+<polygon fill="black" stroke="black" points="1127.95,-310.54 1137.77,-306.56 1127.61,-303.54 1127.95,-310.54"/>
</g>
<!-- SDL2->sndio -->
-<g id="edge71" class="edge">
+<g id="edge56" class="edge">
<title>SDL2->sndio</title>
-<path fill="none" stroke="black" d="M1626.53,-515.31C1664.37,-507.27 1708,-489.62 1708,-451 1708,-451 1708,-451 1708,-143 1708,-77.66 1214.88,-72.03 1059.98,-71.87"/>
-<polygon fill="black" stroke="black" points="1059.85,-68.37 1049.85,-71.87 1059.85,-75.37 1059.85,-68.37"/>
+<path fill="none" stroke="black" d="M77.28,-506.37C71.15,-501.02 65.34,-494.48 62,-487 52.04,-464.68 46.56,-450.95 62,-432 134.24,-343.32 501.19,-314.69 631.23,-307.25"/>
+<polygon fill="black" stroke="black" points="631.47,-310.74 641.26,-306.69 631.08,-303.75 631.47,-310.74"/>
</g>
<!-- SDL2->PulseAudio -->
-<g id="edge70" class="edge">
+<g id="edge55" class="edge">
<title>SDL2->PulseAudio</title>
-<path fill="none" stroke="black" d="M1522.46,-512.82C1430.89,-495.96 1228.87,-459.29 1058,-432 950.03,-414.76 824.13,-397.08 749.41,-386.84"/>
-<polygon fill="black" stroke="black" points="749.59,-383.33 739.21,-385.44 748.64,-390.27 749.59,-383.33"/>
+<path fill="none" stroke="black" d="M101.67,-504.77C103.51,-483.76 110.07,-448.97 133,-432 155.81,-415.12 1006.43,-387.97 1262.68,-380.17"/>
+<polygon fill="black" stroke="black" points="1263.1,-383.65 1272.99,-379.85 1262.89,-376.66 1263.1,-383.65"/>
</g>
<!-- SDL2->NAS -->
-<g id="edge68" class="edge">
+<g id="edge54" class="edge">
<title>SDL2->NAS</title>
-<path fill="none" stroke="black" d="M1598.4,-506.58C1616.03,-494.1 1636,-474.73 1636,-451 1636,-451 1636,-451 1636,-340 1636,-259.68 1613.99,-231.06 1552,-180 1543.67,-173.14 1534.02,-167.62 1523.91,-163.18"/>
-<polygon fill="black" stroke="black" points="1525.11,-159.89 1514.53,-159.41 1522.5,-166.39 1525.11,-159.89"/>
+<path fill="none" stroke="black" d="M137.11,-508.65C165.98,-497.97 206.88,-482.85 239.55,-470.77"/>
+<polygon fill="black" stroke="black" points="240.79,-474.04 248.96,-467.29 238.37,-467.47 240.79,-474.04"/>
</g>
<!-- phonon -->
-<g id="node26" class="node">
+<g id="node24" class="node">
<title>phonon</title>
-<ellipse fill="lightgrey" stroke="black" cx="284" cy="-596" rx="44.69" ry="18"/>
-<text text-anchor="middle" x="284" y="-592.3" font-family="Times,serif" font-size="14.00">phonon</text>
+<ellipse fill="lightgrey" stroke="black" cx="1697" cy="-596" rx="44.69" ry="18"/>
+<text text-anchor="middle" x="1697" y="-592.3" font-family="Times,serif" font-size="14.00">phonon</text>
</g>
<!-- phonon->PulseAudio -->
-<g id="edge77" class="edge">
+<g id="edge62" class="edge">
<title>phonon->PulseAudio</title>
-<path fill="none" stroke="black" d="M291.62,-578.03C301.03,-558.54 318.56,-526.49 341,-505 418.12,-431.11 541.97,-399.49 617.85,-386.5"/>
-<polygon fill="black" stroke="black" points="618.48,-389.94 627.77,-384.86 617.33,-383.03 618.48,-389.94"/>
+<path fill="none" stroke="black" d="M1713.03,-579.15C1729.95,-560.44 1752.1,-528.86 1736,-505 1697.75,-448.32 1500.89,-406.61 1397.93,-388.29"/>
+<polygon fill="black" stroke="black" points="1398.42,-384.83 1387.97,-386.54 1397.21,-391.72 1398.42,-384.83"/>
</g>
<!-- phonon->gstreamer -->
-<g id="edge75" class="edge">
+<g id="edge60" class="edge">
<title>phonon->gstreamer</title>
-<path fill="none" stroke="black" d="M257.81,-581.33C247.68,-575.44 236.31,-568.05 227,-560 223.03,-556.56 219.15,-552.57 215.57,-548.51"/>
-<polygon fill="black" stroke="black" points="218.21,-546.21 209.11,-540.78 212.84,-550.7 218.21,-546.21"/>
+<path fill="none" stroke="black" d="M1674.83,-580.29C1659.61,-570.19 1639.16,-556.62 1622.16,-545.34"/>
+<polygon fill="black" stroke="black" points="1623.89,-542.29 1613.63,-539.68 1620.02,-548.12 1623.89,-542.29"/>
</g>
<!-- VLC -->
-<g id="node27" class="node">
+<g id="node25" class="node">
<title>VLC</title>
-<g id="a_node27"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC">
-<ellipse fill="lightgrey" stroke="black" cx="771" cy="-523" rx="29.8" ry="18"/>
-<text text-anchor="middle" x="771" y="-519.3" font-family="Times,serif" font-size="14.00">VLC</text>
+<g id="a_node25"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC">
+<ellipse fill="lightgrey" stroke="black" cx="1697" cy="-523" rx="29.8" ry="18"/>
+<text text-anchor="middle" x="1697" y="-519.3" font-family="Times,serif" font-size="14.00">VLC</text>
</a>
</g>
</g>
<!-- phonon->VLC -->
-<g id="edge76" class="edge">
+<g id="edge61" class="edge">
<title>phonon->VLC</title>
-<path fill="none" stroke="black" d="M326.98,-590.58C401.84,-582.59 560.89,-564.41 694,-541 706.96,-538.72 721.04,-535.76 733.57,-532.94"/>
-<polygon fill="black" stroke="black" points="734.7,-536.28 743.67,-530.64 733.15,-529.45 734.7,-536.28"/>
-</g>
-<!-- VLC->filesystem -->
-<g id="edge85" class="edge">
-<title>VLC->filesystem</title>
-<path fill="none" stroke="black" d="M793.73,-510.9C798.98,-508.68 804.6,-506.55 810,-505 917.11,-474.25 953.59,-506.95 1058,-468 1189.18,-419.07 1390.22,-207.44 1402,-181 1413.61,-154.93 1303.04,-167.29 1275,-162 1269.64,-160.99 1264.07,-159.84 1258.51,-158.64"/>
-<polygon fill="black" stroke="black" points="1259.1,-155.18 1248.57,-156.42 1257.57,-162.02 1259.1,-155.18"/>
-</g>
-<!-- VLC->null -->
-<g id="edge83" class="edge">
-<title>VLC->null</title>
-<path fill="none" stroke="red" d="M794.77,-512.01C813.11,-503.1 837.69,-488.31 852,-468 900.11,-399.7 852.97,-355.72 899,-286 920.29,-253.75 1013.24,-190.14 1057.89,-160.67"/>
-<polygon fill="red" stroke="red" points="1059.95,-163.51 1066.39,-155.09 1056.11,-157.65 1059.95,-163.51"/>
+<path fill="none" stroke="black" d="M1697,-577.81C1697,-569.79 1697,-560.05 1697,-551.07"/>
+<polygon fill="black" stroke="black" points="1700.5,-551.03 1697,-541.03 1693.5,-551.03 1700.5,-551.03"/>
</g>
<!-- VLC->ALSA -->
-<g id="edge84" class="edge">
+<g id="edge68" class="edge">
<title>VLC->ALSA</title>
-<path fill="none" stroke="black" d="M793.87,-511.36C799.11,-509.11 804.7,-506.86 810,-505 861.94,-486.78 923.25,-471.05 964.17,-461.34"/>
-<polygon fill="black" stroke="black" points="965.18,-464.7 974.11,-459 963.58,-457.88 965.18,-464.7"/>
+<path fill="none" stroke="black" d="M1674.76,-510.8C1669.39,-508.53 1663.59,-506.4 1658,-505 1597.96,-489.95 1178.87,-462.98 1034.07,-454"/>
+<polygon fill="black" stroke="black" points="1033.92,-450.48 1023.73,-453.36 1033.49,-457.47 1033.92,-450.48"/>
</g>
<!-- VLC->JACK -->
-<g id="edge86" class="edge">
+<g id="edge69" class="edge">
<title>VLC->JACK</title>
-<path fill="none" stroke="black" d="M743.7,-515.24C729.03,-511.8 710.61,-507.76 694,-505 549.29,-480.93 506.99,-508.55 366,-468 293.98,-447.29 253.91,-458.43 214,-395 200.98,-374.31 204.18,-362.39 214,-340 216.3,-334.76 219.81,-329.96 223.78,-325.71"/>
-<polygon fill="black" stroke="black" points="226.39,-328.06 231.28,-318.66 221.6,-322.96 226.39,-328.06"/>
+<path fill="none" stroke="black" d="M1720.21,-511.57C1730.05,-505.84 1740.5,-497.69 1746,-487 1757.19,-465.26 1759.47,-452.4 1746,-432 1700.46,-363.04 1654.52,-381.47 1575,-359 1425.32,-316.7 1379.72,-351.48 1227,-322 1221.22,-320.88 1215.18,-319.38 1209.32,-317.73"/>
+<polygon fill="black" stroke="black" points="1210.26,-314.36 1199.68,-314.85 1208.26,-321.06 1210.26,-314.36"/>
</g>
<!-- VLC->sndio -->
-<g id="edge88" class="edge">
+<g id="edge71" class="edge">
<title>VLC->sndio</title>
-<path fill="none" stroke="black" d="M777.73,-505.32C793.69,-466.21 835.79,-365.85 879,-286 917.32,-215.18 969.98,-136.06 996.79,-96.84"/>
-<polygon fill="black" stroke="black" points="999.95,-98.42 1002.73,-88.2 994.18,-94.46 999.95,-98.42"/>
+<path fill="none" stroke="black" d="M1682.53,-506.69C1649.32,-472.73 1563.52,-391.55 1473,-359 1402.45,-333.63 881.8,-312.54 722.91,-306.65"/>
+<polygon fill="black" stroke="black" points="722.66,-303.13 712.54,-306.26 722.41,-310.13 722.66,-303.13"/>
</g>
<!-- VLC->PulseAudio -->
-<g id="edge87" class="edge">
+<g id="edge70" class="edge">
<title>VLC->PulseAudio</title>
-<path fill="none" stroke="black" d="M743.59,-515.73C685.28,-502.34 554.02,-471.85 551,-468 541.13,-455.41 542.06,-445.27 551,-432 566.43,-409.09 593.43,-395.89 619.09,-388.3"/>
-<polygon fill="black" stroke="black" points="620.1,-391.65 628.83,-385.65 618.26,-384.89 620.1,-391.65"/>
+<path fill="none" stroke="black" d="M1674.2,-511.14C1668.96,-508.91 1663.35,-506.71 1658,-505 1621.22,-493.22 1606.86,-505.57 1573,-487 1530.82,-463.87 1537.66,-433.2 1494,-413 1465.32,-399.73 1431.35,-391.38 1402.2,-386.17"/>
+<polygon fill="black" stroke="black" points="1402.55,-382.68 1392.1,-384.46 1401.38,-389.58 1402.55,-382.68"/>
</g>
<!-- ClanLib -->
-<g id="node28" class="node">
+<g id="node26" class="node">
<title>ClanLib</title>
-<g id="a_node28"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib">
-<ellipse fill="lightgrey" stroke="black" cx="1157" cy="-523" rx="46.29" ry="18"/>
-<text text-anchor="middle" x="1157" y="-519.3" font-family="Times,serif" font-size="14.00">ClanLib</text>
+<g id="a_node26"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib">
+<ellipse fill="lightgrey" stroke="black" cx="977" cy="-523" rx="46.29" ry="18"/>
+<text text-anchor="middle" x="977" y="-519.3" font-family="Times,serif" font-size="14.00">ClanLib</text>
</a>
</g>
</g>
<!-- ClanLib->ALSA -->
-<g id="edge78" class="edge">
+<g id="edge63" class="edge">
<title>ClanLib->ALSA</title>
-<path fill="none" stroke="black" d="M1129,-508.48C1105.11,-496.94 1070.65,-480.29 1044.95,-467.88"/>
-<polygon fill="black" stroke="black" points="1046.45,-464.72 1035.92,-463.52 1043.4,-471.02 1046.45,-464.72"/>
+<path fill="none" stroke="black" d="M978.94,-504.81C979.84,-496.79 980.94,-487.05 981.95,-478.07"/>
+<polygon fill="black" stroke="black" points="985.44,-478.36 983.08,-468.03 978.48,-477.57 985.44,-478.36"/>
</g>
<!-- allegro -->
-<g id="node29" class="node">
+<g id="node27" class="node">
<title>allegro</title>
-<g id="a_node29"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro">
-<ellipse fill="lightgrey" stroke="black" cx="1296" cy="-669" rx="42.79" ry="18"/>
-<text text-anchor="middle" x="1296" y="-665.3" font-family="Times,serif" font-size="14.00">allegro</text>
+<g id="a_node27"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro">
+<ellipse fill="lightgrey" stroke="black" cx="890" cy="-669" rx="42.79" ry="18"/>
+<text text-anchor="middle" x="890" y="-665.3" font-family="Times,serif" font-size="14.00">allegro</text>
</a>
</g>
</g>
<!-- allegro->PulseAudio -->
-<g id="edge80" class="edge">
+<g id="edge65" class="edge">
<title>allegro->PulseAudio</title>
-<path fill="none" stroke="black" d="M1252.94,-667.79C1036.31,-666.47 76,-657.23 76,-597 76,-597 76,-597 76,-486 76,-409.26 166.13,-452.78 240,-432 367.81,-396.04 522.95,-384.03 611.9,-380.01"/>
-<polygon fill="black" stroke="black" points="612.31,-383.5 622.15,-379.57 612.01,-376.51 612.31,-383.5"/>
+<path fill="none" stroke="black" d="M932.74,-666.96C1113.76,-662.29 1808,-641.48 1808,-597 1808,-597 1808,-597 1808,-449 1808,-408.89 1538.56,-388.88 1406.39,-381.48"/>
+<polygon fill="black" stroke="black" points="1406.53,-377.98 1396.35,-380.93 1406.14,-384.97 1406.53,-377.98"/>
</g>
<!-- allegro->OpenAL -->
-<g id="edge79" class="edge">
+<g id="edge64" class="edge">
<title>allegro->OpenAL</title>
-<path fill="none" stroke="black" d="M1296,-650.81C1296,-642.79 1296,-633.05 1296,-624.07"/>
-<polygon fill="black" stroke="black" points="1299.5,-624.03 1296,-614.03 1292.5,-624.03 1299.5,-624.03"/>
+<path fill="none" stroke="black" d="M890,-650.81C890,-642.79 890,-633.05 890,-624.07"/>
+<polygon fill="black" stroke="black" points="893.5,-624.03 890,-614.03 886.5,-624.03 893.5,-624.03"/>
</g>
<!-- allegro->SDL2 -->
-<g id="edge81" class="edge">
+<g id="edge66" class="edge">
<title>allegro->SDL2</title>
-<path fill="none" stroke="black" d="M1321.97,-654.45C1371.03,-628.85 1477.54,-573.29 1534.42,-543.61"/>
-<polygon fill="black" stroke="black" points="1536.19,-546.63 1543.44,-538.9 1532.95,-540.43 1536.19,-546.63"/>
+<path fill="none" stroke="black" d="M848.73,-663.69C776.1,-655.81 620.79,-637.71 491,-614 369.89,-591.88 229.62,-557.27 154.72,-538.05"/>
+<polygon fill="black" stroke="black" points="155.15,-534.55 144.59,-535.45 153.4,-541.33 155.15,-534.55"/>
</g>
<!-- telepathy -->
-<g id="node30" class="node">
+<g id="node28" class="node">
<title>telepathy</title>
-<ellipse fill="lightgrey" stroke="black" cx="645" cy="-304" rx="54.69" ry="18"/>
-<text text-anchor="middle" x="645" y="-300.3" font-family="Times,serif" font-size="14.00">telepathy</text>
+<ellipse fill="lightgrey" stroke="black" cx="1831" cy="-304" rx="54.69" ry="18"/>
+<text text-anchor="middle" x="1831" y="-300.3" font-family="Times,serif" font-size="14.00">telepathy</text>
</g>
<!-- telepathy->phone modem -->
-<g id="edge82" class="edge">
+<g id="edge67" class="edge">
<title>telepathy->phone modem</title>
-<path fill="none" stroke="black" d="M637.31,-285.8C632,-273.93 624.85,-257.93 618.82,-244.45"/>
-<polygon fill="black" stroke="black" points="621.96,-242.88 614.68,-235.18 615.56,-245.73 621.96,-242.88"/>
-<text text-anchor="middle" x="633" y="-256.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
+<path fill="none" stroke="black" d="M1823.71,-285.8C1818.69,-273.93 1811.91,-257.93 1806.2,-244.45"/>
+<polygon fill="black" stroke="black" points="1809.4,-243.02 1802.27,-235.18 1802.95,-245.75 1809.4,-243.02"/>
+<text text-anchor="middle" x="1819" y="-256.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
</g>
<!-- pcaudiolib -->
-<g id="node31" class="node">
+<g id="node29" class="node">
<title>pcaudiolib</title>
-<g id="a_node31"><a xlink:href="https://github.com/espeak-ng/pcaudiolib" xlink:title="pcaudiolib">
-<ellipse fill="lightgrey" stroke="black" cx="877" cy="-523" rx="58.49" ry="18"/>
-<text text-anchor="middle" x="877" y="-519.3" font-family="Times,serif" font-size="14.00">pcaudiolib</text>
+<g id="a_node29"><a xlink:href="https://github.com/espeak-ng/pcaudiolib" xlink:title="pcaudiolib">
+<ellipse fill="lightgrey" stroke="black" cx="1379" cy="-523" rx="58.49" ry="18"/>
+<text text-anchor="middle" x="1379" y="-519.3" font-family="Times,serif" font-size="14.00">pcaudiolib</text>
</a>
</g>
</g>
<!-- pcaudiolib->ALSA -->
-<g id="edge89" class="edge">
+<g id="edge72" class="edge">
<title>pcaudiolib->ALSA</title>
-<path fill="none" stroke="black" d="M904.88,-507.12C925.68,-496.02 954.18,-480.8 976.26,-469.01"/>
-<polygon fill="black" stroke="black" points="978.12,-471.99 985.29,-464.19 974.82,-465.81 978.12,-471.99"/>
+<path fill="none" stroke="black" d="M1329.9,-513.15C1253.95,-499.46 1108.88,-473.32 1033.37,-459.72"/>
+<polygon fill="black" stroke="black" points="1033.66,-456.21 1023.19,-457.88 1032.42,-463.1 1033.66,-456.21"/>
</g>
<!-- pcaudiolib->PulseAudio -->
-<g id="edge90" class="edge">
+<g id="edge73" class="edge">
<title>pcaudiolib->PulseAudio</title>
-<path fill="none" stroke="black" d="M847.33,-507.21C828.83,-497.33 805.01,-483.35 786,-468 760.06,-447.06 760.23,-434.79 735,-413 729.59,-408.33 723.55,-403.73 717.57,-399.47"/>
-<polygon fill="black" stroke="black" points="719.16,-396.31 708.94,-393.51 715.18,-402.07 719.16,-396.31"/>
+<path fill="none" stroke="black" d="M1344.07,-508.26C1326.89,-499.51 1307.81,-486.33 1298,-468 1286.59,-446.69 1299.5,-421.08 1313.1,-402.64"/>
+<polygon fill="black" stroke="black" points="1315.9,-404.74 1319.31,-394.72 1310.39,-400.43 1315.9,-404.74"/>
</g>
</g>
</svg>
diff --git a/images/linux-audio-output-obsolete.txt b/images/linux-audio-output-obsolete.txt
@@ -4,3 +4,5 @@ ESD
SDL1
OSS
asihpi
+null
+filesystem
diff --git a/images/linux-audio-output.dot b/images/linux-audio-output.dot
@@ -7,8 +7,6 @@ digraph "Linux Audio Output APIs (available code)" {
"sound card" [ shape=box fillcolor=cyan ];
"phone modem" [ shape=box fillcolor=cyan ];
"Bluetooth card" [ shape=box fillcolor=cyan ];
- filesystem [ shape=octagon fillcolor=yellow ];
- null [ shape=diamond fillcolor=red ];
portaudio [ URL="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" ];
portaudio -> ALSA;
@@ -23,13 +21,11 @@ digraph "Linux Audio Output APIs (available code)" {
// https://rudd-o.com/linux-and-free-software/how-pulseaudio-works
PulseAudio [ URL="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" ];
PulseAudio -> ALSA;
- PulseAudio -> OSS [ dir=both ];
- PulseAudio -> null [ color=red ];
PulseAudio -> "sound card" [ color=green ];
+ PulseAudio -> OSS [ dir=both ];
PulseAudio -> JACK;
PulseAudio -> bluez;
PulseAudio -> ofono;
- PulseAudio -> sox;
"X11 bell" -> PulseAudio;
PipeWire [ URL="http://pipewire.org/" ];
@@ -47,21 +43,17 @@ digraph "Linux Audio Output APIs (available code)" {
bluez -> "Bluetooth card" [ color=green ];
sox [ URL="http://sox.sourceforge.net/Docs/Features" ];
- sox -> filesystem;
- sox -> null [ color=red ];
sox -> libao;
- sox -> PulseAudio;
+ sox -> PulseAudio [ dir=both ];
sox -> ALSA;
sox -> sndio;
libao [ URL="https://www.xiph.org/ao/" ];
- libao -> filesystem;
libao -> OSS;
libao -> ALSA;
libao -> aRts;
libao -> PulseAudio;
libao -> ESD;
- libao -> null [ color=red ];
libao -> NAS;
libao -> RoarAudio;
libao -> sndio;
@@ -82,12 +74,10 @@ digraph "Linux Audio Output APIs (available code)" {
libcanberra -> OSS;
libcanberra -> ALSA;
libcanberra -> gstreamer;
- libcanberra -> null [ color=red ];
sndio [ URL="http://www.sndio.org/" ];
- sndio -> ALSA;
+ sndio -> ALSA [ dir=both ];
PulseAudio -> sndio;
- ALSA -> sndio;
gstreamer -> sndio;
OpenAL [ URL="https://www.openal-soft.org/" ];
@@ -97,15 +87,12 @@ digraph "Linux Audio Output APIs (available code)" {
OpenAL -> SoundIO;
OpenAL -> portaudio;
OpenAL -> JACK;
- OpenAL -> filesystem;
OpenAL -> sndio;
- OpenAL -> null [ color=red ];
SoundIO [ URL="http://libsound.io/" ];
SoundIO -> JACK;
SoundIO -> PulseAudio;
SoundIO -> ALSA;
- SoundIO -> null [ color=red ];
RtAudio [ URL="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" ];
RtAudio -> OSS [ label="OSS 4.0+" ];
@@ -122,8 +109,6 @@ digraph "Linux Audio Output APIs (available code)" {
ALSA -> PulseAudio;
ALSA -> JACK;
ALSA -> aRts;
- ALSA -> null [ color=red ];
- ALSA -> filesystem;
OSS -> ALSA;
OSS [ shape=octagon fillcolor=yellow ];
@@ -135,22 +120,18 @@ digraph "Linux Audio Output APIs (available code)" {
SDL1 -> ALSA;
SDL1 -> aRts;
SDL1 -> ESD;
- SDL1 -> filesystem;
SDL1 -> NAS;
SDL1 -> OSS;
SDL1 -> PulseAudio;
- SDL1 -> null [ color=red ];
SDL2 [ label="libSDL-2.0" URL="https://hg.libsdl.org/SDL/file/355a4f94a782" ];
SDL2 -> ALSA;
SDL2 -> aRts;
SDL2 -> ESD;
- SDL2 -> filesystem;
SDL2 -> FusionSound [ color=red ];
SDL2 -> JACK;
SDL2 -> NAS;
// Maybe SDL2 -> "NaCL";
- SDL2 -> null [ color=red ];
SDL2 -> OSS;
SDL2 -> PulseAudio;
SDL2 -> sndio;
@@ -183,9 +164,7 @@ digraph "Linux Audio Output APIs (available code)" {
telepathy -> "phone modem" [ label="?" fontcolor=red ];
VLC [ URL="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" ];
- VLC -> null [ color=red ];
VLC -> ALSA;
- VLC -> filesystem;
VLC -> JACK;
VLC -> OSS;
VLC -> PulseAudio;
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
@@ -4,1056 +4,932 @@
<!-- Generated by graphviz version 2.47.1 (20210417.1919)
-->
<!-- Title: Linux Audio Output APIs (available code) Pages: 1 -->
-<svg width="2590pt" height="849pt"
- viewBox="0.00 0.00 2590.00 848.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 844.74)">
+<svg width="2679pt" height="748pt"
+ viewBox="0.00 0.00 2679.00 747.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 743.74)">
<title>Linux Audio Output APIs (available code)</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-844.74 2586,-844.74 2586,4 -4,4"/>
-<text text-anchor="middle" x="1291" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs (available code)</text>
-<text text-anchor="middle" x="1291" 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="1291" 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,-743.74 2675,-743.74 2675,4 -4,4"/>
+<text text-anchor="middle" x="1335.5" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs (available code)</text>
+<text text-anchor="middle" x="1335.5" 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="1335.5" y="-7.8" font-family="Times,serif" font-size="14.00"> https://hacktivis.me/articles/linux-audio-output</text>
<!-- sound card -->
<g id="node1" class="node">
<title>sound card</title>
-<polygon fill="cyan" stroke="black" points="1695.5,-162 1600.5,-162 1600.5,-126 1695.5,-126 1695.5,-162"/>
-<text text-anchor="middle" x="1648" y="-140.3" font-family="Times,serif" font-size="14.00">sound card</text>
+<polygon fill="cyan" stroke="black" points="1305.5,-235 1210.5,-235 1210.5,-199 1305.5,-199 1305.5,-235"/>
+<text text-anchor="middle" x="1258" y="-213.3" font-family="Times,serif" font-size="14.00">sound card</text>
</g>
<!-- phone modem -->
<g id="node2" class="node">
<title>phone modem</title>
-<polygon fill="cyan" stroke="black" points="727.5,-322 610.5,-322 610.5,-286 727.5,-286 727.5,-322"/>
-<text text-anchor="middle" x="669" y="-300.3" font-family="Times,serif" font-size="14.00">phone modem</text>
+<polygon fill="cyan" stroke="black" points="836.5,-235 719.5,-235 719.5,-199 836.5,-199 836.5,-235"/>
+<text text-anchor="middle" x="778" y="-213.3" font-family="Times,serif" font-size="14.00">phone modem</text>
</g>
<!-- Bluetooth card -->
<g id="node3" class="node">
<title>Bluetooth card</title>
-<polygon fill="cyan" stroke="black" points="616,-162 494,-162 494,-126 616,-126 616,-162"/>
-<text text-anchor="middle" x="555" y="-140.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
-</g>
-<!-- filesystem -->
-<g id="node4" class="node">
-<title>filesystem</title>
-<polygon fill="yellow" stroke="black" points="1264.72,-223.54 1264.72,-238.46 1227.98,-249 1176.02,-249 1139.28,-238.46 1139.28,-223.54 1176.02,-213 1227.98,-213 1264.72,-223.54"/>
-<text text-anchor="middle" x="1202" y="-227.3" font-family="Times,serif" font-size="14.00">filesystem</text>
-</g>
-<!-- null -->
-<g id="node5" class="node">
-<title>null</title>
-<polygon fill="red" stroke="black" points="1079,-249 1038.61,-231 1079,-213 1119.39,-231 1079,-249"/>
-<text text-anchor="middle" x="1079" y="-227.3" font-family="Times,serif" font-size="14.00">null</text>
+<polygon fill="cyan" stroke="black" points="714,-89 592,-89 592,-53 714,-53 714,-89"/>
+<text text-anchor="middle" x="653" y="-67.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text>
</g>
<!-- portaudio -->
-<g id="node6" class="node">
+<g id="node4" class="node">
<title>portaudio</title>
-<g id="a_node6"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio">
-<ellipse fill="lightgrey" stroke="black" cx="1136" cy="-676.74" rx="55.79" ry="18"/>
-<text text-anchor="middle" x="1136" y="-673.04" font-family="Times,serif" font-size="14.00">portaudio</text>
+<g id="a_node4"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio">
+<ellipse fill="lightgrey" stroke="black" cx="1104" cy="-575.74" rx="55.79" ry="18"/>
+<text text-anchor="middle" x="1104" y="-572.04" font-family="Times,serif" font-size="14.00">portaudio</text>
</a>
</g>
</g>
<!-- ALSA -->
-<g id="node7" class="node">
+<g id="node5" class="node">
<title>ALSA</title>
-<g id="a_node7"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA">
-<polygon fill="yellow" stroke="black" points="1121.89,-587.41 1121.89,-602.33 1099.11,-612.87 1066.89,-612.87 1044.11,-602.33 1044.11,-587.41 1066.89,-576.87 1099.11,-576.87 1121.89,-587.41"/>
-<text text-anchor="middle" x="1083" y="-591.17" font-family="Times,serif" font-size="14.00">ALSA</text>
+<g id="a_node5"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA">
+<polygon fill="yellow" stroke="black" points="1058.89,-486.41 1058.89,-501.33 1036.11,-511.87 1003.89,-511.87 981.11,-501.33 981.11,-486.41 1003.89,-475.87 1036.11,-475.87 1058.89,-486.41"/>
+<text text-anchor="middle" x="1020" y="-490.17" 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="M1124.76,-658.8C1117.57,-647.97 1108.11,-633.71 1100.01,-621.51"/>
-<polygon fill="black" stroke="black" points="1102.85,-619.46 1094.41,-613.06 1097.02,-623.33 1102.85,-619.46"/>
+<path fill="none" stroke="black" d="M1087,-558.58C1074.98,-547.15 1058.66,-531.63 1045.14,-518.77"/>
+<polygon fill="black" stroke="black" points="1047.21,-515.91 1037.55,-511.56 1042.39,-520.99 1047.21,-515.91"/>
</g>
<!-- JACK -->
-<g id="node8" class="node">
+<g id="node6" class="node">
<title>JACK</title>
-<ellipse fill="lightgrey" stroke="black" cx="290" cy="-391" rx="34.39" ry="18"/>
-<text text-anchor="middle" x="290" y="-387.3" font-family="Times,serif" font-size="14.00">JACK</text>
+<ellipse fill="lightgrey" stroke="black" cx="440" cy="-304" rx="34.39" ry="18"/>
+<text text-anchor="middle" x="440" y="-300.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="M1085.17,-669.16C993.49,-657.12 807.29,-631.88 779,-621.74 712.98,-598.08 570.63,-491.57 508,-460 474.02,-442.87 465.4,-438.08 429,-427 389.56,-414.99 377.76,-419.91 338,-409 334.22,-407.96 330.32,-406.78 326.44,-405.52"/>
-<polygon fill="black" stroke="black" points="327.54,-402.2 316.94,-402.31 325.3,-408.83 327.54,-402.2"/>
+<path fill="none" stroke="black" d="M1049.6,-571.13C954.91,-564.23 764.06,-547.45 703,-520.74 668.66,-505.72 669.04,-488.01 638,-467 624.17,-457.63 618.64,-458.65 605,-449 556.2,-414.45 550.23,-398.11 505,-359 492.2,-347.93 477.73,-335.87 465.7,-325.96"/>
+<polygon fill="black" stroke="black" points="467.76,-323.12 457.81,-319.48 463.32,-328.53 467.76,-323.12"/>
</g>
<!-- OSS -->
-<g id="node9" class="node">
+<g id="node7" class="node">
<title>OSS</title>
-<polygon fill="yellow" stroke="black" points="1828.13,-223.54 1828.13,-238.46 1808.72,-249 1781.28,-249 1761.87,-238.46 1761.87,-223.54 1781.28,-213 1808.72,-213 1828.13,-223.54"/>
-<text text-anchor="middle" x="1795" y="-227.3" font-family="Times,serif" font-size="14.00">OSS</text>
+<polygon fill="yellow" stroke="black" points="1392.13,-296.54 1392.13,-311.46 1372.72,-322 1345.28,-322 1325.87,-311.46 1325.87,-296.54 1345.28,-286 1372.72,-286 1392.13,-296.54"/>
+<text text-anchor="middle" x="1359" 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="M1177.53,-664.53C1185.31,-662.53 1193.39,-660.52 1201,-658.74 1280.54,-640.18 1302.48,-644.22 1381,-621.74 1447.07,-602.82 1460.83,-589.83 1526,-568 1552.4,-559.16 1563.03,-565.73 1586,-550 1602.72,-538.54 1598.07,-526.53 1614,-514 1629.33,-501.95 1639.76,-509.31 1654,-496 1727.52,-427.3 1770.5,-311.46 1787.07,-259.12"/>
-<polygon fill="black" stroke="black" points="1790.51,-259.83 1790.12,-249.24 1783.82,-257.76 1790.51,-259.83"/>
+<path fill="none" stroke="black" d="M1134.54,-560.57C1155.86,-550.31 1184.73,-535.67 1209,-520.74 1243.62,-499.44 1250.06,-490.82 1283,-467 1294.09,-458.98 1299.78,-459.95 1308,-449 1322.12,-430.17 1341.18,-368.24 1351.54,-332.02"/>
+<polygon fill="black" stroke="black" points="1354.98,-332.68 1354.34,-322.11 1348.25,-330.78 1354.98,-332.68"/>
</g>
<!-- asihpi -->
-<g id="node10" class="node">
+<g id="node8" class="node">
<title>asihpi</title>
-<polygon fill="yellow" stroke="black" points="1584.51,-524.54 1584.51,-539.46 1560.19,-550 1525.81,-550 1501.49,-539.46 1501.49,-524.54 1525.81,-514 1560.19,-514 1584.51,-524.54"/>
-<text text-anchor="middle" x="1543" y="-528.3" font-family="Times,serif" font-size="14.00">asihpi</text>
+<polygon fill="yellow" stroke="black" points="1306.51,-423.54 1306.51,-438.46 1282.19,-449 1247.81,-449 1223.49,-438.46 1223.49,-423.54 1247.81,-413 1282.19,-413 1306.51,-423.54"/>
+<text text-anchor="middle" x="1265" y="-427.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="M1172.98,-663.12C1238.44,-640.71 1378.94,-592.37 1497,-550 1498.86,-549.33 1500.77,-548.64 1502.69,-547.95"/>
-<polygon fill="black" stroke="black" points="1504.15,-551.14 1512.35,-544.42 1501.75,-544.56 1504.15,-551.14"/>
+<path fill="none" stroke="black" d="M1122.16,-558.64C1150.59,-533.44 1205.75,-484.53 1238.58,-455.42"/>
+<polygon fill="black" stroke="black" points="1241.25,-457.73 1246.42,-448.48 1236.61,-452.49 1241.25,-457.73"/>
</g>
<!-- sndio -->
-<g id="node11" class="node">
+<g id="node9" class="node">
<title>sndio</title>
-<g id="a_node11"><a xlink:href="http://www.sndio.org/" xlink:title="sndio">
-<ellipse fill="lightgrey" stroke="black" cx="805" cy="-71" rx="36" ry="18"/>
-<text text-anchor="middle" x="805" y="-67.3" font-family="Times,serif" font-size="14.00">sndio</text>
+<g id="a_node9"><a xlink:href="http://www.sndio.org/" xlink:title="sndio">
+<ellipse fill="lightgrey" stroke="black" cx="1067" cy="-144" rx="36" ry="18"/>
+<text text-anchor="middle" x="1067" 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="M1153.97,-659.49C1181.29,-635.68 1235.85,-591.58 1290,-568 1325,-552.75 1341.66,-570.29 1374,-550 1477.11,-485.29 1514.3,-387.44 1447,-286 1372.06,-173.04 941.54,-176.77 909,-162 899.75,-157.8 856.83,-119.4 829.1,-94.14"/>
-<polygon fill="black" stroke="black" points="831.12,-91.24 821.38,-87.08 826.4,-96.41 831.12,-91.24"/>
+<path fill="none" stroke="black" d="M1112.94,-557.97C1130.42,-525.09 1167.58,-454.84 1169,-449 1172.78,-433.45 1171.89,-428.74 1169,-413 1151.9,-319.98 1104,-217.42 1080.44,-170.71"/>
+<polygon fill="black" stroke="black" points="1083.46,-168.94 1075.8,-161.62 1077.22,-172.12 1083.46,-168.94"/>
</g>
<!-- ALSA->sound card -->
-<g id="edge75" class="edge">
+<g id="edge64" class="edge">
<title>ALSA->sound card</title>
-<path fill="none" stroke="green" d="M1119.86,-586.36C1147.17,-580.92 1185.33,-573.57 1219,-568 1275.68,-558.63 1297.45,-579.08 1347,-550 1348.71,-548.99 1518.82,-323.6 1520,-322 1559.58,-268.57 1604.99,-205.3 1629.67,-170.73"/>
-<polygon fill="green" stroke="green" points="1632.81,-172.35 1635.77,-162.18 1627.12,-168.29 1632.81,-172.35"/>
-</g>
-<!-- ALSA->filesystem -->
-<g id="edge80" class="edge">
-<title>ALSA->filesystem</title>
-<path fill="none" stroke="black" d="M1108.52,-581.16C1120.83,-573.74 1134.69,-563.22 1143,-550 1202.12,-456.01 1205.11,-317.47 1203.41,-259.3"/>
-<polygon fill="black" stroke="black" points="1206.9,-258.95 1203.03,-249.08 1199.9,-259.21 1206.9,-258.95"/>
-</g>
-<!-- ALSA->null -->
-<g id="edge79" class="edge">
-<title>ALSA->null</title>
-<path fill="none" stroke="red" d="M1102.46,-578.27C1110.7,-570.62 1119.62,-560.75 1125,-550 1135.9,-528.25 1131.99,-520.25 1134,-496 1136.53,-465.43 1137.08,-457.4 1133,-427 1124.59,-364.26 1101.26,-293.22 1088.18,-256.66"/>
-<polygon fill="red" stroke="red" points="1091.34,-255.08 1084.64,-246.88 1084.76,-257.47 1091.34,-255.08"/>
+<path fill="none" stroke="green" d="M1053.62,-483.68C1074.26,-476.74 1100.25,-465.55 1119,-449 1136.58,-433.49 1211.78,-300.77 1243.64,-243.81"/>
+<polygon fill="green" stroke="green" points="1246.72,-245.47 1248.54,-235.03 1240.61,-242.05 1246.72,-245.47"/>
</g>
<!-- ALSA->JACK -->
-<g id="edge77" class="edge">
+<g id="edge66" class="edge">
<title>ALSA->JACK</title>
-<path fill="none" stroke="black" d="M1044.22,-589.52C993,-583.28 900.27,-570.25 823,-550 777.31,-538.02 768.19,-527.75 723,-514 691.44,-504.4 682.52,-505.74 651,-496 634.47,-490.89 520.77,-449.1 505,-442 492.13,-436.2 490.34,-431.63 477,-427 433.92,-412.05 420.81,-417.42 376,-409 361.56,-406.29 345.77,-403.2 331.72,-400.41"/>
-<polygon fill="black" stroke="black" points="332.32,-396.96 321.83,-398.44 330.95,-403.83 332.32,-396.96"/>
-</g>
-<!-- ALSA->sndio -->
-<g id="edge54" class="edge">
-<title>ALSA->sndio</title>
-<path fill="none" stroke="black" d="M1080.04,-576.69C1078.66,-537.18 1080.98,-438.2 1038,-373 1010.46,-331.22 877.77,-290.64 850,-249 818.66,-202.01 804.9,-136.08 802.27,-99.39"/>
-<polygon fill="black" stroke="black" points="805.74,-98.83 801.8,-88.99 798.75,-99.14 805.74,-98.83"/>
+<path fill="none" stroke="black" d="M988.82,-482.77C890.34,-450.87 586.18,-352.35 478.37,-317.43"/>
+<polygon fill="black" stroke="black" points="479.16,-314 468.56,-314.25 477,-320.66 479.16,-314"/>
</g>
<!-- PulseAudio -->
-<g id="node12" class="node">
+<g id="node10" class="node">
<title>PulseAudio</title>
-<g id="a_node12"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio">
-<ellipse fill="lightgrey" stroke="black" cx="757" cy="-478" rx="62.29" ry="18"/>
-<text text-anchor="middle" x="757" y="-474.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
+<g id="a_node10"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio">
+<ellipse fill="lightgrey" stroke="black" cx="851" cy="-377" rx="62.29" ry="18"/>
+<text text-anchor="middle" x="851" y="-373.3" font-family="Times,serif" font-size="14.00">PulseAudio</text>
</a>
</g>
</g>
<!-- ALSA->PulseAudio -->
-<g id="edge76" class="edge">
+<g id="edge65" class="edge">
<title>ALSA->PulseAudio</title>
-<path fill="none" stroke="black" d="M1053.04,-583.05C1001.86,-562.53 902.3,-519.49 886,-514 862.03,-505.92 835.16,-498.71 812.13,-492.96"/>
-<polygon fill="black" stroke="black" points="812.72,-489.5 802.18,-490.5 811.05,-496.3 812.72,-489.5"/>
+<path fill="none" stroke="black" d="M997.49,-478.4C971.31,-458.39 930.43,-423.55 914,-413 905.58,-407.59 896.2,-402.46 887.27,-397.88"/>
+<polygon fill="black" stroke="black" points="888.69,-394.67 878.18,-393.31 885.54,-400.93 888.69,-394.67"/>
</g>
<!-- bluez -->
-<g id="node13" class="node">
+<g id="node11" class="node">
<title>bluez</title>
-<polygon fill="yellow" stroke="black" points="587.51,-223.54 587.51,-238.46 563.19,-249 528.81,-249 504.49,-238.46 504.49,-223.54 528.81,-213 563.19,-213 587.51,-223.54"/>
-<text text-anchor="middle" x="546" y="-227.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
+<polygon fill="yellow" stroke="black" points="694.51,-136.54 694.51,-151.46 670.19,-162 635.81,-162 611.49,-151.46 611.49,-136.54 635.81,-126 670.19,-126 694.51,-136.54"/>
+<text text-anchor="middle" x="653" y="-140.3" font-family="Times,serif" font-size="14.00">BlueZ</text>
</g>
<!-- ALSA->bluez -->
-<g id="edge22" class="edge">
+<g id="edge20" class="edge">
<title>ALSA->bluez</title>
-<path fill="none" stroke="black" d="M1071.67,-576.83C1044.68,-537.17 972.87,-437.19 894,-373 831.83,-322.4 810.14,-316.49 736,-286 689.13,-266.73 633.05,-251.71 594.02,-242.46"/>
-<polygon fill="black" stroke="black" points="594.51,-238.98 583.98,-240.12 592.92,-245.8 594.51,-238.98"/>
+<path fill="none" stroke="black" d="M1016.61,-475.75C1009.92,-446.75 992.12,-388.27 953,-359 912.04,-328.35 873.8,-363.58 844,-322 812.15,-277.56 879.04,-242.56 846,-199 828.9,-176.46 755.61,-160.76 704.45,-152.31"/>
+<polygon fill="black" stroke="black" points="704.96,-148.85 694.53,-150.72 703.85,-155.76 704.96,-148.85"/>
</g>
<!-- PipeWire -->
-<g id="node17" class="node">
+<g id="node14" class="node">
<title>PipeWire</title>
-<g id="a_node17"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire">
-<ellipse fill="lightgrey" stroke="black" cx="385" cy="-304" rx="53.09" ry="18"/>
-<text text-anchor="middle" x="385" y="-300.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
+<g id="a_node14"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire">
+<ellipse fill="lightgrey" stroke="black" cx="440" cy="-217" rx="53.09" ry="18"/>
+<text text-anchor="middle" x="440" y="-213.3" font-family="Times,serif" font-size="14.00">PipeWire</text>
</a>
</g>
</g>
<!-- ALSA->PipeWire -->
-<g id="edge17" class="edge">
+<g id="edge15" class="edge">
<title>ALSA->PipeWire</title>
-<path fill="none" stroke="black" d="M1035.49,-584.51C996.41,-576.46 939.73,-563.96 891,-550 843.98,-536.53 834.33,-526.33 787,-514 742.88,-502.51 729.2,-510.59 686,-496 652.85,-484.81 647.2,-475.82 616,-460 600.05,-451.91 595.89,-450.22 580,-442 567.46,-435.51 565.42,-431.38 552,-427 496.96,-409.05 468.03,-445.38 423,-409 399.82,-390.27 390.78,-356.07 387.25,-332.02"/>
-<polygon fill="black" stroke="black" points="1035.03,-587.99 1045.53,-586.57 1036.43,-581.13 1035.03,-587.99"/>
-<polygon fill="black" stroke="black" points="390.72,-331.59 386.02,-322.09 383.78,-332.45 390.72,-331.59"/>
+<path fill="none" stroke="black" d="M1004.61,-467.09C983.1,-431.98 944.19,-372 922,-359 839.47,-310.65 802.18,-347.53 710,-322 625.92,-298.71 531.64,-259.15 479.71,-236.12"/>
+<polygon fill="black" stroke="black" points="1001.75,-469.13 1009.93,-475.86 1007.73,-465.49 1001.75,-469.13"/>
+<polygon fill="black" stroke="black" points="481.08,-232.89 470.52,-232.02 478.23,-239.29 481.08,-232.89"/>
</g>
<!-- aRts -->
-<g id="node20" class="node">
+<g id="node18" class="node">
<title>aRts</title>
-<ellipse fill="lightgrey" stroke="black" cx="1432" cy="-71" rx="31.7" ry="18"/>
-<text text-anchor="middle" x="1432" y="-67.3" font-family="Times,serif" font-size="14.00">aRts</text>
+<ellipse fill="lightgrey" stroke="black" cx="1813" cy="-144" rx="31.7" ry="18"/>
+<text text-anchor="middle" x="1813" y="-140.3" font-family="Times,serif" font-size="14.00">aRts</text>
</g>
<!-- ALSA->aRts -->
-<g id="edge78" class="edge">
+<g id="edge67" class="edge">
<title>ALSA->aRts</title>
-<path fill="none" stroke="black" d="M1112.92,-583.05C1130.02,-575.73 1150.97,-564.71 1166,-550 1308.91,-410.14 1396.68,-177.01 1423.34,-98.63"/>
-<polygon fill="black" stroke="black" points="1426.69,-99.62 1426.56,-89.03 1420.06,-97.4 1426.69,-99.62"/>
+<path fill="none" stroke="black" d="M1036.9,-476.13C1044.41,-468.25 1053.1,-458.51 1060,-449 1135.07,-345.59 1093.85,-267.05 1202,-199 1252.43,-167.27 1678.04,-170.58 1737,-162 1749.44,-160.19 1762.87,-157.45 1774.92,-154.7"/>
+<polygon fill="black" stroke="black" points="1775.75,-158.1 1784.68,-152.4 1774.14,-151.29 1775.75,-158.1"/>
</g>
<!-- JACK->PipeWire -->
-<g id="edge18" class="edge">
+<g id="edge16" class="edge">
<title>JACK->PipeWire</title>
-<path fill="none" stroke="black" d="M311.08,-366.45C319.2,-357.82 328.74,-348.17 338,-340 343.13,-335.48 348.8,-330.92 354.38,-326.65"/>
-<polygon fill="black" stroke="black" points="308.3,-364.31 304.08,-374.02 313.44,-369.06 308.3,-364.31"/>
-<polygon fill="black" stroke="black" points="356.49,-329.44 362.41,-320.65 352.3,-323.83 356.49,-329.44"/>
+<path fill="none" stroke="black" d="M440,-275.73C440,-266.06 440,-255.17 440,-245.48"/>
+<polygon fill="black" stroke="black" points="436.5,-275.8 440,-285.8 443.5,-275.8 436.5,-275.8"/>
+<polygon fill="black" stroke="black" points="443.5,-245.18 440,-235.18 436.5,-245.18 443.5,-245.18"/>
</g>
<!-- OSS->sound card -->
-<g id="edge82" class="edge">
+<g id="edge69" class="edge">
<title>OSS->sound card</title>
-<path fill="none" stroke="green" d="M1781.22,-212.77C1771.93,-202.11 1758.89,-188.82 1745,-180 1732.96,-172.35 1719.02,-166.08 1705.53,-161.06"/>
-<polygon fill="green" stroke="green" points="1706.41,-157.66 1695.82,-157.62 1704.08,-164.26 1706.41,-157.66"/>
-<text text-anchor="middle" x="1907" y="-183.8" font-family="Times,serif" font-size="14.00" fill="green">third-party drivers from opensound.com</text>
+<path fill="none" stroke="green" d="M1325.8,-300.87C1303.01,-297.49 1274.22,-289 1259,-268 1254.32,-261.55 1252.87,-253.29 1252.93,-245.36"/>
+<polygon fill="green" stroke="green" points="1256.43,-245.54 1253.74,-235.3 1249.45,-244.98 1256.43,-245.54"/>
+<text text-anchor="middle" x="1403" 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="edge81" class="edge">
+<g id="edge68" class="edge">
<title>OSS->ALSA</title>
-<path fill="none" stroke="black" d="M1761.75,-232.75C1729.64,-235 1681.01,-242.61 1647,-267 1609.52,-293.88 1617.5,-316.57 1592,-355 1519.75,-463.87 1492.94,-500.55 1372,-550 1308.62,-575.91 1286.67,-557.6 1219,-568 1189.12,-572.59 1155.76,-578.92 1129.56,-584.17"/>
-<polygon fill="black" stroke="black" points="1128.64,-580.78 1119.53,-586.19 1130.03,-587.64 1128.64,-580.78"/>
+<path fill="none" stroke="black" d="M1333.74,-315.76C1295.86,-332.7 1223.3,-368.3 1172,-413 1156.72,-426.32 1160.44,-437.14 1144,-449 1130.69,-458.6 1093.23,-471.25 1062.94,-480.5"/>
+<polygon fill="black" stroke="black" points="1061.55,-477.26 1052.98,-483.5 1063.57,-483.97 1061.55,-477.26"/>
</g>
<!-- RoarAudio -->
-<g id="node23" class="node">
+<g id="node21" 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="977" cy="-144" rx="59.29" ry="18"/>
-<text text-anchor="middle" x="977" y="-140.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
+<g id="a_node21"><a xlink:href="http://roaraudio.keep-cool.org/" xlink:title="RoarAudio">
+<ellipse fill="lightgrey" stroke="black" cx="1574" cy="-217" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="1574" y="-213.3" font-family="Times,serif" font-size="14.00">RoarAudio</text>
</a>
</g>
</g>
<!-- OSS->RoarAudio -->
-<g id="edge40" class="edge">
+<g id="edge34" class="edge">
<title>OSS->RoarAudio</title>
-<path fill="none" stroke="black" d="M1761.92,-226.56C1639.03,-213.79 1207.37,-168.94 1042.07,-151.76"/>
-<polygon fill="black" stroke="black" points="1042.35,-148.27 1032.04,-150.72 1041.63,-155.23 1042.35,-148.27"/>
+<path fill="none" stroke="black" d="M1392.2,-303.21C1451.28,-302.81 1570.93,-298.18 1597,-268 1603.28,-260.73 1601.08,-251.47 1596.1,-242.89"/>
+<polygon fill="black" stroke="black" points="1598.96,-240.88 1590.39,-234.64 1593.2,-244.86 1598.96,-240.88"/>
</g>
<!-- asihpi->sound card -->
<g id="edge5" class="edge">
<title>asihpi->sound card</title>
-<path fill="none" stroke="green" d="M1573.43,-519.55C1595.73,-510.96 1622.8,-500.01 1627,-496 1657.91,-466.47 1657.89,-450.53 1668,-409 1688.6,-324.33 1667.72,-220.27 1655.5,-171.99"/>
-<polygon fill="green" stroke="green" points="1658.88,-171.08 1652.97,-162.29 1652.11,-172.85 1658.88,-171.08"/>
+<path fill="none" stroke="green" d="M1263.67,-412.77C1262.52,-398.39 1260.78,-377.35 1259,-359 1255.06,-318.5 1251.23,-308.63 1249,-268 1248.64,-261.34 1248.16,-259.61 1249,-253 1249.32,-250.44 1249.78,-247.8 1250.31,-245.17"/>
+<polygon fill="green" stroke="green" points="1253.75,-245.82 1252.64,-235.28 1246.94,-244.21 1253.75,-245.82"/>
</g>
<!-- sndio->ALSA -->
-<g id="edge52" class="edge">
+<g id="edge45" class="edge">
<title>sndio->ALSA</title>
-<path fill="none" stroke="black" d="M811.9,-88.74C820.17,-121.85 833.33,-197.01 868,-249 895.77,-290.64 1028.46,-331.22 1056,-373 1095.71,-433.23 1096.75,-522.29 1090.9,-566.67"/>
-<polygon fill="black" stroke="black" points="1087.42,-566.27 1089.32,-576.69 1094.33,-567.36 1087.42,-566.27"/>
+<path fill="none" stroke="black" d="M1063.26,-172.66C1054.45,-237.89 1032.45,-400.73 1023.69,-465.58"/>
+<polygon fill="black" stroke="black" points="1066.78,-172.73 1064.66,-162.36 1059.85,-171.8 1066.78,-172.73"/>
+<polygon fill="black" stroke="black" points="1020.2,-465.24 1022.33,-475.62 1027.14,-466.18 1020.2,-465.24"/>
</g>
<!-- PulseAudio->sound card -->
-<g id="edge10" class="edge">
+<g id="edge8" class="edge">
<title>PulseAudio->sound card</title>
-<path fill="none" stroke="green" d="M724.18,-462.65C710.44,-456.49 694.35,-449.09 680,-442 667.34,-435.74 665.15,-432.13 652,-427 622.07,-415.33 602.38,-433.83 582,-409 547.31,-366.74 544.19,-327.31 580,-286 646.94,-208.79 1377.94,-160.65 1590.41,-148.21"/>
-<polygon fill="green" stroke="green" points="1590.64,-151.71 1600.42,-147.63 1590.24,-144.72 1590.64,-151.71"/>
-</g>
-<!-- PulseAudio->null -->
-<g id="edge9" class="edge">
-<title>PulseAudio->null</title>
-<path fill="none" stroke="red" d="M733.43,-461.05C714.2,-448.28 688.42,-431.73 677,-427 644.13,-413.38 621.15,-436.84 599,-409 584.41,-390.66 568.77,-319.2 601,-286 627.35,-258.85 903.62,-273.8 941,-268 978.04,-262.25 1019.54,-250.71 1047.27,-242.24"/>
-<polygon fill="red" stroke="red" points="1048.31,-245.58 1056.82,-239.27 1046.24,-238.89 1048.31,-245.58"/>
+<path fill="none" stroke="green" d="M877.22,-360.56C889.38,-353.76 904.18,-345.96 918,-340 941.23,-329.98 948.12,-330.34 972,-322 1056.43,-292.52 1076.94,-283.51 1161,-253 1174,-248.28 1187.99,-243.22 1201.18,-238.46"/>
+<polygon fill="green" stroke="green" points="1202.41,-241.74 1210.62,-235.05 1200.03,-235.16 1202.41,-241.74"/>
</g>
<!-- PulseAudio->ALSA -->
<g id="edge7" class="edge">
<title>PulseAudio->ALSA</title>
-<path fill="none" stroke="black" d="M808.45,-488.27C837.09,-494.53 872.97,-503.54 904,-514 918.7,-518.95 1001.11,-554.44 1048.94,-576.41"/>
-<polygon fill="black" stroke="black" points="1047.76,-579.72 1058.31,-580.74 1050.7,-573.37 1047.76,-579.72"/>
+<path fill="none" stroke="black" d="M890.28,-391.11C904.03,-397.12 919.13,-404.74 932,-413 945.98,-421.97 977.66,-448.54 999.13,-468.59"/>
+<polygon fill="black" stroke="black" points="996.87,-471.27 1006.53,-475.63 1001.7,-466.2 996.87,-471.27"/>
</g>
<!-- PulseAudio->JACK -->
-<g id="edge11" class="edge">
+<g id="edge10" class="edge">
<title>PulseAudio->JACK</title>
-<path fill="none" stroke="black" d="M706.55,-467.27C670.46,-460.28 620.73,-450.62 577,-442 543.65,-435.42 535.44,-433.1 502,-427 443.52,-416.33 375.69,-405.38 332.82,-398.63"/>
-<polygon fill="black" stroke="black" points="333.17,-395.15 322.75,-397.05 332.08,-402.06 333.17,-395.15"/>
+<path fill="none" stroke="black" d="M793.47,-369.97C723.35,-362.43 609,-349.49 567,-341 536.79,-334.9 503.28,-325.27 478.27,-317.51"/>
+<polygon fill="black" stroke="black" points="479.03,-314.08 468.44,-314.42 476.93,-320.76 479.03,-314.08"/>
</g>
<!-- PulseAudio->OSS -->
-<g id="edge8" class="edge">
+<g id="edge9" class="edge">
<title>PulseAudio->OSS</title>
-<path fill="none" stroke="black" d="M816.86,-465.05C848.73,-458.53 888.57,-450.15 924,-442 1235.68,-370.3 1310.07,-337.62 1622,-267 1666.07,-257.02 1716.76,-246.93 1751.83,-240.16"/>
-<polygon fill="black" stroke="black" points="815.9,-461.67 806.8,-467.09 817.3,-468.53 815.9,-461.67"/>
-<polygon fill="black" stroke="black" points="1752.58,-243.58 1761.74,-238.26 1751.26,-236.71 1752.58,-243.58"/>
+<path fill="none" stroke="black" d="M915.77,-366.95C1020.97,-352.25 1226.19,-323.56 1315.61,-311.06"/>
+<polygon fill="black" stroke="black" points="915.27,-363.48 905.85,-368.33 916.24,-370.42 915.27,-363.48"/>
+<polygon fill="black" stroke="black" points="1316.26,-314.51 1325.68,-309.66 1315.29,-307.58 1316.26,-314.51"/>
</g>
<!-- PulseAudio->sndio -->
-<g id="edge53" class="edge">
+<g id="edge46" class="edge">
<title>PulseAudio->sndio</title>
-<path fill="none" stroke="black" d="M708.83,-466.41C684.74,-460.45 655.38,-452.15 630,-442 616.89,-436.76 615.31,-431.71 602,-427 561.91,-412.79 543.66,-432.19 508,-409 480.56,-391.16 466,-381.23 466,-348.5 466,-348.5 466,-348.5 466,-143 466,-83.87 666.08,-73.69 758.82,-72.15"/>
-<polygon fill="black" stroke="black" points="759.09,-75.64 769.04,-72 758.99,-68.64 759.09,-75.64"/>
+<path fill="none" stroke="black" d="M794.05,-369.58C763.72,-362.93 728.87,-349.43 710,-322 697.41,-303.7 682.09,-232.23 711,-199 750.72,-153.34 934.02,-145.86 1020.97,-144.92"/>
+<polygon fill="black" stroke="black" points="1021.11,-148.42 1031.09,-144.84 1021.06,-141.42 1021.11,-148.42"/>
</g>
<!-- PulseAudio->bluez -->
-<g id="edge12" class="edge">
+<g id="edge11" class="edge">
<title>PulseAudio->bluez</title>
-<path fill="none" stroke="black" d="M715.23,-464.35C696.54,-458.27 674.39,-450.46 655,-442 642.06,-436.36 640.33,-431.65 627,-427 584.78,-412.26 556.66,-443.33 528,-409 492.48,-366.44 515.61,-296.57 532.61,-258.59"/>
-<polygon fill="black" stroke="black" points="535.93,-259.76 536.98,-249.22 529.58,-256.8 535.93,-259.76"/>
+<path fill="none" stroke="black" d="M791.6,-371.4C747.48,-366.69 692.39,-357.62 677,-341 634.25,-294.84 640.46,-214.13 647.4,-172.13"/>
+<polygon fill="black" stroke="black" points="650.88,-172.56 649.2,-162.09 643.99,-171.32 650.88,-172.56"/>
</g>
<!-- ofono -->
-<g id="node14" class="node">
+<g id="node12" class="node">
<title>ofono</title>
-<polygon fill="yellow" stroke="black" points="686.29,-383.54 686.29,-398.46 663.28,-409 630.72,-409 607.71,-398.46 607.71,-383.54 630.72,-373 663.28,-373 686.29,-383.54"/>
-<text text-anchor="middle" x="647" y="-387.3" font-family="Times,serif" font-size="14.00">ofono</text>
+<polygon fill="yellow" stroke="black" points="797.29,-296.54 797.29,-311.46 774.28,-322 741.72,-322 718.71,-311.46 718.71,-296.54 741.72,-286 774.28,-286 797.29,-296.54"/>
+<text text-anchor="middle" x="758" y="-300.3" font-family="Times,serif" font-size="14.00">ofono</text>
</g>
<!-- PulseAudio->ofono -->
-<g id="edge13" class="edge">
+<g id="edge12" class="edge">
<title>PulseAudio->ofono</title>
-<path fill="none" stroke="black" d="M741.45,-460.25C731.53,-450.04 718.12,-437.06 705,-427 697.39,-421.16 688.75,-415.5 680.5,-410.48"/>
-<polygon fill="black" stroke="black" points="682.16,-407.4 671.77,-405.32 678.6,-413.42 682.16,-407.4"/>
-</g>
-<!-- sox -->
-<g id="node15" class="node">
-<title>sox</title>
-<g id="a_node15"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox">
-<ellipse fill="lightgrey" stroke="black" cx="1011" cy="-391" rx="27" ry="18"/>
-<text text-anchor="middle" x="1011" y="-387.3" font-family="Times,serif" font-size="14.00">sox</text>
-</a>
-</g>
-</g>
-<!-- PulseAudio->sox -->
-<g id="edge14" class="edge">
-<title>PulseAudio->sox</title>
-<path fill="none" stroke="black" d="M797.73,-464.31C819.85,-458.08 847.48,-450.16 872,-442 908.33,-429.91 949.45,-413.65 977.66,-403"/>
-<polygon fill="black" stroke="black" points="978.94,-406.26 987.08,-399.49 976.49,-399.71 978.94,-406.26"/>
+<path fill="none" stroke="black" d="M829.9,-359.89C817.03,-350.06 800.41,-337.38 786.4,-326.68"/>
+<polygon fill="black" stroke="black" points="788.14,-323.6 778.06,-320.32 783.89,-329.17 788.14,-323.6"/>
</g>
<!-- PulseAudio->PipeWire -->
-<g id="edge16" class="edge">
+<g id="edge14" class="edge">
<title>PulseAudio->PipeWire</title>
-<path fill="none" stroke="black" d="M698.25,-464.25C659.38,-455.68 613.96,-445.36 605,-442 591.78,-437.04 590.41,-431.41 577,-427 523.68,-409.48 499.23,-439.32 452,-409 444.33,-404.08 417.41,-360.01 400.11,-330.84"/>
-<polygon fill="black" stroke="black" points="697.97,-467.78 708.49,-466.5 699.47,-460.94 697.97,-467.78"/>
-<polygon fill="black" stroke="black" points="402.97,-328.79 394.87,-321.96 396.94,-332.35 402.97,-328.79"/>
+<path fill="none" stroke="black" d="M781.71,-369.87C739.68,-364.85 685.39,-356.04 639,-341 571.4,-319.08 503.24,-269.66 466.87,-240.58"/>
+<polygon fill="black" stroke="black" points="781.51,-373.37 791.84,-371.03 782.31,-366.41 781.51,-373.37"/>
+<polygon fill="black" stroke="black" points="468.73,-237.57 458.75,-234 464.32,-243.01 468.73,-237.57"/>
</g>
<!-- bluez->Bluetooth card -->
-<g id="edge23" class="edge">
+<g id="edge21" class="edge">
<title>bluez->Bluetooth card</title>
-<path fill="none" stroke="green" d="M547.82,-212.8C549.05,-201.16 550.71,-185.55 552.12,-172.24"/>
-<polygon fill="green" stroke="green" points="555.61,-172.49 553.18,-162.18 548.65,-171.75 555.61,-172.49"/>
+<path fill="none" stroke="green" d="M653,-125.81C653,-117.79 653,-108.05 653,-99.07"/>
+<polygon fill="green" stroke="green" points="656.5,-99.03 653,-89.03 649.5,-99.03 656.5,-99.03"/>
</g>
<!-- ofono->phone modem -->
-<g id="edge21" class="edge">
+<g id="edge19" class="edge">
<title>ofono->phone modem</title>
-<path fill="none" stroke="green" d="M651.45,-372.8C654.46,-361.16 658.51,-345.55 661.95,-332.24"/>
-<polygon fill="green" stroke="green" points="665.44,-332.73 664.55,-322.18 658.66,-330.98 665.44,-332.73"/>
-</g>
-<!-- sox->filesystem -->
-<g id="edge24" class="edge">
-<title>sox->filesystem</title>
-<path fill="none" stroke="black" d="M1027.28,-376.53C1059.69,-349.72 1132.64,-289.38 1173.28,-255.76"/>
-<polygon fill="black" stroke="black" points="1175.72,-258.28 1181.2,-249.21 1171.26,-252.89 1175.72,-258.28"/>
-</g>
-<!-- sox->null -->
-<g id="edge25" class="edge">
-<title>sox->null</title>
-<path fill="none" stroke="red" d="M1000.16,-374.18C987.03,-352.87 968.59,-314.35 985,-286 997.92,-263.68 1023.93,-249.78 1045.33,-241.69"/>
-<polygon fill="red" stroke="red" points="1046.5,-244.99 1054.77,-238.37 1044.17,-238.38 1046.5,-244.99"/>
-</g>
-<!-- sox->ALSA -->
-<g id="edge28" class="edge">
-<title>sox->ALSA</title>
-<path fill="none" stroke="black" d="M1005.91,-409.03C997.84,-439.54 985.48,-504.56 1011,-550 1018.15,-562.73 1030.67,-572.21 1043.28,-579.02"/>
-<polygon fill="black" stroke="black" points="1041.89,-582.24 1052.4,-583.53 1044.99,-575.96 1041.89,-582.24"/>
-</g>
-<!-- sox->sndio -->
-<g id="edge29" class="edge">
-<title>sox->sndio</title>
-<path fill="none" stroke="black" d="M993.83,-376.76C965.09,-355.13 904.76,-312.01 848,-286 822.69,-274.4 810,-285.07 788,-268 753.45,-241.19 733.61,-222.47 744,-180 751.66,-148.7 771.2,-117.1 786.12,-96.23"/>
-<polygon fill="black" stroke="black" points="789.08,-98.11 792.19,-87.98 783.44,-93.97 789.08,-98.11"/>
-</g>
-<!-- sox->PulseAudio -->
-<g id="edge27" class="edge">
-<title>sox->PulseAudio</title>
-<path fill="none" stroke="black" d="M990.8,-403.27C966.76,-413.93 926.02,-430.02 890,-442 865.86,-450.03 838.69,-457.84 815.16,-464.03"/>
-<polygon fill="black" stroke="black" points="814.12,-460.68 805.32,-466.58 815.87,-467.46 814.12,-460.68"/>
-</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="1027" cy="-304" rx="33.29" ry="18"/>
-<text text-anchor="middle" x="1027" y="-300.3" font-family="Times,serif" font-size="14.00">libao</text>
-</a>
-</g>
-</g>
-<!-- sox->libao -->
-<g id="edge26" class="edge">
-<title>sox->libao</title>
-<path fill="none" stroke="black" d="M1014.24,-372.8C1016.43,-361.16 1019.37,-345.55 1021.87,-332.24"/>
-<polygon fill="black" stroke="black" points="1025.36,-332.65 1023.77,-322.18 1018.48,-331.36 1025.36,-332.65"/>
+<path fill="none" stroke="green" d="M762.05,-285.8C764.79,-274.16 768.46,-258.55 771.59,-245.24"/>
+<polygon fill="green" stroke="green" points="775.08,-245.71 773.96,-235.18 768.26,-244.11 775.08,-245.71"/>
</g>
<!-- X11 bell -->
-<g id="node16" class="node">
+<g id="node13" class="node">
<title>X11 bell</title>
-<ellipse fill="lightgrey" stroke="black" cx="837" cy="-594.87" rx="48.99" ry="18"/>
-<text text-anchor="middle" x="837" y="-591.17" font-family="Times,serif" font-size="14.00">X11 bell</text>
+<ellipse fill="lightgrey" stroke="black" cx="761" cy="-493.87" rx="48.99" ry="18"/>
+<text text-anchor="middle" x="761" y="-490.17" font-family="Times,serif" font-size="14.00">X11 bell</text>
</g>
<!-- X11 bell->PulseAudio -->
-<g id="edge15" class="edge">
+<g id="edge13" class="edge">
<title>X11 bell->PulseAudio</title>
-<path fill="none" stroke="black" d="M808.05,-580.27C795.49,-572.98 781.69,-562.82 773,-550 764.3,-537.17 760.26,-520.32 758.42,-506.26"/>
-<polygon fill="black" stroke="black" points="761.89,-505.76 757.4,-496.16 754.92,-506.46 761.89,-505.76"/>
+<path fill="none" stroke="black" d="M773.75,-476.29C786.24,-460.1 805.83,-434.78 823,-413 825.66,-409.63 828.47,-406.09 831.24,-402.61"/>
+<polygon fill="black" stroke="black" points="834.05,-404.69 837.56,-394.7 828.59,-400.32 834.05,-404.69"/>
</g>
<!-- PipeWire->bluez -->
-<g id="edge19" class="edge">
+<g id="edge17" class="edge">
<title>PipeWire->bluez</title>
-<path fill="none" stroke="black" d="M416.04,-289.31C442.44,-277.67 480.43,-260.91 508.53,-248.53"/>
-<polygon fill="black" stroke="black" points="510.28,-251.58 518.01,-244.34 507.45,-245.17 510.28,-251.58"/>
+<path fill="none" stroke="black" d="M476.62,-203.79C514.12,-191.29 572.32,-171.89 611.5,-158.83"/>
+<polygon fill="black" stroke="black" points="612.65,-162.14 621.03,-155.66 610.44,-155.5 612.65,-162.14"/>
</g>
<!-- gstreamer -->
-<g id="node18" class="node">
+<g id="node15" class="node">
<title>gstreamer</title>
-<ellipse fill="lightgrey" stroke="black" cx="921" cy="-676.74" rx="59.29" ry="18"/>
-<text text-anchor="middle" x="921" y="-673.04" font-family="Times,serif" font-size="14.00">gstreamer</text>
+<ellipse fill="lightgrey" stroke="black" cx="114" cy="-575.74" rx="59.29" ry="18"/>
+<text text-anchor="middle" x="114" y="-572.04" font-family="Times,serif" font-size="14.00">gstreamer</text>
</g>
<!-- gstreamer->ALSA -->
-<g id="edge102" class="edge">
+<g id="edge85" class="edge">
<title>gstreamer->ALSA</title>
-<path fill="none" stroke="black" d="M950.71,-661.09C978.24,-647.52 1019.2,-627.33 1048.24,-613.01"/>
-<polygon fill="black" stroke="black" points="1049.79,-616.14 1057.21,-608.58 1046.7,-609.87 1049.79,-616.14"/>
+<path fill="none" stroke="black" d="M169.28,-569.22C246.42,-561.65 390.75,-547.92 514,-538.74 649.42,-528.65 683.8,-533.41 819,-520.74 871.15,-515.85 930.63,-507.9 971.27,-502.1"/>
+<polygon fill="black" stroke="black" points="971.78,-505.56 981.18,-500.67 970.78,-498.63 971.78,-505.56"/>
</g>
<!-- gstreamer->JACK -->
-<g id="edge104" class="edge">
+<g id="edge87" class="edge">
<title>gstreamer->JACK</title>
-<path fill="none" stroke="black" d="M872.22,-666.31C822.57,-656.67 752.03,-642.81 746,-640.74 574.31,-581.83 566.09,-495.5 398,-427 372.22,-416.49 364.46,-417.65 338,-409 334.47,-407.85 330.81,-406.62 327.16,-405.36"/>
-<polygon fill="black" stroke="black" points="328.18,-402.01 317.59,-402.03 325.88,-408.62 328.18,-402.01"/>
+<path fill="none" stroke="black" d="M105.67,-557.69C103.36,-552.1 101.16,-545.78 100,-539.74 93.89,-507.99 87.63,-496.87 100,-467 112.99,-435.64 128.32,-435.2 154,-413 195.09,-377.48 202.24,-361.76 252,-340 298.49,-319.67 356.48,-311.14 395.67,-307.57"/>
+<polygon fill="black" stroke="black" points="396.03,-311.05 405.7,-306.72 395.44,-304.07 396.03,-311.05"/>
</g>
<!-- gstreamer->OSS -->
-<g id="edge103" class="edge">
+<g id="edge86" class="edge">
<title>gstreamer->OSS</title>
-<path fill="none" stroke="black" d="M966.33,-665.11C1009.04,-654.86 1074.71,-638.47 1131,-621.74 1202.5,-600.49 1217.37,-585.02 1290,-568 1348.08,-554.39 1365.77,-566.82 1423,-550 1459.24,-539.34 1464.12,-525.83 1500,-514 1538.33,-501.36 1556.71,-520.2 1589,-496 1651.68,-449.02 1622.41,-401.44 1671,-340 1698.96,-304.64 1739.61,-271.81 1766.65,-251.84"/>
-<polygon fill="black" stroke="black" points="1768.89,-254.54 1774.92,-245.83 1764.78,-248.88 1768.89,-254.54"/>
+<path fill="none" stroke="black" d="M120.53,-557.48C130.19,-534.03 150.42,-492.15 180,-467 276.57,-384.87 322.7,-395.85 444,-359 484.37,-346.74 495.12,-345.11 537,-340 729.07,-316.56 778.68,-330.25 972,-322 1096.63,-316.68 1243.81,-310.15 1315.45,-306.95"/>
+<polygon fill="black" stroke="black" points="1316.04,-310.43 1325.87,-306.48 1315.72,-303.43 1316.04,-310.43"/>
</g>
<!-- gstreamer->sndio -->
-<g id="edge55" class="edge">
+<g id="edge47" class="edge">
<title>gstreamer->sndio</title>
-<path fill="none" stroke="black" d="M923.34,-658.68C924.02,-652.99 924.67,-646.6 925,-640.74 926.84,-608.39 927.37,-599.56 920,-568 898.69,-476.78 887.87,-453.52 840,-373 803.67,-311.9 763.44,-315.74 739,-249 720.17,-197.58 720.31,-174.35 746,-126 753.08,-112.68 764.77,-100.94 775.89,-91.84"/>
-<polygon fill="black" stroke="black" points="778.06,-94.59 783.81,-85.69 773.77,-89.06 778.06,-94.59"/>
+<path fill="none" stroke="black" d="M70.58,-563.3C38.36,-551.88 0,-530.76 0,-494.87 0,-494.87 0,-494.87 0,-216 0,-203 817.68,-158.35 1021.44,-147.43"/>
+<polygon fill="black" stroke="black" points="1021.7,-150.92 1031.5,-146.89 1021.33,-143.93 1021.7,-150.92"/>
</g>
<!-- gstreamer->PulseAudio -->
-<g id="edge105" class="edge">
+<g id="edge88" class="edge">
<title>gstreamer->PulseAudio</title>
-<path fill="none" stroke="black" d="M920.69,-658.45C919.49,-635.72 914.49,-595.46 895,-568 891.45,-563 830.38,-524.55 790.68,-499.85"/>
-<polygon fill="black" stroke="black" points="792.42,-496.8 782.08,-494.5 788.72,-502.75 792.42,-496.8"/>
+<path fill="none" stroke="black" d="M133.22,-558.53C175.14,-524.29 279.29,-445.07 382,-413 453.9,-390.55 665.75,-382.28 778.49,-379.41"/>
+<polygon fill="black" stroke="black" points="778.84,-382.91 788.75,-379.16 778.67,-375.91 778.84,-382.91"/>
</g>
<!-- gstreamer->PipeWire -->
-<g id="edge20" class="edge">
+<g id="edge18" class="edge">
<title>gstreamer->PipeWire</title>
-<path fill="none" stroke="black" d="M880.62,-663.48C851.52,-653.91 811.77,-639.32 779,-621.74 670.15,-563.36 662.09,-517.92 553,-460 515.74,-440.22 504.24,-439.67 464,-427 433.77,-417.48 416.59,-432.2 395,-409 376.14,-388.73 376.22,-355.66 379.35,-332.26"/>
-<polygon fill="black" stroke="black" points="382.82,-332.7 380.95,-322.27 375.91,-331.6 382.82,-332.7"/>
+<path fill="none" stroke="black" d="M103.51,-557.98C97.77,-547.68 91.36,-533.96 89,-520.74 80.55,-473.35 74.4,-453.76 100,-413 165.98,-307.94 310.42,-253.62 388.11,-231.05"/>
+<polygon fill="black" stroke="black" points="389.49,-234.3 398.16,-228.2 387.58,-227.57 389.49,-234.3"/>
</g>
-<!-- libao->filesystem -->
-<g id="edge30" class="edge">
-<title>libao->filesystem</title>
-<path fill="none" stroke="black" d="M1052.53,-292.14C1069.61,-284.92 1092.6,-275.28 1113,-267 1127,-261.32 1142.29,-255.25 1156.19,-249.8"/>
-<polygon fill="black" stroke="black" points="1157.52,-253.03 1165.56,-246.13 1154.97,-246.52 1157.52,-253.03"/>
+<!-- sox -->
+<g id="node16" class="node">
+<title>sox</title>
+<g id="a_node16"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox">
+<ellipse fill="lightgrey" stroke="black" cx="1490" cy="-648.74" rx="27" ry="18"/>
+<text text-anchor="middle" x="1490" y="-645.04" font-family="Times,serif" font-size="14.00">sox</text>
+</a>
</g>
-<!-- libao->null -->
-<g id="edge36" class="edge">
-<title>libao->null</title>
-<path fill="none" stroke="red" d="M1038.8,-286.89C1046.08,-276.95 1055.51,-264.07 1063.4,-253.3"/>
-<polygon fill="red" stroke="red" points="1066.25,-255.33 1069.34,-245.2 1060.6,-251.2 1066.25,-255.33"/>
+</g>
+<!-- sox->ALSA -->
+<g id="edge24" class="edge">
+<title>sox->ALSA</title>
+<path fill="none" stroke="black" d="M1463.01,-646.34C1370.5,-641.3 1070.19,-622.8 1039,-593.74 1019.77,-575.82 1016.57,-544.83 1017.21,-522.32"/>
+<polygon fill="black" stroke="black" points="1020.72,-522.22 1017.78,-512.04 1013.73,-521.83 1020.72,-522.22"/>
+</g>
+<!-- sox->sndio -->
+<g id="edge25" class="edge">
+<title>sox->sndio</title>
+<path fill="none" stroke="black" d="M1495.57,-630.98C1517.53,-563.57 1594.58,-312.92 1547,-253 1533.19,-235.61 1225.03,-175.2 1109.89,-153.14"/>
+<polygon fill="black" stroke="black" points="1110.48,-149.69 1100,-151.25 1109.17,-156.57 1110.48,-149.69"/>
+</g>
+<!-- sox->PulseAudio -->
+<g id="edge23" class="edge">
+<title>sox->PulseAudio</title>
+<path fill="none" stroke="black" d="M1474.82,-623.55C1461.12,-603.45 1439.26,-575.39 1414,-557.74 1256.8,-447.88 1029.02,-402.63 917.53,-386.2"/>
+<polygon fill="black" stroke="black" points="1471.91,-625.49 1480.36,-631.88 1477.74,-621.62 1471.91,-625.49"/>
+<polygon fill="black" stroke="black" points="917.83,-382.71 907.43,-384.75 916.83,-389.64 917.83,-382.71"/>
+</g>
+<!-- libao -->
+<g id="node17" class="node">
+<title>libao</title>
+<g id="a_node17"><a xlink:href="https://www.xiph.org/ao/" xlink:title="libao">
+<ellipse fill="lightgrey" stroke="black" cx="1570" cy="-575.74" rx="33.29" ry="18"/>
+<text text-anchor="middle" x="1570" y="-572.04" 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="M1505.81,-633.71C1517.19,-623.61 1532.77,-609.78 1545.73,-598.28"/>
+<polygon fill="black" stroke="black" points="1548.25,-600.73 1553.4,-591.47 1543.6,-595.49 1548.25,-600.73"/>
</g>
<!-- libao->ALSA -->
-<g id="edge32" class="edge">
+<g id="edge27" class="edge">
<title>libao->ALSA</title>
-<path fill="none" stroke="black" d="M1047.45,-318.19C1064.22,-330.25 1086.94,-349.72 1098,-373 1131.8,-444.12 1124.83,-473.54 1106,-550 1104.52,-555.99 1102.07,-562.07 1099.3,-567.72"/>
-<polygon fill="black" stroke="black" points="1096.11,-566.26 1094.46,-576.72 1102.28,-569.57 1096.11,-566.26"/>
+<path fill="none" stroke="black" d="M1538.45,-570.16C1446.8,-556.85 1180.02,-518.11 1069.18,-502.01"/>
+<polygon fill="black" stroke="black" points="1069.35,-498.5 1058.95,-500.53 1068.34,-505.43 1069.35,-498.5"/>
</g>
<!-- libao->OSS -->
-<g id="edge31" class="edge">
+<g id="edge26" class="edge">
<title>libao->OSS</title>
-<path fill="none" stroke="black" d="M1059.51,-299.99C1181.52,-288.71 1612.28,-248.89 1751.36,-236.03"/>
-<polygon fill="black" stroke="black" points="1751.99,-239.49 1761.62,-235.09 1751.34,-232.52 1751.99,-239.49"/>
+<path fill="none" stroke="black" d="M1557.94,-558.65C1550.32,-548.15 1540.54,-533.97 1533,-520.74 1489.15,-443.78 1513.61,-400.59 1449,-340 1436.04,-327.84 1418.38,-319.75 1402.14,-314.45"/>
+<polygon fill="black" stroke="black" points="1402.84,-311.01 1392.26,-311.49 1400.84,-317.71 1402.84,-311.01"/>
</g>
<!-- libao->sndio -->
-<g id="edge39" class="edge">
+<g id="edge33" class="edge">
<title>libao->sndio</title>
-<path fill="none" stroke="black" d="M1000.88,-292.74C994.15,-290.32 986.86,-287.89 980,-286 939.42,-274.81 921.3,-292.41 887,-268 879.05,-262.34 880.03,-257.89 876,-249 848.51,-188.32 857.2,-166.88 828,-107 826.34,-103.6 824.41,-100.13 822.37,-96.77"/>
-<polygon fill="black" stroke="black" points="825.24,-94.75 816.9,-88.22 819.35,-98.53 825.24,-94.75"/>
+<path fill="none" stroke="black" d="M1596.32,-564.79C1623.2,-552.71 1661,-529.55 1661,-494.87 1661,-494.87 1661,-494.87 1661,-259.5 1661,-231.32 1663.91,-216.72 1642,-199 1601.2,-166 1242.55,-150.86 1113.23,-146.44"/>
+<polygon fill="black" stroke="black" points="1112.99,-142.93 1102.88,-146.09 1112.76,-149.92 1112.99,-142.93"/>
</g>
<!-- libao->PulseAudio -->
-<g id="edge34" class="edge">
+<g id="edge29" class="edge">
<title>libao->PulseAudio</title>
-<path fill="none" stroke="black" d="M1011.45,-320.1C982.44,-347.59 917.15,-406.26 853,-442 839.27,-449.65 823.55,-456.2 808.85,-461.49"/>
-<polygon fill="black" stroke="black" points="807.67,-458.19 799.38,-464.78 809.97,-464.8 807.67,-458.19"/>
+<path fill="none" stroke="black" d="M1544.08,-564.18C1520.65,-554.21 1485.56,-538.22 1457,-520.74 1389.73,-479.58 1389.71,-441.06 1316,-413 1306.91,-409.54 1049.11,-391.53 921.37,-382.78"/>
+<polygon fill="black" stroke="black" points="921.5,-379.28 911.29,-382.09 921.02,-386.27 921.5,-379.28"/>
</g>
<!-- libao->aRts -->
-<g id="edge33" class="edge">
+<g id="edge28" class="edge">
<title>libao->aRts</title>
-<path fill="none" stroke="black" d="M1000.1,-293.26C974.6,-283.89 939.88,-270.76 938,-268 937.75,-267.63 937.83,-267.41 938,-267 963.79,-205.56 997.67,-208.89 1045,-162 1069.56,-137.67 1068.8,-121.89 1100,-107 1150.27,-83.01 1312.21,-75.31 1389.79,-72.97"/>
-<polygon fill="black" stroke="black" points="1390.27,-76.46 1400.16,-72.67 1390.07,-69.46 1390.27,-76.46"/>
+<path fill="none" stroke="black" d="M1602.84,-572.31C1636.22,-567.9 1686.4,-555.52 1711,-520.74 1790.14,-408.84 1807.9,-238.48 1811.87,-172.47"/>
+<polygon fill="black" stroke="black" points="1815.39,-172.26 1812.43,-162.09 1808.4,-171.89 1815.39,-172.26"/>
</g>
<!-- ESD -->
-<g id="node21" class="node">
+<g id="node19" class="node">
<title>ESD</title>
-<ellipse fill="lightgrey" stroke="black" cx="1586" cy="-71" rx="31.4" ry="18"/>
-<text text-anchor="middle" x="1586" y="-67.3" font-family="Times,serif" font-size="14.00">ESD</text>
+<ellipse fill="lightgrey" stroke="black" cx="1697" cy="-144" rx="31.4" ry="18"/>
+<text text-anchor="middle" x="1697" y="-140.3" font-family="Times,serif" font-size="14.00">ESD</text>
</g>
<!-- libao->ESD -->
-<g id="edge35" class="edge">
+<g id="edge30" class="edge">
<title>libao->ESD</title>
-<path fill="none" stroke="black" d="M1022.06,-286.01C1017.43,-266.21 1013.43,-233.58 1030,-213 1063.22,-171.74 1425.39,-101.65 1546.68,-79.17"/>
-<polygon fill="black" stroke="black" points="1547.46,-82.58 1556.66,-77.32 1546.19,-75.7 1547.46,-82.58"/>
+<path fill="none" stroke="black" d="M1602.52,-571.19C1624.82,-567.12 1653.6,-558.41 1672,-539.74 1704.62,-506.65 1737,-387.47 1737,-341 1737,-341 1737,-341 1737,-216 1737,-198.36 1727.51,-181.06 1717.78,-167.95"/>
+<polygon fill="black" stroke="black" points="1720.4,-165.63 1711.44,-159.99 1714.92,-169.99 1720.4,-165.63"/>
</g>
<!-- NAS -->
-<g id="node22" class="node">
+<g id="node20" class="node">
<title>NAS</title>
-<g id="a_node22"><a xlink:href="http://radscan.com/nas.html" xlink:title="Network Audio System/Server">
-<ellipse fill="lightgrey" stroke="black" cx="2327" cy="-231" rx="151.37" ry="18"/>
-<text text-anchor="middle" x="2327" y="-227.3" font-family="Times,serif" font-size="14.00">Network Audio System/Server</text>
+<g id="a_node20"><a xlink:href="http://radscan.com/nas.html" xlink:title="Network Audio System/Server">
+<ellipse fill="lightgrey" stroke="black" cx="1954" cy="-493.87" rx="151.37" ry="18"/>
+<text text-anchor="middle" x="1954" y="-490.17" font-family="Times,serif" font-size="14.00">Network Audio System/Server</text>
</a>
</g>
</g>
<!-- libao->NAS -->
-<g id="edge37" class="edge">
+<g id="edge31" class="edge">
<title>libao->NAS</title>
-<path fill="none" stroke="black" d="M1059.79,-301.21C1215.41,-292.71 1884.39,-256.17 2182.59,-239.89"/>
-<polygon fill="black" stroke="black" points="2182.81,-243.38 2192.6,-239.34 2182.43,-236.39 2182.81,-243.38"/>
+<path fill="none" stroke="black" d="M1600.45,-568.41C1658.64,-556.3 1787.38,-529.53 1872.39,-511.84"/>
+<polygon fill="black" stroke="black" points="1873.2,-515.25 1882.27,-509.79 1871.77,-508.4 1873.2,-515.25"/>
</g>
<!-- libao->RoarAudio -->
-<g id="edge38" class="edge">
+<g id="edge32" class="edge">
<title>libao->RoarAudio</title>
-<path fill="none" stroke="black" d="M1000.87,-292.78C994.14,-290.35 986.85,-287.92 980,-286 941.14,-275.11 916.55,-299.24 891,-268 865.4,-236.71 889.18,-211.91 914,-180 918.97,-173.61 925.45,-168.22 932.36,-163.72"/>
-<polygon fill="black" stroke="black" points="934.41,-166.58 941.26,-158.5 930.87,-160.54 934.41,-166.58"/>
+<path fill="none" stroke="black" d="M1573.2,-557.53C1581.64,-511.05 1604.44,-379.01 1612,-268 1612.45,-261.35 1614.68,-259.11 1612,-253 1610.13,-248.73 1607.44,-244.74 1604.36,-241.11"/>
+<polygon fill="black" stroke="black" points="1606.63,-238.42 1597.12,-233.74 1601.63,-243.33 1606.63,-238.42"/>
</g>
<!-- ESD->ALSA -->
-<g id="edge46" class="edge">
+<g id="edge40" class="edge">
<title>ESD->ALSA</title>
-<path fill="none" stroke="black" d="M1576.94,-88.67C1539.41,-156.28 1388.95,-412.9 1196,-550 1175.4,-564.64 1149.25,-575.2 1127.3,-582.28"/>
-<polygon fill="black" stroke="black" points="1126.07,-579 1117.55,-585.3 1128.13,-585.69 1126.07,-579"/>
+<path fill="none" stroke="black" d="M1665.68,-145.98C1566.37,-149.43 1259.67,-162.81 1168,-199 1052.08,-244.76 1085.18,-332.47 1041,-449 1038.81,-454.77 1036.17,-460.81 1033.5,-466.51"/>
+<polygon fill="black" stroke="black" points="1030.28,-465.13 1029.07,-475.66 1036.58,-468.19 1030.28,-465.13"/>
</g>
<!-- ESD->OSS -->
-<g id="edge45" class="edge">
+<g id="edge39" class="edge">
<title>ESD->OSS</title>
-<path fill="none" stroke="black" d="M1616.9,-74.25C1712.38,-81.91 1999.65,-110.46 2055,-180 2059.15,-185.22 2059.39,-189.98 2055,-195 2027.4,-226.57 1904.97,-230.83 1838.42,-230.74"/>
-<polygon fill="black" stroke="black" points="1838.26,-227.24 1828.25,-230.69 1838.23,-234.24 1838.26,-227.24"/>
+<path fill="none" stroke="black" d="M1666.7,-149.11C1617.9,-156.43 1525.39,-173.37 1506,-199 1496.35,-211.76 1497.03,-221.75 1506,-235 1516.61,-250.68 1574.77,-239.51 1551,-268 1532.42,-290.27 1452.82,-298.41 1402.12,-301.35"/>
+<polygon fill="black" stroke="black" points="1401.89,-297.86 1392.09,-301.89 1402.26,-304.85 1401.89,-297.86"/>
</g>
<!-- RoarAudio->sndio -->
-<g id="edge41" class="edge">
+<g id="edge35" class="edge">
<title>RoarAudio->sndio</title>
-<path fill="none" stroke="black" d="M948.59,-128.01C935.23,-121.22 918.97,-113.31 904,-107 884.49,-98.78 862.31,-90.81 843.9,-84.56"/>
-<polygon fill="black" stroke="black" points="844.96,-81.23 834.37,-81.37 842.74,-87.87 844.96,-81.23"/>
+<path fill="none" stroke="black" d="M1521.18,-208.6C1420.7,-194.53 1203.81,-164.16 1110.8,-151.13"/>
+<polygon fill="black" stroke="black" points="1111.27,-147.67 1100.88,-149.74 1110.3,-154.6 1111.27,-147.67"/>
</g>
<!-- RoarAudio->PulseAudio -->
-<g id="edge42" class="edge">
+<g id="edge36" class="edge">
<title>RoarAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M936.36,-157.13C890,-173.5 816.89,-207.65 788,-267 759.55,-325.44 847.43,-348.76 823,-409 815.71,-426.97 801.15,-442.81 787.55,-454.67"/>
-<polygon fill="black" stroke="black" points="785.17,-452.09 779.71,-461.18 789.64,-457.48 785.17,-452.09"/>
+<path fill="none" stroke="black" d="M1515.9,-220.67C1450.44,-224.5 1341.14,-233.4 1249,-253 1151.25,-273.79 1130.51,-292.59 1035,-322 990.94,-335.57 940.71,-350.26 903.87,-360.89"/>
+<polygon fill="black" stroke="black" points="902.49,-357.64 893.85,-363.77 904.43,-364.37 902.49,-357.64"/>
</g>
<!-- RoarAudio->aRts -->
-<g id="edge44" class="edge">
+<g id="edge38" class="edge">
<title>RoarAudio->aRts</title>
-<path fill="none" stroke="black" d="M1002.43,-127.58C1016.05,-120.07 1033.41,-111.68 1050,-107 1113.07,-89.22 1304.91,-78.09 1390.27,-73.9"/>
-<polygon fill="black" stroke="black" points="1390.56,-77.39 1400.38,-73.41 1390.22,-70.4 1390.56,-77.39"/>
+<path fill="none" stroke="black" d="M1614.81,-203.88C1659.96,-190.46 1732.08,-169.04 1775.74,-156.07"/>
+<polygon fill="black" stroke="black" points="1776.82,-159.4 1785.4,-153.2 1774.82,-152.69 1776.82,-159.4"/>
</g>
<!-- RoarAudio->ESD -->
-<g id="edge43" class="edge">
+<g id="edge37" class="edge">
<title>RoarAudio->ESD</title>
-<path fill="none" stroke="black" d="M1014.25,-129.91C1039.07,-121.81 1072.58,-112.02 1103,-107 1265.44,-80.21 1309.17,-105.27 1473,-89 1497.43,-86.57 1524.65,-82.52 1546.25,-78.98"/>
-<polygon fill="black" stroke="black" points="1547.07,-82.39 1556.36,-77.29 1545.92,-75.49 1547.07,-82.39"/>
+<path fill="none" stroke="black" d="M1600.39,-200.77C1619.85,-189.53 1646.38,-174.22 1666.71,-162.49"/>
+<polygon fill="black" stroke="black" points="1668.66,-165.4 1675.57,-157.37 1665.16,-159.34 1668.66,-165.4"/>
</g>
<!-- libcanberra -->
-<g id="node24" class="node">
+<g id="node22" 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="1579" cy="-749.74" rx="63.89" ry="18"/>
-<text text-anchor="middle" x="1579" y="-746.04" font-family="Times,serif" font-size="14.00">libcanberra</text>
+<g id="a_node22"><a xlink:href="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" xlink:title="libcanberra">
+<ellipse fill="lightgrey" stroke="black" cx="573" cy="-648.74" rx="63.89" ry="18"/>
+<text text-anchor="middle" x="573" y="-645.04" font-family="Times,serif" font-size="14.00">libcanberra</text>
</a>
</g>
</g>
-<!-- libcanberra->null -->
-<g id="edge51" class="edge">
-<title>libcanberra->null</title>
-<path fill="none" stroke="red" d="M1586.21,-731.59C1602.21,-690.63 1636.1,-585.17 1594,-514 1565.62,-466.03 1209.89,-294.22 1106.81,-245.16"/>
-<polygon fill="red" stroke="red" points="1108.18,-241.94 1097.65,-240.81 1105.18,-248.26 1108.18,-241.94"/>
-</g>
<!-- libcanberra->ALSA -->
-<g id="edge49" class="edge">
+<g id="edge43" class="edge">
<title>libcanberra->ALSA</title>
-<path fill="none" stroke="black" d="M1516.13,-746.67C1386.74,-741.76 1100.28,-727.3 1071,-694.74 1053.55,-675.34 1060.84,-644.46 1069.77,-622.37"/>
-<polygon fill="black" stroke="black" points="1073.1,-623.48 1073.9,-612.92 1066.69,-620.68 1073.1,-623.48"/>
+<path fill="none" stroke="black" d="M635.9,-645.5C701.09,-641.24 804.76,-628.98 887,-593.74 929.24,-575.64 970.54,-541.64 995.64,-518.63"/>
+<polygon fill="black" stroke="black" points="998.27,-520.96 1003.19,-511.58 993.49,-515.84 998.27,-520.96"/>
</g>
<!-- libcanberra->OSS -->
-<g id="edge48" class="edge">
+<g id="edge42" class="edge">
<title>libcanberra->OSS</title>
-<path fill="none" stroke="black" d="M1602.56,-732.95C1659.43,-694.86 1803.08,-598.85 1852,-568 1865.15,-559.71 1872.08,-561.97 1882,-550 1922.79,-500.76 1973.31,-317.43 1934,-267 1922.27,-251.95 1874.71,-242.37 1838.46,-237.11"/>
-<polygon fill="black" stroke="black" points="1838.48,-233.58 1828.1,-235.68 1837.52,-240.51 1838.48,-233.58"/>
+<path fill="none" stroke="black" d="M552.78,-631.54C542.33,-621.83 530.62,-608.51 525,-593.74 508.07,-549.2 490.81,-479.13 539,-413 574.64,-364.09 605.38,-374.03 664,-359 788.27,-327.13 1183.37,-311.01 1315.49,-306.41"/>
+<polygon fill="black" stroke="black" points="1315.76,-309.91 1325.64,-306.06 1315.52,-302.91 1315.76,-309.91"/>
</g>
<!-- libcanberra->PulseAudio -->
-<g id="edge47" class="edge">
+<g id="edge41" class="edge">
<title>libcanberra->PulseAudio</title>
-<path fill="none" stroke="black" d="M1559.47,-732.59C1534.54,-712.71 1489.43,-679.07 1446,-658.74 1413.01,-643.3 1166.11,-577.7 1131,-568 1100.87,-559.67 1092.86,-559.26 1063,-550 1017.48,-535.89 1008.11,-526.06 962,-514 916.27,-502.04 863.71,-493.16 823.25,-487.34"/>
-<polygon fill="black" stroke="black" points="823.63,-483.86 813.24,-485.92 822.65,-490.79 823.63,-483.86"/>
+<path fill="none" stroke="black" d="M597.1,-631.82C610.64,-622.02 627.14,-608.52 639,-593.74 678.5,-544.53 660.26,-513.43 703,-467 732.02,-435.48 774.75,-411.42 806.85,-396.31"/>
+<polygon fill="black" stroke="black" points="808.39,-399.45 816.02,-392.1 805.47,-393.09 808.39,-399.45"/>
</g>
<!-- libcanberra->gstreamer -->
-<g id="edge50" class="edge">
+<g id="edge44" class="edge">
<title>libcanberra->gstreamer</title>
-<path fill="none" stroke="black" d="M1518.86,-743.62C1418.89,-734.92 1212.26,-716.09 1038,-694.74 1020.03,-692.54 1000.56,-689.84 982.75,-687.24"/>
-<polygon fill="black" stroke="black" points="982.88,-683.72 972.48,-685.73 981.86,-690.65 982.88,-683.72"/>
+<path fill="none" stroke="black" d="M514.86,-641.26C439.08,-632.43 302.59,-615.24 187,-593.74 180.87,-592.6 174.48,-591.29 168.14,-589.92"/>
+<polygon fill="black" stroke="black" points="168.78,-586.47 158.26,-587.72 167.26,-593.31 168.78,-586.47"/>
</g>
<!-- OpenAL -->
-<g id="node25" class="node">
+<g id="node23" class="node">
<title>OpenAL</title>
-<g id="a_node25"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL">
-<ellipse fill="lightgrey" stroke="black" cx="1075" cy="-749.74" rx="47.39" ry="18"/>
-<text text-anchor="middle" x="1075" y="-746.04" font-family="Times,serif" font-size="14.00">OpenAL</text>
+<g id="a_node23"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL">
+<ellipse fill="lightgrey" stroke="black" cx="963" cy="-648.74" rx="47.39" ry="18"/>
+<text text-anchor="middle" x="963" y="-645.04" font-family="Times,serif" font-size="14.00">OpenAL</text>
</a>
</g>
</g>
-<!-- OpenAL->filesystem -->
-<g id="edge62" class="edge">
-<title>OpenAL->filesystem</title>
-<path fill="none" stroke="black" d="M1122.47,-749.17C1212.94,-748.88 1404.7,-742.49 1446,-694.74 1513.47,-616.74 1337.34,-341.47 1266,-267 1260.39,-261.15 1253.59,-256.04 1246.54,-251.66"/>
-<polygon fill="black" stroke="black" points="1247.97,-248.44 1237.55,-246.5 1244.49,-254.51 1247.97,-248.44"/>
-</g>
-<!-- OpenAL->null -->
-<g id="edge64" class="edge">
-<title>OpenAL->null</title>
-<path fill="none" stroke="red" d="M1122.26,-748.15C1223.75,-746.4 1455.3,-739.59 1479,-713.74 1511.97,-677.79 1487.91,-575.47 1447,-514 1402.11,-446.56 1362.65,-457.82 1298,-409 1224.01,-353.13 1139.45,-282.89 1100.59,-250.24"/>
-<polygon fill="red" stroke="red" points="1102.49,-247.26 1092.59,-243.5 1097.98,-252.62 1102.49,-247.26"/>
-</g>
<!-- OpenAL->portaudio -->
-<g id="edge60" class="edge">
+<g id="edge52" class="edge">
<title>OpenAL->portaudio</title>
-<path fill="none" stroke="black" d="M1089.15,-732.27C1096.81,-723.35 1106.43,-712.15 1114.96,-702.23"/>
-<polygon fill="black" stroke="black" points="1117.64,-704.48 1121.51,-694.61 1112.33,-699.92 1117.64,-704.48"/>
+<path fill="none" stroke="black" d="M990.52,-633.88C1012.03,-623.05 1042.17,-607.88 1065.98,-595.88"/>
+<polygon fill="black" stroke="black" points="1067.74,-598.92 1075.09,-591.3 1064.59,-592.67 1067.74,-598.92"/>
</g>
<!-- OpenAL->ALSA -->
-<g id="edge57" class="edge">
+<g id="edge49" class="edge">
<title>OpenAL->ALSA</title>
-<path fill="none" stroke="black" d="M1060.11,-732.63C1051.84,-722.56 1042.37,-708.85 1038,-694.74 1033.27,-679.46 1033.11,-673.97 1038,-658.74 1042.45,-644.89 1051.19,-631.5 1059.8,-620.66"/>
-<polygon fill="black" stroke="black" points="1062.56,-622.82 1066.28,-612.9 1057.19,-618.33 1062.56,-622.82"/>
+<path fill="none" stroke="black" d="M969.32,-630.8C979.2,-604.28 998.41,-552.77 1010.13,-521.33"/>
+<polygon fill="black" stroke="black" points="1013.44,-522.48 1013.65,-511.89 1006.88,-520.04 1013.44,-522.48"/>
</g>
<!-- OpenAL->JACK -->
-<g id="edge61" class="edge">
+<g id="edge53" class="edge">
<title>OpenAL->JACK</title>
-<path fill="none" stroke="black" d="M1027.67,-748.01C880.7,-745.34 439,-734.08 389,-694.74 344.45,-659.69 307.76,-486.59 294.91,-419.05"/>
-<polygon fill="black" stroke="black" points="298.34,-418.34 293.06,-409.16 291.46,-419.63 298.34,-418.34"/>
+<path fill="none" stroke="black" d="M916.64,-644.79C768.15,-635.22 313.43,-605.05 303,-593.74 231.56,-516.22 268.7,-439.3 337,-359 353.79,-339.26 379.63,-325.74 401.23,-317.17"/>
+<polygon fill="black" stroke="black" points="402.68,-320.36 410.81,-313.57 400.22,-313.81 402.68,-320.36"/>
</g>
<!-- OpenAL->OSS -->
-<g id="edge58" class="edge">
+<g id="edge50" class="edge">
<title>OpenAL->OSS</title>
-<path fill="none" stroke="black" d="M1122.4,-747.8C1216.98,-745.42 1425.82,-737.57 1493,-713.74 1679.92,-647.44 1745.64,-593.27 1819,-409 1842.7,-349.46 1873.32,-323.98 1844,-267 1840.3,-259.81 1834.36,-253.77 1827.88,-248.84"/>
-<polygon fill="black" stroke="black" points="1829.75,-245.88 1819.5,-243.19 1825.83,-251.68 1829.75,-245.88"/>
+<path fill="none" stroke="black" d="M1009.98,-645.58C1120.07,-640.05 1387.47,-623.64 1414,-593.74 1430.82,-574.78 1451.99,-733.68 1391,-359 1389.61,-350.48 1390.68,-347.8 1387,-340 1385.29,-336.38 1383.14,-332.81 1380.79,-329.4"/>
+<polygon fill="black" stroke="black" points="1383.53,-327.21 1374.7,-321.36 1377.95,-331.44 1383.53,-327.21"/>
</g>
<!-- OpenAL->sndio -->
-<g id="edge63" class="edge">
+<g id="edge54" class="edge">
<title>OpenAL->sndio</title>
-<path fill="none" stroke="black" d="M1027.24,-748.98C887.42,-749.09 481.19,-744.95 360,-694.74 185.6,-622.49 114,-537.27 114,-348.5 114,-348.5 114,-348.5 114,-143 114,-78.01 603.87,-72.13 758.69,-71.89"/>
-<polygon fill="black" stroke="black" points="758.82,-75.39 768.82,-71.88 758.82,-68.39 758.82,-75.39"/>
+<path fill="none" stroke="black" d="M916.31,-645.28C775.4,-637.68 360.53,-613.82 303,-593.74 183.94,-552.17 117.69,-451.82 176,-340 226.63,-242.92 274.92,-235.9 378,-199 438.27,-177.42 876.87,-154.29 1021.14,-147.19"/>
+<polygon fill="black" stroke="black" points="1021.59,-150.68 1031.41,-146.69 1021.25,-143.69 1021.59,-150.68"/>
</g>
<!-- OpenAL->PulseAudio -->
-<g id="edge56" class="edge">
+<g id="edge48" class="edge">
<title>OpenAL->PulseAudio</title>
-<path fill="none" stroke="black" d="M1028.08,-746.89C913.78,-741.9 628.22,-726.35 600,-694.74 540.6,-628.21 659.35,-539.72 721.88,-499.94"/>
-<polygon fill="black" stroke="black" points="724.06,-502.71 730.67,-494.43 720.34,-496.77 724.06,-502.71"/>
+<path fill="none" stroke="black" d="M961.74,-630.59C958,-589.61 944.02,-484.13 896,-413 892.88,-408.39 888.97,-404.11 884.75,-400.25"/>
+<polygon fill="black" stroke="black" points="886.86,-397.45 876.94,-393.75 882.39,-402.84 886.86,-397.45"/>
</g>
<!-- SoundIO -->
-<g id="node26" class="node">
+<g id="node24" class="node">
<title>SoundIO</title>
-<g id="a_node26"><a xlink:href="http://libsound.io/" xlink:title="SoundIO">
-<ellipse fill="lightgrey" stroke="black" cx="660" cy="-676.74" rx="50.89" ry="18"/>
-<text text-anchor="middle" x="660" y="-673.04" font-family="Times,serif" font-size="14.00">SoundIO</text>
+<g id="a_node24"><a xlink:href="http://libsound.io/" xlink:title="SoundIO">
+<ellipse fill="lightgrey" stroke="black" cx="827" cy="-575.74" rx="50.89" ry="18"/>
+<text text-anchor="middle" x="827" y="-572.04" font-family="Times,serif" font-size="14.00">SoundIO</text>
</a>
</g>
</g>
<!-- OpenAL->SoundIO -->
-<g id="edge59" class="edge">
+<g id="edge51" class="edge">
<title>OpenAL->SoundIO</title>
-<path fill="none" stroke="black" d="M1031.65,-742.39C967.85,-732.9 844.95,-714.04 741,-694.74 731.56,-692.99 721.54,-690.99 711.87,-689"/>
-<polygon fill="black" stroke="black" points="712.47,-685.55 701.97,-686.94 711.04,-692.4 712.47,-685.55"/>
-</g>
-<!-- SoundIO->null -->
-<g id="edge68" class="edge">
-<title>SoundIO->null</title>
-<path fill="none" stroke="red" d="M619.02,-666.1C582.9,-656.9 529.27,-641.52 485,-621.74 340.21,-557.03 141.27,-579.15 186,-427 207.97,-352.29 219.6,-319.27 290,-286 336.55,-264 701.66,-271.83 753,-268 856.6,-260.28 978.11,-245.28 1039.38,-237.3"/>
-<polygon fill="red" stroke="red" points="1039.94,-240.75 1049.4,-235.98 1039.03,-233.81 1039.94,-240.75"/>
+<path fill="none" stroke="black" d="M936.13,-633.71C915.31,-622.84 886.25,-607.67 863.35,-595.72"/>
+<polygon fill="black" stroke="black" points="864.76,-592.51 854.28,-590.98 861.52,-598.71 864.76,-592.51"/>
</g>
<!-- SoundIO->ALSA -->
-<g id="edge67" class="edge">
+<g id="edge57" class="edge">
<title>SoundIO->ALSA</title>
-<path fill="none" stroke="black" d="M702.42,-666.63C714.84,-664.02 728.45,-661.21 741,-658.74 845.3,-638.21 967.92,-616.18 1034.31,-604.42"/>
-<polygon fill="black" stroke="black" points="1035.24,-607.82 1044.47,-602.63 1034.02,-600.92 1035.24,-607.82"/>
+<path fill="none" stroke="black" d="M858.87,-561.55C892.73,-547.54 946.24,-525.39 982.2,-510.51"/>
+<polygon fill="black" stroke="black" points="983.95,-513.58 991.85,-506.52 981.27,-507.11 983.95,-513.58"/>
</g>
<!-- SoundIO->JACK -->
-<g id="edge65" class="edge">
+<g id="edge55" class="edge">
<title>SoundIO->JACK</title>
-<path fill="none" stroke="black" d="M631.6,-661.73C619.77,-655.63 606.02,-648.18 594,-640.74 535,-604.24 519.56,-595.28 467,-550 409.37,-500.35 407.5,-474.38 348,-427 340.08,-420.69 330.93,-414.67 322.27,-409.45"/>
-<polygon fill="black" stroke="black" points="323.89,-406.35 313.49,-404.33 320.36,-412.39 323.89,-406.35"/>
+<path fill="none" stroke="black" d="M787.91,-564.13C755.51,-554.66 708.66,-539.44 670,-520.74 616.78,-495 602.44,-487.99 558,-449 516.21,-412.33 477.3,-359.92 456.27,-329.48"/>
+<polygon fill="black" stroke="black" points="459.11,-327.43 450.58,-321.15 453.33,-331.38 459.11,-327.43"/>
</g>
<!-- SoundIO->PulseAudio -->
-<g id="edge66" class="edge">
+<g id="edge56" class="edge">
<title>SoundIO->PulseAudio</title>
-<path fill="none" stroke="black" d="M668.27,-658.97C685.19,-624.64 723.88,-546.17 744.12,-505.12"/>
-<polygon fill="black" stroke="black" points="747.33,-506.53 748.61,-496.01 741.05,-503.43 747.33,-506.53"/>
+<path fill="none" stroke="black" d="M853.05,-560.09C866.79,-550.78 882.36,-537.36 890,-520.74 907.92,-481.78 885.89,-432.93 868.38,-403.66"/>
+<polygon fill="black" stroke="black" points="871.18,-401.52 862.92,-394.88 865.23,-405.22 871.18,-401.52"/>
</g>
<!-- RtAudio -->
-<g id="node27" class="node">
+<g id="node25" class="node">
<title>RtAudio</title>
-<g id="a_node27"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio">
-<ellipse fill="lightgrey" stroke="black" cx="446" cy="-676.74" rx="48.19" ry="18"/>
-<text text-anchor="middle" x="446" y="-673.04" font-family="Times,serif" font-size="14.00">RtAudio</text>
+<g id="a_node25"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio">
+<ellipse fill="lightgrey" stroke="black" cx="582" cy="-575.74" rx="48.19" ry="18"/>
+<text text-anchor="middle" x="582" y="-572.04" font-family="Times,serif" font-size="14.00">RtAudio</text>
</a>
</g>
</g>
<!-- RtAudio->ALSA -->
-<g id="edge70" class="edge">
+<g id="edge59" class="edge">
<title>RtAudio->ALSA</title>
-<path fill="none" stroke="black" d="M491.28,-670.55C572.31,-661.21 747.44,-640.76 895,-621.74 942.19,-615.66 995.97,-608.2 1033.88,-602.86"/>
-<polygon fill="black" stroke="black" points="1034.73,-606.28 1044.14,-601.41 1033.75,-599.35 1034.73,-606.28"/>
+<path fill="none" stroke="black" d="M624.4,-567.01C706.3,-552.07 885.78,-519.35 971.96,-503.63"/>
+<polygon fill="black" stroke="black" points="972.78,-507.04 981.99,-501.8 971.53,-500.15 972.78,-507.04"/>
</g>
<!-- RtAudio->JACK -->
-<g id="edge71" class="edge">
+<g id="edge60" class="edge">
<title>RtAudio->JACK</title>
-<path fill="none" stroke="black" d="M438.49,-658.77C415.09,-606.05 344.17,-447.39 329,-427 325.38,-422.14 321.01,-417.43 316.51,-413.14"/>
-<polygon fill="black" stroke="black" points="318.72,-410.42 308.95,-406.34 314.04,-415.62 318.72,-410.42"/>
+<path fill="none" stroke="black" d="M569.16,-558.29C564.83,-552.53 560.06,-545.95 556,-539.74 500.21,-454.56 470.94,-438.63 442,-341 441.17,-338.19 440.57,-335.2 440.15,-332.19"/>
+<polygon fill="black" stroke="black" points="443.64,-331.81 439.34,-322.13 436.66,-332.38 443.64,-331.81"/>
</g>
<!-- RtAudio->OSS -->
-<g id="edge69" class="edge">
+<g id="edge58" class="edge">
<title>RtAudio->OSS</title>
-<path fill="none" stroke="black" d="M403.2,-668.5C371.4,-661.26 328.59,-647.38 299,-621.74 230.4,-562.3 224.23,-530.01 202,-442 200.37,-435.54 199.73,-433.27 202,-427 209.76,-405.57 305.02,-294.4 323,-286 366.7,-265.6 1142.81,-269.94 1191,-268 1401.14,-259.56 1652.01,-242.3 1751.38,-235.18"/>
-<polygon fill="black" stroke="black" points="1751.91,-238.65 1761.63,-234.45 1751.4,-231.67 1751.91,-238.65"/>
-<text text-anchor="middle" x="237" y="-430.8" font-family="Times,serif" font-size="14.00">OSS 4.0+</text>
+<path fill="none" stroke="black" d="M584.51,-557.7C590.13,-525.31 606.63,-454.41 648,-413 692.8,-368.16 718.44,-374.11 780,-359 975.82,-310.94 1218.51,-305 1315.75,-304.71"/>
+<polygon fill="black" stroke="black" points="1315.79,-308.21 1325.79,-304.7 1315.79,-301.21 1315.79,-308.21"/>
+<text text-anchor="middle" x="683" y="-427.3" font-family="Times,serif" font-size="14.00">OSS 4.0+</text>
</g>
<!-- RtAudio->PulseAudio -->
-<g id="edge72" class="edge">
+<g id="edge61" class="edge">
<title>RtAudio->PulseAudio</title>
-<path fill="none" stroke="black" d="M453.59,-658.88C472.14,-617.69 518.42,-515.19 520,-514 545.5,-494.85 625.52,-486.08 685.57,-482.13"/>
-<polygon fill="black" stroke="black" points="686.02,-485.61 695.78,-481.49 685.58,-478.62 686.02,-485.61"/>
+<path fill="none" stroke="black" d="M624.97,-567.5C689.49,-556.25 805.33,-534.45 819,-520.74 834.95,-504.74 844.19,-442.02 848.34,-405.26"/>
+<polygon fill="black" stroke="black" points="851.83,-405.52 849.42,-395.2 844.87,-404.77 851.83,-405.52"/>
</g>
<!-- JUCE -->
-<g id="node28" class="node">
+<g id="node26" class="node">
<title>JUCE</title>
-<ellipse fill="lightgrey" stroke="black" cx="786" cy="-676.74" rx="36" ry="18"/>
-<text text-anchor="middle" x="786" y="-673.04" font-family="Times,serif" font-size="14.00">JUCE</text>
+<ellipse fill="lightgrey" stroke="black" cx="426" cy="-575.74" rx="36" ry="18"/>
+<text text-anchor="middle" x="426" y="-572.04" font-family="Times,serif" font-size="14.00">JUCE</text>
</g>
<!-- JUCE->ALSA -->
-<g id="edge73" class="edge">
+<g id="edge62" class="edge">
<title>JUCE->ALSA</title>
-<path fill="none" stroke="black" d="M816.94,-667.42C870.14,-653.11 979.06,-623.82 1039.74,-607.5"/>
-<polygon fill="black" stroke="black" points="1040.66,-610.88 1049.41,-604.9 1038.84,-604.12 1040.66,-610.88"/>
+<path fill="none" stroke="black" d="M458.94,-568.7C478.17,-565.27 502.92,-561.02 525,-557.74 655.26,-538.37 688.36,-537.37 819,-520.74 870.96,-514.13 930.47,-506.46 971.17,-501.19"/>
+<polygon fill="black" stroke="black" points="971.63,-504.66 981.1,-499.91 970.73,-497.72 971.63,-504.66"/>
</g>
<!-- JUCE->JACK -->
-<g id="edge74" class="edge">
+<g id="edge63" class="edge">
<title>JUCE->JACK</title>
-<path fill="none" stroke="black" d="M754.8,-667.68C731.4,-661.3 698.78,-651.65 671,-640.74 653.05,-633.69 648.47,-631.77 632,-621.74 508.4,-546.44 496.28,-499.47 371,-427 357.1,-418.96 341.01,-411.64 326.84,-405.79"/>
-<polygon fill="black" stroke="black" points="327.98,-402.48 317.4,-401.99 325.37,-408.97 327.98,-402.48"/>
+<path fill="none" stroke="black" d="M424.74,-557.74C421.98,-519.21 415.5,-422.25 414,-341 413.99,-340.56 413.86,-340.42 414,-340 415.27,-336.15 417.15,-332.38 419.33,-328.82"/>
+<polygon fill="black" stroke="black" points="422.29,-330.69 425.18,-320.49 416.57,-326.66 422.29,-330.69"/>
</g>
<!-- SDL1 -->
-<g id="node29" class="node">
+<g id="node27" class="node">
<title>SDL1</title>
-<g id="a_node29"><a xlink:href="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" xlink:title="libSDL-1.2">
-<ellipse fill="lightgrey" stroke="black" cx="2340" cy="-676.74" rx="59.59" ry="18"/>
-<text text-anchor="middle" x="2340" y="-673.04" font-family="Times,serif" font-size="14.00">libSDL-1.2</text>
+<g id="a_node27"><a xlink:href="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" xlink:title="libSDL-1.2">
+<ellipse fill="lightgrey" stroke="black" cx="1773" cy="-575.74" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="1773" y="-572.04" font-family="Times,serif" font-size="14.00">libSDL-1.2</text>
</a>
</g>
</g>
-<!-- SDL1->filesystem -->
-<g id="edge86" class="edge">
-<title>SDL1->filesystem</title>
-<path fill="none" stroke="black" d="M2328.1,-659.03C2307.36,-630.14 2265.87,-573.42 2256,-568 2182.82,-527.8 2149.62,-571.72 2069,-550 1942.45,-515.91 1921.47,-478.6 1801,-427 1645.32,-360.32 1607.12,-341.15 1447,-286 1387.86,-265.63 1317.98,-251.12 1268.01,-242.31"/>
-<polygon fill="black" stroke="black" points="1268.43,-238.83 1257.98,-240.57 1267.23,-245.72 1268.43,-238.83"/>
-</g>
-<!-- SDL1->null -->
-<g id="edge90" class="edge">
-<title>SDL1->null</title>
-<path fill="none" stroke="red" d="M2337.05,-658.44C2332.07,-634.55 2319.67,-591.73 2292,-568 2203.02,-491.71 1395.78,-290.75 1281,-267 1214.82,-253.31 1195.95,-263.76 1130,-249 1123.15,-247.47 1115.92,-245.36 1109.12,-243.16"/>
-<polygon fill="red" stroke="red" points="1110.17,-239.82 1099.57,-239.92 1107.92,-246.45 1110.17,-239.82"/>
-</g>
<!-- SDL1->ALSA -->
-<g id="edge83" class="edge">
+<g id="edge70" class="edge">
<title>SDL1->ALSA</title>
-<path fill="none" stroke="black" d="M2281.89,-672.05C2068.43,-658.48 1329.76,-611.55 1132.01,-598.98"/>
-<polygon fill="black" stroke="black" points="1132.13,-595.48 1121.92,-598.34 1131.68,-602.47 1132.13,-595.48"/>
+<path fill="none" stroke="black" d="M1717.63,-568.87C1576.12,-553.86 1202.95,-514.27 1068.85,-500.05"/>
+<polygon fill="black" stroke="black" points="1069.18,-496.57 1058.87,-498.99 1068.44,-503.53 1069.18,-496.57"/>
</g>
<!-- SDL1->OSS -->
-<g id="edge88" class="edge">
+<g id="edge74" class="edge">
<title>SDL1->OSS</title>
-<path fill="none" stroke="black" d="M2348.33,-658.69C2350.64,-653.1 2352.84,-646.78 2354,-640.74 2360.44,-607.31 2350.56,-595.13 2330,-568 2254.07,-467.78 2187.35,-495.4 2096,-409 2038,-354.14 2055.04,-307.09 1986,-267 1940.41,-240.53 1879.24,-233.34 1838.54,-231.75"/>
-<polygon fill="black" stroke="black" points="1838.5,-228.25 1828.4,-231.45 1838.3,-235.24 1838.5,-228.25"/>
+<path fill="none" stroke="black" d="M1756.4,-558.45C1712.4,-516.14 1587.59,-401.79 1463,-340 1442.94,-330.05 1419.39,-321.86 1399.77,-315.91"/>
+<polygon fill="black" stroke="black" points="1400.49,-312.48 1389.91,-313.01 1398.51,-319.19 1400.49,-312.48"/>
</g>
<!-- SDL1->PulseAudio -->
-<g id="edge89" class="edge">
+<g id="edge75" class="edge">
<title>SDL1->PulseAudio</title>
-<path fill="none" stroke="black" d="M2314.71,-660.33C2299.25,-650.31 2279.53,-636.41 2264,-621.74 2241.76,-600.74 2248.41,-581.59 2221,-568 2184.7,-550 1532.42,-552.73 1492,-550 1346.56,-540.19 1311.07,-528.22 1166,-514 1046.8,-502.32 907.84,-490.89 826.43,-484.42"/>
-<polygon fill="black" stroke="black" points="826.55,-480.92 816.31,-483.61 826,-487.89 826.55,-480.92"/>
+<path fill="none" stroke="black" d="M1732.21,-562.42C1698.81,-552.06 1650.48,-536.47 1609,-520.74 1495.87,-477.84 1476.58,-441.51 1359,-413 1348.51,-410.46 1058.19,-391.41 921.24,-382.53"/>
+<polygon fill="black" stroke="black" points="921.46,-379.04 911.25,-381.89 921.01,-386.03 921.46,-379.04"/>
</g>
<!-- SDL1->aRts -->
-<g id="edge84" class="edge">
+<g id="edge71" class="edge">
<title>SDL1->aRts</title>
-<path fill="none" stroke="black" d="M2389.64,-666.54C2450.03,-653.89 2544,-628.91 2544,-595.87 2544,-595.87 2544,-595.87 2544,-267 2544,-189.55 2468.58,-196.93 2393,-180 2256.53,-149.42 2221.84,-142.83 2083,-126 1845.51,-97.21 1783.83,-114.88 1546,-89 1521.44,-86.33 1494.06,-82.28 1472.29,-78.8"/>
-<polygon fill="black" stroke="black" points="1472.83,-75.35 1462.4,-77.2 1471.71,-82.26 1472.83,-75.35"/>
+<path fill="none" stroke="black" d="M1830.74,-570.89C1964.64,-560.37 2285,-525.43 2285,-432 2285,-432 2285,-432 2285,-216 2285,-172.71 1970.47,-152.78 1854.93,-146.92"/>
+<polygon fill="black" stroke="black" points="1854.86,-143.42 1844.7,-146.42 1854.52,-150.41 1854.86,-143.42"/>
</g>
<!-- SDL1->ESD -->
-<g id="edge85" class="edge">
+<g id="edge72" class="edge">
<title>SDL1->ESD</title>
-<path fill="none" stroke="black" d="M2397.92,-672.22C2453.62,-667.82 2532.95,-658.6 2558,-640.74 2576.41,-627.61 2582,-618.49 2582,-595.87 2582,-595.87 2582,-595.87 2582,-143 2582,-94.32 1815.15,-76.41 1627.21,-72.74"/>
-<polygon fill="black" stroke="black" points="1627.24,-69.24 1617.18,-72.55 1627.11,-76.24 1627.24,-69.24"/>
+<path fill="none" stroke="black" d="M1776.25,-557.55C1786.27,-504.32 1816.04,-345.41 1815,-340 1800.52,-264.79 1799.64,-239.16 1751,-180 1744.96,-172.65 1736.95,-166.31 1728.97,-161.13"/>
+<polygon fill="black" stroke="black" points="1730.77,-158.14 1720.4,-155.97 1727.16,-164.13 1730.77,-158.14"/>
</g>
<!-- SDL1->NAS -->
-<g id="edge87" class="edge">
+<g id="edge73" class="edge">
<title>SDL1->NAS</title>
-<path fill="none" stroke="black" d="M2374.03,-661.86C2399.51,-648.95 2430,-627 2430,-595.87 2430,-595.87 2430,-595.87 2430,-303 2430,-279.53 2411.65,-263.22 2390.44,-252.21"/>
-<polygon fill="black" stroke="black" points="2391.75,-248.96 2381.21,-247.81 2388.73,-255.28 2391.75,-248.96"/>
+<path fill="none" stroke="black" d="M1805.36,-560.46C1833.77,-547.92 1875.44,-529.54 1907.44,-515.42"/>
+<polygon fill="black" stroke="black" points="1908.87,-518.61 1916.61,-511.37 1906.05,-512.21 1908.87,-518.61"/>
</g>
<!-- SDL2 -->
-<g id="node30" class="node">
+<g id="node28" class="node">
<title>SDL2</title>
-<g id="a_node30"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL-2.0">
-<ellipse fill="lightgrey" stroke="black" cx="1854" cy="-676.74" rx="59.59" ry="18"/>
-<text text-anchor="middle" x="1854" y="-673.04" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
+<g id="a_node28"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL-2.0">
+<ellipse fill="lightgrey" stroke="black" cx="2190" cy="-575.74" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="2190" y="-572.04" font-family="Times,serif" font-size="14.00">libSDL-2.0</text>
</a>
</g>
</g>
-<!-- SDL2->filesystem -->
-<g id="edge94" class="edge">
-<title>SDL2->filesystem</title>
-<path fill="none" stroke="black" d="M1829.51,-660.12C1820.68,-654.26 1810.74,-647.41 1802,-640.74 1599.61,-486.35 1596.16,-379.86 1368,-267 1339.18,-252.74 1304.76,-244.28 1274.75,-239.27"/>
-<polygon fill="black" stroke="black" points="1275.18,-235.79 1264.75,-237.69 1274.09,-242.7 1275.18,-235.79"/>
-</g>
-<!-- SDL2->null -->
-<g id="edge98" class="edge">
-<title>SDL2->null</title>
-<path fill="none" stroke="red" d="M1841,-658.86C1823.77,-636.92 1791.91,-597.88 1761,-568 1640.99,-451.97 1587.35,-451.44 1440,-373 1395.96,-349.56 1382.39,-348.31 1340,-322 1305.18,-300.39 1303.97,-282.4 1266,-267 1209.5,-244.08 1189.41,-262.7 1130,-249 1123.16,-247.42 1115.93,-245.3 1109.14,-243.1"/>
-<polygon fill="red" stroke="red" points="1110.18,-239.76 1099.59,-239.86 1107.93,-246.38 1110.18,-239.76"/>
-</g>
<!-- SDL2->ALSA -->
-<g id="edge91" class="edge">
+<g id="edge76" class="edge">
<title>SDL2->ALSA</title>
-<path fill="none" stroke="black" d="M1794.4,-674.63C1676.19,-671.64 1404.01,-660.72 1179,-621.74 1160.97,-618.62 1141.41,-613.64 1124.68,-608.89"/>
-<polygon fill="black" stroke="black" points="1125.25,-605.41 1114.67,-605.98 1123.3,-612.13 1125.25,-605.41"/>
+<path fill="none" stroke="black" d="M2132.38,-570.81C1930.37,-557.02 1256.41,-511.01 1068.82,-498.2"/>
+<polygon fill="black" stroke="black" points="1068.93,-494.7 1058.71,-497.51 1068.45,-501.69 1068.93,-494.7"/>
</g>
<!-- SDL2->JACK -->
-<g id="edge96" class="edge">
+<g id="edge80" class="edge">
<title>SDL2->JACK</title>
-<path fill="none" stroke="black" d="M1811.39,-664.02C1786.97,-657.27 1755.74,-648.6 1728,-640.74 1615.84,-608.98 1589.59,-594.21 1476,-568 1036.33,-466.57 490.89,-410.72 334.04,-395.99"/>
-<polygon fill="black" stroke="black" points="334.14,-392.48 323.85,-395.04 333.49,-399.45 334.14,-392.48"/>
+<path fill="none" stroke="black" d="M2188.22,-557.38C2184.65,-532.59 2174.16,-487.76 2144,-467 2101.04,-437.43 1726.6,-456.58 1675,-449 1611.86,-439.72 1598.83,-424.16 1536,-413 1327.89,-376.03 661.74,-322.36 483.96,-308.41"/>
+<polygon fill="black" stroke="black" points="484.17,-304.92 473.93,-307.63 483.62,-311.9 484.17,-304.92"/>
</g>
<!-- SDL2->OSS -->
-<g id="edge99" class="edge">
+<g id="edge82" class="edge">
<title>SDL2->OSS</title>
-<path fill="none" stroke="black" d="M1853.44,-658.51C1853.59,-635.47 1857.09,-594.47 1878,-568 1889.34,-553.65 1902.52,-563.37 1915,-550 1961.13,-500.59 1959.1,-475.35 1972,-409 1984.05,-347.05 2012.06,-315.76 1972,-267 1955.41,-246.81 1885.23,-238.07 1838.39,-234.43"/>
-<polygon fill="black" stroke="black" points="1838.42,-230.92 1828.19,-233.69 1837.91,-237.9 1838.42,-230.92"/>
+<path fill="none" stroke="black" d="M2195.35,-557.8C2201.7,-533.94 2208.69,-490.71 2185,-467 2154.88,-436.87 1843.84,-457 1802,-449 1681.07,-425.88 1657.18,-396.78 1540,-359 1491.5,-343.36 1435.19,-326.81 1398.42,-316.22"/>
+<polygon fill="black" stroke="black" points="1399.17,-312.79 1388.59,-313.4 1397.24,-319.52 1399.17,-312.79"/>
</g>
<!-- SDL2->sndio -->
-<g id="edge101" class="edge">
+<g id="edge84" class="edge">
<title>SDL2->sndio</title>
-<path fill="none" stroke="black" d="M1860.76,-658.48C1870.29,-635.78 1889.39,-595.55 1915,-568 1924.82,-557.44 1932.3,-560.67 1942,-550 1960.32,-529.84 1960.83,-521.27 1971,-496 1998.12,-428.59 2102.61,-234.89 2055,-180 2036.47,-158.63 1956.96,-166.24 1929,-162 1829.31,-146.87 1805.23,-137.03 1705,-126 1378.92,-90.1 983.56,-76.79 850.89,-73.14"/>
-<polygon fill="black" stroke="black" points="850.79,-69.64 840.7,-72.87 850.6,-76.64 850.79,-69.64"/>
+<path fill="none" stroke="black" d="M2203.86,-557.94C2207.57,-552.47 2211.08,-546.15 2213,-539.74 2222.3,-508.66 2225.42,-493.7 2207,-467 2090.59,-298.31 1975.64,-356.96 1791,-268 1760.74,-253.42 1752.42,-251.21 1723,-235 1696.43,-220.36 1692.86,-211 1665,-199 1634.6,-185.91 1625.66,-185.35 1593,-180 1417.32,-151.25 1204.96,-145.98 1113.06,-145.11"/>
+<polygon fill="black" stroke="black" points="1113.01,-141.61 1102.99,-145.03 1112.96,-148.61 1113.01,-141.61"/>
</g>
<!-- SDL2->PulseAudio -->
-<g id="edge100" class="edge">
+<g id="edge83" class="edge">
<title>SDL2->PulseAudio</title>
-<path fill="none" stroke="black" d="M1806.28,-665.86C1640.92,-631.65 1100.48,-519.96 1063,-514 981.96,-501.11 888.13,-491.09 825.95,-485.14"/>
-<polygon fill="black" stroke="black" points="826.16,-481.65 815.87,-484.19 825.5,-488.61 826.16,-481.65"/>
+<path fill="none" stroke="black" d="M2173.09,-558.32C2167.67,-552.67 2161.82,-546.15 2157,-539.74 2134.42,-509.73 2146.27,-486.2 2114,-467 2066.99,-439.03 1676.39,-454.88 1622,-449 1532.64,-439.33 1512.25,-423.66 1423,-413 1287.73,-396.84 1252.98,-403.34 1117,-395 1050.61,-390.93 974.92,-386.07 921.3,-382.59"/>
+<polygon fill="black" stroke="black" points="921.42,-379.09 911.21,-381.94 920.96,-386.08 921.42,-379.09"/>
</g>
<!-- SDL2->aRts -->
-<g id="edge92" class="edge">
+<g id="edge77" class="edge">
<title>SDL2->aRts</title>
-<path fill="none" stroke="black" d="M1912.66,-672.83C2016.48,-666.99 2227.93,-651.72 2295,-621.74 2374.11,-586.38 2400.86,-571.15 2444,-496 2507.34,-385.67 2569.74,-309.64 2487,-213 2466.6,-189.17 1960.13,-129.93 1929,-126 1759.33,-104.6 1715.74,-109.84 1546,-89 1521.48,-85.99 1494.1,-81.93 1472.32,-78.53"/>
-<polygon fill="black" stroke="black" points="1472.85,-75.07 1462.42,-76.97 1471.76,-81.99 1472.85,-75.07"/>
+<path fill="none" stroke="black" d="M2249.34,-573.29C2351.32,-569.8 2554.63,-558.23 2614,-520.74 2653.63,-495.71 2671,-478.88 2671,-432 2671,-432 2671,-432 2671,-216 2671,-174.57 2027.33,-151.64 1855,-146.25"/>
+<polygon fill="black" stroke="black" points="1854.91,-142.74 1844.81,-145.93 1854.7,-149.74 1854.91,-142.74"/>
</g>
<!-- SDL2->ESD -->
-<g id="edge93" class="edge">
+<g id="edge78" class="edge">
<title>SDL2->ESD</title>
-<path fill="none" stroke="black" d="M1881.42,-660.55C1889.92,-655.02 1898.91,-648.26 1906,-640.74 1931.77,-613.42 1920.14,-592.03 1949,-568 1966.83,-553.15 1979.67,-564.23 1998,-550 2058.08,-503.36 2068.31,-480.23 2095,-409 2125.61,-327.32 2114.66,-295.03 2085,-213 2067.24,-163.88 2053.55,-147.6 2006,-126 1938.89,-95.51 1719.23,-79.65 1627.17,-74.21"/>
-<polygon fill="black" stroke="black" points="1627.3,-70.71 1617.11,-73.63 1626.89,-77.7 1627.3,-70.71"/>
+<path fill="none" stroke="black" d="M2239.9,-565.68C2277.64,-555.61 2323,-535.14 2323,-494.87 2323,-494.87 2323,-494.87 2323,-216 2323,-154.48 1832.73,-171.82 1772,-162 1759.87,-160.04 1746.77,-157.29 1734.96,-154.57"/>
+<polygon fill="black" stroke="black" points="1735.51,-151.11 1724.97,-152.22 1733.9,-157.92 1735.51,-151.11"/>
</g>
<!-- SDL2->NAS -->
-<g id="edge97" class="edge">
+<g id="edge81" class="edge">
<title>SDL2->NAS</title>
-<path fill="none" stroke="black" d="M1911.36,-671.54C2042.69,-660.34 2354,-624.18 2354,-533 2354,-533 2354,-533 2354,-303 2354,-287.55 2348.35,-271.38 2342.21,-258.37"/>
-<polygon fill="black" stroke="black" points="2345.16,-256.45 2337.52,-249.11 2338.92,-259.61 2345.16,-256.45"/>
+<path fill="none" stroke="black" d="M2151.82,-561.82C2113.86,-548.97 2055.15,-529.1 2011.54,-514.34"/>
+<polygon fill="black" stroke="black" points="2012.51,-510.98 2001.92,-511.09 2010.27,-517.61 2012.51,-510.98"/>
</g>
<!-- FusionSound -->
-<g id="node31" class="node">
+<g id="node29" class="node">
<title>FusionSound</title>
-<ellipse fill="red" stroke="black" cx="2085" cy="-594.87" rx="126.64" ry="26.74"/>
-<text text-anchor="middle" x="2085" y="-598.67" font-family="Times,serif" font-size="14.00">DirectFB/FusionSound</text>
-<text text-anchor="middle" x="2085" y="-583.67" font-family="Times,serif" font-size="14.00">[dead]</text>
+<ellipse fill="red" stroke="black" cx="2478" cy="-493.87" rx="126.64" ry="26.74"/>
+<text text-anchor="middle" x="2478" y="-497.67" font-family="Times,serif" font-size="14.00">DirectFB/FusionSound</text>
+<text text-anchor="middle" x="2478" y="-482.67" font-family="Times,serif" font-size="14.00">[dead]</text>
</g>
<!-- SDL2->FusionSound -->
-<g id="edge95" class="edge">
+<g id="edge79" class="edge">
<title>SDL2->FusionSound</title>
-<path fill="none" stroke="red" d="M1891.63,-662.73C1923.87,-651.58 1971.27,-635.19 2011.07,-621.43"/>
-<polygon fill="red" stroke="red" points="2012.44,-624.66 2020.75,-618.09 2010.15,-618.05 2012.44,-624.66"/>
+<path fill="none" stroke="red" d="M2236.9,-564.51C2265.88,-557.95 2303.76,-548.97 2337,-539.74 2358.46,-533.78 2381.57,-526.71 2402.73,-519.96"/>
+<polygon fill="red" stroke="red" points="2403.86,-523.28 2412.31,-516.89 2401.72,-516.61 2403.86,-523.28"/>
</g>
<!-- phonon -->
-<g id="node32" class="node">
+<g id="node30" class="node">
<title>phonon</title>
-<ellipse fill="lightgrey" stroke="black" cx="235" cy="-749.74" rx="44.69" ry="18"/>
-<text text-anchor="middle" x="235" y="-746.04" font-family="Times,serif" font-size="14.00">phonon</text>
+<ellipse fill="lightgrey" stroke="black" cx="239" cy="-648.74" rx="44.69" ry="18"/>
+<text text-anchor="middle" x="239" y="-645.04" font-family="Times,serif" font-size="14.00">phonon</text>
</g>
<!-- phonon->PulseAudio -->
-<g id="edge108" class="edge">
+<g id="edge91" class="edge">
<title>phonon->PulseAudio</title>
-<path fill="none" stroke="black" d="M243,-731.81C254.03,-709.44 275.35,-669.39 300,-639.74 313.53,-623.47 423.65,-522.55 443,-514 485.01,-495.43 606.45,-486.18 685.4,-482"/>
-<polygon fill="black" stroke="black" points="685.96,-485.48 695.77,-481.47 685.6,-478.49 685.96,-485.48"/>
+<path fill="none" stroke="black" d="M248.72,-630.98C260.22,-611.98 280.65,-580.67 303,-557.74 349.93,-509.61 366.39,-501.63 424,-467 472.4,-437.91 484.66,-428.35 539,-413 619.16,-390.35 714.8,-382.27 778.88,-379.44"/>
+<polygon fill="black" stroke="black" points="779.03,-382.93 788.88,-379.03 778.74,-375.94 779.03,-382.93"/>
</g>
<!-- phonon->gstreamer -->
-<g id="edge106" class="edge">
+<g id="edge89" class="edge">
<title>phonon->gstreamer</title>
-<path fill="none" stroke="black" d="M279.28,-746.19C378.43,-740.17 625.71,-723.36 831,-694.74 841.5,-693.28 852.64,-691.42 863.37,-689.48"/>
-<polygon fill="black" stroke="black" points="864.31,-692.86 873.5,-687.6 863.03,-685.98 864.31,-692.86"/>
+<path fill="none" stroke="black" d="M214.3,-633.71C195.83,-623.22 170.31,-608.72 149.63,-596.98"/>
+<polygon fill="black" stroke="black" points="151.23,-593.86 140.81,-591.97 147.78,-599.95 151.23,-593.86"/>
</g>
<!-- VLC -->
-<g id="node33" class="node">
+<g id="node31" class="node">
<title>VLC</title>
-<g id="a_node33"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC">
-<ellipse fill="lightgrey" stroke="black" cx="146" cy="-676.74" rx="29.8" ry="18"/>
-<text text-anchor="middle" x="146" y="-673.04" font-family="Times,serif" font-size="14.00">VLC</text>
+<g id="a_node31"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC">
+<ellipse fill="lightgrey" stroke="black" cx="342" cy="-575.74" rx="29.8" ry="18"/>
+<text text-anchor="middle" x="342" y="-572.04" font-family="Times,serif" font-size="14.00">VLC</text>
</a>
</g>
</g>
<!-- phonon->VLC -->
-<g id="edge107" class="edge">
+<g id="edge90" class="edge">
<title>phonon->VLC</title>
-<path fill="none" stroke="black" d="M215.69,-733.33C202.7,-722.97 185.43,-709.2 171.34,-697.95"/>
-<polygon fill="black" stroke="black" points="173.46,-695.17 163.46,-691.67 169.1,-700.64 173.46,-695.17"/>
-</g>
-<!-- VLC->filesystem -->
-<g id="edge119" class="edge">
-<title>VLC->filesystem</title>
-<path fill="none" stroke="black" d="M125,-663.68C104.38,-650.09 76,-625.92 76,-595.87 76,-595.87 76,-595.87 76,-433.5 76,-399 222.24,-296.76 252,-286 343.61,-252.87 1031.45,-262.02 1128,-249 1134.26,-248.16 1140.77,-247.03 1147.21,-245.76"/>
-<polygon fill="black" stroke="black" points="1148.17,-249.14 1157.24,-243.67 1146.74,-242.29 1148.17,-249.14"/>
-</g>
-<!-- VLC->null -->
-<g id="edge117" class="edge">
-<title>VLC->null</title>
-<path fill="none" stroke="red" d="M118.42,-669.4C100.62,-664.16 77.91,-655.18 62,-640.74 45.26,-625.54 38,-618.49 38,-595.87 38,-595.87 38,-595.87 38,-433.5 38,-325.19 127.56,-314.72 232,-286 309.42,-264.71 869.01,-240.53 1033.59,-233.81"/>
-<polygon fill="red" stroke="red" points="1034,-237.3 1043.85,-233.4 1033.72,-230.3 1034,-237.3"/>
+<path fill="none" stroke="black" d="M260.84,-632.68C276.53,-621.87 297.79,-607.21 314.62,-595.62"/>
+<polygon fill="black" stroke="black" points="316.71,-598.42 322.96,-589.87 312.74,-592.66 316.71,-598.42"/>
</g>
<!-- VLC->ALSA -->
-<g id="edge118" class="edge">
+<g id="edge100" class="edge">
<title>VLC->ALSA</title>
-<path fill="none" stroke="black" d="M175.58,-673.66C310.03,-664.21 858.61,-625.55 895,-621.74 942.32,-616.78 996.09,-609.19 1033.96,-603.5"/>
-<polygon fill="black" stroke="black" points="1034.84,-606.91 1044.2,-601.96 1033.79,-599.99 1034.84,-606.91"/>
+<path fill="none" stroke="black" d="M364.24,-563.56C369.61,-561.28 375.41,-559.15 381,-557.74 475.7,-533.79 721.87,-531.09 819,-520.74 871.09,-515.19 930.57,-507.35 971.23,-501.75"/>
+<polygon fill="black" stroke="black" points="971.72,-505.22 981.15,-500.38 970.77,-498.28 971.72,-505.22"/>
</g>
<!-- VLC->JACK -->
-<g id="edge120" class="edge">
+<g id="edge101" class="edge">
<title>VLC->JACK</title>
-<path fill="none" stroke="black" d="M156.69,-659.69C180.9,-622.71 240.58,-528.1 276,-442 279.02,-434.66 281.62,-426.46 283.72,-418.86"/>
-<polygon fill="black" stroke="black" points="287.16,-419.56 286.29,-409 280.39,-417.79 287.16,-419.56"/>
+<path fill="none" stroke="black" d="M336.08,-557.87C326.45,-527.54 310.42,-462.36 331,-413 346.93,-374.78 383.7,-343.16 410.13,-324.21"/>
+<polygon fill="black" stroke="black" points="412.44,-326.87 418.65,-318.28 408.44,-321.12 412.44,-326.87"/>
</g>
<!-- VLC->OSS -->
-<g id="edge121" class="edge">
+<g id="edge102" class="edge">
<title>VLC->OSS</title>
-<path fill="none" stroke="black" d="M142.15,-658.81C137.89,-637.48 132.32,-599.76 138,-568 154.25,-477.06 163.89,-453.06 210,-373 235.05,-329.51 236.97,-308.17 282,-286 290.48,-281.83 1505.74,-241.54 1751.84,-233.42"/>
-<polygon fill="black" stroke="black" points="1751.96,-236.92 1761.84,-233.09 1751.73,-229.92 1751.96,-236.92"/>
+<path fill="none" stroke="black" d="M348.16,-558.05C364.42,-516.51 412.81,-408.32 492,-359 539.7,-329.29 561.08,-345.55 617,-340 651.85,-336.54 1161.96,-313.74 1315.56,-306.92"/>
+<polygon fill="black" stroke="black" points="1315.73,-310.42 1325.57,-306.48 1315.42,-303.43 1315.73,-310.42"/>
</g>
<!-- VLC->sndio -->
-<g id="edge123" class="edge">
+<g id="edge104" class="edge">
<title>VLC->sndio</title>
-<path fill="none" stroke="black" d="M116.81,-672.81C74.2,-666.74 0,-648.6 0,-595.87 0,-595.87 0,-595.87 0,-143 0,-95.76 53.68,-116.27 100,-107 226.77,-81.62 623.51,-74.3 759.06,-72.51"/>
-<polygon fill="black" stroke="black" points="759.16,-76.01 769.12,-72.38 759.07,-69.01 759.16,-76.01"/>
+<path fill="none" stroke="black" d="M317.58,-565.18C274.61,-546.57 190,-501.14 190,-432 190,-432 190,-432 190,-216 190,-194.94 841.26,-157.45 1021.34,-147.49"/>
+<polygon fill="black" stroke="black" points="1021.74,-150.97 1031.53,-146.93 1021.36,-143.98 1021.74,-150.97"/>
</g>
<!-- VLC->PulseAudio -->
-<g id="edge122" class="edge">
+<g id="edge103" class="edge">
<title>VLC->PulseAudio</title>
-<path fill="none" stroke="black" d="M170.46,-666.37C186.38,-659.92 207.38,-650.73 225,-640.74 313.29,-590.66 318.93,-546.77 415,-514 463.45,-497.47 600.51,-487.38 685.69,-482.52"/>
-<polygon fill="black" stroke="black" points="686.02,-486.01 695.81,-481.95 685.63,-479.02 686.02,-486.01"/>
+<path fill="none" stroke="black" d="M361.68,-562.14C418.64,-525.77 581.23,-422.61 608,-413 663.43,-393.1 729.81,-384.49 779.18,-380.77"/>
+<polygon fill="black" stroke="black" points="779.72,-384.24 789.45,-380.05 779.22,-377.26 779.72,-384.24"/>
</g>
<!-- ClanLib -->
-<g id="node34" class="node">
+<g id="node32" class="node">
<title>ClanLib</title>
-<g id="a_node34"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib">
-<ellipse fill="lightgrey" stroke="black" cx="1391" cy="-676.74" rx="46.29" ry="18"/>
-<text text-anchor="middle" x="1391" y="-673.04" font-family="Times,serif" font-size="14.00">ClanLib</text>
+<g id="a_node32"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib">
+<ellipse fill="lightgrey" stroke="black" cx="1359" cy="-575.74" rx="46.29" ry="18"/>
+<text text-anchor="middle" x="1359" y="-572.04" font-family="Times,serif" font-size="14.00">ClanLib</text>
</a>
</g>
</g>
<!-- ClanLib->ALSA -->
-<g id="edge109" class="edge">
+<g id="edge92" class="edge">
<title>ClanLib->ALSA</title>
-<path fill="none" stroke="black" d="M1356.48,-664.75C1349.41,-662.64 1341.99,-660.53 1335,-658.74 1295.4,-648.57 1285.17,-647.32 1245,-639.74 1197.18,-630.71 1183.4,-636.4 1137,-621.74 1130.21,-619.59 1123.18,-616.74 1116.53,-613.72"/>
-<polygon fill="black" stroke="black" points="1117.67,-610.38 1107.14,-609.22 1114.65,-616.7 1117.67,-610.38"/>
+<path fill="none" stroke="black" d="M1324.17,-563.72C1317.18,-561.63 1309.88,-559.55 1303,-557.74 1220.74,-536.15 1123.77,-515.67 1067.35,-504.24"/>
+<polygon fill="black" stroke="black" points="1067.8,-500.76 1057.3,-502.21 1066.41,-507.62 1067.8,-500.76"/>
</g>
<!-- ClanLib->OSS -->
-<g id="edge110" class="edge">
+<g id="edge93" class="edge">
<title>ClanLib->OSS</title>
-<path fill="none" stroke="black" d="M1429.4,-666.55C1465.1,-657.35 1519.34,-641.72 1564,-621.74 1652.08,-582.33 1677.01,-568.23 1741,-496 1797.82,-431.87 1804.69,-405.48 1824,-322 1829.54,-298.04 1839.41,-289.72 1830,-267 1828,-262.16 1824.96,-257.64 1821.5,-253.57"/>
-<polygon fill="black" stroke="black" points="1823.95,-251.07 1814.49,-246.31 1818.92,-255.93 1823.95,-251.07"/>
+<path fill="none" stroke="black" d="M1362.87,-557.76C1371.12,-518.84 1388.48,-420.38 1373,-340 1372.47,-337.26 1371.73,-334.47 1370.87,-331.71"/>
+<polygon fill="black" stroke="black" points="1374.05,-330.24 1367.33,-322.05 1367.48,-332.65 1374.05,-330.24"/>
</g>
<!-- allegro -->
-<g id="node35" class="node">
+<g id="node33" class="node">
<title>allegro</title>
-<g id="a_node35"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro">
-<ellipse fill="lightgrey" stroke="black" cx="1854" cy="-822.74" rx="42.79" ry="18"/>
-<text text-anchor="middle" x="1854" y="-819.04" font-family="Times,serif" font-size="14.00">allegro</text>
+<g id="a_node33"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro">
+<ellipse fill="lightgrey" stroke="black" cx="1773" cy="-721.74" rx="42.79" ry="18"/>
+<text text-anchor="middle" x="1773" y="-718.04" font-family="Times,serif" font-size="14.00">allegro</text>
</a>
</g>
</g>
<!-- allegro->OSS -->
-<g id="edge111" class="edge">
+<g id="edge94" class="edge">
<title>allegro->OSS</title>
-<path fill="none" stroke="black" d="M1897.03,-821.58C2042.37,-820.49 2506,-812.19 2506,-750.74 2506,-750.74 2506,-750.74 2506,-639.74 2506,-500.08 2133.16,-309.11 2000,-267 1945.73,-249.84 1880.56,-240.54 1838.5,-235.93"/>
-<polygon fill="black" stroke="black" points="1838.64,-232.43 1828.32,-234.86 1837.9,-239.39 1838.64,-232.43"/>
+<path fill="none" stroke="black" d="M1815.65,-719.48C1989.18,-714.07 2633,-691.22 2633,-649.74 2633,-649.74 2633,-649.74 2633,-538.74 2633,-505.76 2638.79,-488.75 2614,-467 2567.16,-425.91 1617.38,-330.39 1402.12,-309.21"/>
+<polygon fill="black" stroke="black" points="1402.44,-305.72 1392.14,-308.23 1401.75,-312.69 1402.44,-305.72"/>
</g>
<!-- allegro->PulseAudio -->
-<g id="edge113" class="edge">
+<g id="edge96" class="edge">
<title>allegro->PulseAudio</title>
-<path fill="none" stroke="black" d="M1811.01,-821.76C1578.03,-821.41 474.1,-813.47 389,-694.74 335.07,-619.5 384.51,-581.04 500,-514 530.68,-496.19 620.96,-487.04 685.84,-482.64"/>
-<polygon fill="black" stroke="black" points="686.28,-486.12 696.03,-481.98 685.82,-479.14 686.28,-486.12"/>
+<path fill="none" stroke="black" d="M1730.05,-720.42C1577.81,-718.9 1064.55,-710.59 907,-666.74 839.4,-647.92 803.38,-653.74 767,-593.74 758.7,-580.06 758.55,-571.33 767,-557.74 786.63,-526.17 821.08,-551.46 842,-520.74 865.38,-486.41 862.05,-436 856.93,-405.18"/>
+<polygon fill="black" stroke="black" points="860.34,-404.36 855.09,-395.16 853.45,-405.62 860.34,-404.36"/>
</g>
<!-- allegro->OpenAL -->
-<g id="edge112" class="edge">
+<g id="edge95" class="edge">
<title>allegro->OpenAL</title>
-<path fill="none" stroke="black" d="M1812.39,-817.95C1681.69,-806.04 1279.23,-769.35 1130.76,-755.82"/>
-<polygon fill="black" stroke="black" points="1130.8,-752.31 1120.52,-754.89 1130.16,-759.28 1130.8,-752.31"/>
+<path fill="none" stroke="black" d="M1731.44,-717.1C1596.7,-705.29 1171.86,-668.05 1018.72,-654.62"/>
+<polygon fill="black" stroke="black" points="1018.87,-651.12 1008.6,-653.74 1018.26,-658.1 1018.87,-651.12"/>
</g>
<!-- allegro->SDL1 -->
-<g id="edge114" class="edge">
+<g id="edge97" class="edge">
<title>allegro->SDL1</title>
-<path fill="none" stroke="black" d="M1888.17,-811.61C1972.25,-786.7 2189.52,-722.33 2288.96,-692.86"/>
-<polygon fill="black" stroke="black" points="2290.18,-696.15 2298.77,-689.96 2288.19,-689.44 2290.18,-696.15"/>
+<path fill="none" stroke="black" d="M1773,-703.66C1773,-679.08 1773,-633.49 1773,-604.17"/>
+<polygon fill="black" stroke="black" points="1776.5,-603.8 1773,-593.8 1769.5,-603.8 1776.5,-603.8"/>
</g>
<!-- allegro->SDL2 -->
-<g id="edge115" class="edge">
+<g id="edge98" class="edge">
<title>allegro->SDL2</title>
-<path fill="none" stroke="black" d="M1854,-804.66C1854,-780.08 1854,-734.49 1854,-705.17"/>
-<polygon fill="black" stroke="black" points="1857.5,-704.8 1854,-694.8 1850.5,-704.8 1857.5,-704.8"/>
+<path fill="none" stroke="black" d="M1805.03,-709.68C1878.02,-684.47 2057.02,-622.66 2142.74,-593.06"/>
+<polygon fill="black" stroke="black" points="2143.92,-596.36 2152.23,-589.78 2141.63,-589.74 2143.92,-596.36"/>
</g>
<!-- telepathy -->
-<g id="node36" class="node">
+<g id="node34" class="node">
<title>telepathy</title>
-<ellipse fill="lightgrey" stroke="black" cx="759" cy="-391" rx="54.69" ry="18"/>
-<text text-anchor="middle" x="759" y="-387.3" font-family="Times,serif" font-size="14.00">telepathy</text>
+<ellipse fill="lightgrey" stroke="black" cx="908" cy="-304" rx="54.69" ry="18"/>
+<text text-anchor="middle" x="908" y="-300.3" font-family="Times,serif" font-size="14.00">telepathy</text>
</g>
<!-- telepathy->phone modem -->
-<g id="edge116" class="edge">
+<g id="edge99" class="edge">
<title>telepathy->phone modem</title>
-<path fill="none" stroke="black" d="M741.65,-373.61C728.34,-361.04 709.76,-343.49 694.72,-329.29"/>
-<polygon fill="black" stroke="black" points="696.9,-326.54 687.23,-322.21 692.09,-331.62 696.9,-326.54"/>
-<text text-anchor="middle" x="724" y="-343.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
+<path fill="none" stroke="black" d="M884.46,-287.61C864.43,-274.51 835.4,-255.53 812.71,-240.69"/>
+<polygon fill="black" stroke="black" points="814.33,-237.57 804.04,-235.03 810.5,-243.43 814.33,-237.57"/>
+<text text-anchor="middle" x="854" y="-256.8" font-family="Times,serif" font-size="14.00" fill="red">?</text>
</g>
<!-- pcaudiolib -->
-<g id="node37" class="node">
+<g id="node35" class="node">
<title>pcaudiolib</title>
-<g id="a_node37"><a xlink:href="https://github.com/espeak-ng/pcaudiolib" xlink:title="pcaudiolib">
-<ellipse fill="lightgrey" stroke="black" cx="1268" cy="-676.74" rx="58.49" ry="18"/>
-<text text-anchor="middle" x="1268" y="-673.04" font-family="Times,serif" font-size="14.00">pcaudiolib</text>
+<g id="a_node35"><a xlink:href="https://github.com/espeak-ng/pcaudiolib" xlink:title="pcaudiolib">
+<ellipse fill="lightgrey" stroke="black" cx="1236" cy="-575.74" rx="58.49" ry="18"/>
+<text text-anchor="middle" x="1236" y="-572.04" font-family="Times,serif" font-size="14.00">pcaudiolib</text>
</a>
</g>
</g>
<!-- pcaudiolib->ALSA -->
-<g id="edge124" class="edge">
+<g id="edge105" class="edge">
<title>pcaudiolib->ALSA</title>
-<path fill="none" stroke="black" d="M1254.84,-659.16C1248.39,-652.12 1240.06,-644.46 1231,-639.74 1193.28,-620.08 1177.4,-635.04 1137,-621.74 1130.3,-619.53 1123.36,-616.68 1116.77,-613.68"/>
-<polygon fill="black" stroke="black" points="1117.98,-610.38 1107.45,-609.23 1114.97,-616.69 1117.98,-610.38"/>
+<path fill="none" stroke="black" d="M1199.85,-561.37C1160.9,-546.97 1099.15,-524.14 1059.1,-509.33"/>
+<polygon fill="black" stroke="black" points="1060.25,-506.02 1049.66,-505.84 1057.83,-512.59 1060.25,-506.02"/>
</g>
<!-- pcaudiolib->OSS -->
-<g id="edge125" class="edge">
+<g id="edge106" class="edge">
<title>pcaudiolib->OSS</title>
-<path fill="none" stroke="black" d="M1311.45,-664.52C1319.59,-662.52 1328.04,-660.51 1336,-658.74 1419.98,-640.08 1453.75,-668.44 1526,-621.74 1550.57,-605.86 1540.72,-585.71 1564,-568 1582.8,-553.7 1592.69,-560.18 1614,-550 1655.75,-530.06 1671.96,-530.31 1703,-496 1760.47,-432.45 1762.95,-404.52 1786,-322 1791.73,-301.49 1793.91,-277.45 1794.7,-259.38"/>
-<polygon fill="black" stroke="black" points="1798.2,-259.35 1795.03,-249.24 1791.21,-259.13 1798.2,-259.35"/>
+<path fill="none" stroke="black" d="M1253.11,-558.19C1275.28,-535.66 1313.42,-493.1 1333,-449 1349.99,-410.74 1355.88,-362.08 1357.92,-332.26"/>
+<polygon fill="black" stroke="black" points="1361.42,-332.36 1358.51,-322.17 1354.43,-331.95 1361.42,-332.36"/>
</g>
<!-- pcaudiolib->PulseAudio -->
-<g id="edge126" class="edge">
+<g id="edge107" class="edge">
<title>pcaudiolib->PulseAudio</title>
-<path fill="none" stroke="black" d="M1224.8,-664.58C1216.89,-662.59 1208.7,-660.58 1201,-658.74 1127.47,-641.22 1105.98,-647.72 1035,-621.74 970.46,-598.12 954.9,-588.55 898,-550 877.65,-536.21 877.28,-526.31 856,-514 842.15,-505.99 826.16,-499.36 811.12,-494.1"/>
-<polygon fill="black" stroke="black" points="812,-490.71 801.41,-490.85 809.78,-497.34 812,-490.71"/>
+<path fill="none" stroke="black" d="M1214.62,-558.73C1170.69,-526.55 1066.15,-453.68 968,-413 948.4,-404.88 926.24,-397.75 906.52,-392.09"/>
+<polygon fill="black" stroke="black" points="907.33,-388.68 896.75,-389.35 905.44,-395.42 907.33,-388.68"/>
</g>
</g>
</svg>