logo

blog

My website can't be that messy, right? git clone https://hacktivis.me/git/blog.git
commit: cb3dfe5a55fa8eb87d2922171358cd2f39f76c8e
parent a7179ece2ec9d2bf285c5a2e821056312670a5f5
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Tue, 30 Jun 2020 09:41:15 +0200

New Article: linux-audio-output

Diffstat:

Aarticles/linux-audio-output.shtml15+++++++++++++++
Aarticles/linux-audio-output.xhtml13+++++++++++++
Mcss/index.css4++--
Mfeed.atom11+++++++++++
Mhome.shtml1+
Aimages/linux-audio-output.dot208+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aimages/linux-audio-output.png0
Aimages/linux-audio-output.svg1116+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 1366 insertions(+), 2 deletions(-)

diff --git a/articles/linux-audio-output.shtml b/articles/linux-audio-output.shtml @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html lang="en"> + <head> +<!--#include file="/templates/head.shtml" --> + <meta property="og:type" content="article"/> + <meta property="og:title" content="linux-audio-output"/> + <title>Linux Audio Output APIs — Cyber-home of lanodan</title> + </head> + <body> +<!--#include file="/templates/en/nav.shtml" --> +<!--#include file="/articles/linux-audio-output.xhtml"--> + <a href="/articles/linux-audio-output.xhtml">article only(plain XHTML)</a> +<!--#include file="/templates/en/footer.shtml" --> + </body> +</html> diff --git a/articles/linux-audio-output.xhtml b/articles/linux-audio-output.xhtml @@ -0,0 +1,13 @@ +<article xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-entry"> +<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> +<figure><img title="Linux Audio Output APIs" src="/images/linux-audio-output.png" /></figure> +<p>You'll definitely need a large screen if you want to see the whole thing at once.</p> +<h2>Other formats</h2> +<ul> + <li><a href="/images/linux-audio-output.dot">Graphviz DOT</a>: source, has comments and URLs</li> + <li><a href="/images/linux-audio-output.svg">SVG</a>: access to URLs and can hover lines to see origin and destination</li> + <li><a href="/images/linux-audio-output.png">PNG</a></li> +</ul> +<p><!--<a href="">Fediverse post for comments</a>-->, published on 2020-06-30T07:10:20Z, last updated on 2020-06-30T07:10:20Z</p> +</article> diff --git a/css/index.css b/css/index.css @@ -120,8 +120,8 @@ figure { max-width: 95vw; max-height: 95vh; object-fit: scale-down; - width: auto; - height: auto; + width: 100%; + height: 100%; } nav, footer { diff --git a/feed.atom b/feed.atom @@ -11,6 +11,17 @@ <!-- new.sh: new articles here --> <entry> + <title>Linux Audio Output APIs</title> + <link rel="alternate" type="text/html" href="/articles/linux-audio-output"/> + <id>https://hacktivis.me/articles/linux-audio-output</id> + <published>2020-06-30T07:10:20Z</published> + <updated>2020-06-30T07:10:20Z</updated> + <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<!--#include file="/articles/linux-audio-output.xhtml"--> + </div></content> + </entry> + + <entry> <title>2020-05 Summary</title> <link rel="alternate" type="text/html" href="/articles/2020-05%20Summary"/> <id>https://hacktivis.me/articles/2020-05%20Summary</id> diff --git a/home.shtml b/home.shtml @@ -7,6 +7,7 @@ <body> <!--#set var="transPageUrl" value='accueil' --><!--#set var="feedURL" value='/feed.atom'--><!--#include file="templates/en/nav.shtml" --> +<!--#include file="/articles/linux-audio-output.xhtml"--> <!--#include file="/articles/2020-05 Summary.xhtml"--> <!--#include file="/articles/blocking cloudflare IP-range be like.xhtml"--> <!--#include file="/articles/2020-04 Summary.xhtml"--> diff --git a/images/linux-audio-output.dot b/images/linux-audio-output.dot @@ -0,0 +1,207 @@ +digraph "Linux Audio Output APIs" { + node [ shape=ellipse style=filled ]; + label="Linux Audio Output APIs + CC-BY 4.0 © 2020 Haelwenn (lanodan) Monnier + https://hacktivis.me/articles/linux-audio-output"; + + "network card" [ shape=box fillcolor=cyan ]; + "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 ]; + "?" [ shape=circle fillcolor=red ]; + + portaudio [ URL="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" ]; + portaudio -> ALSA; + portaudio -> JACK; + portaudio -> OSS; + portaudio -> asihpi; + asihpi [ shape=octagon fillcolor=yellow ]; + asihpi -> "sound card" [ color=green ]; + // through a patch + portaudio -> sndio; + + // 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 -> "network card" [ label="DLNA, RTP, SDP, SAP, RAOP, Tunnel, HTTP" dir=both color=green fontcolor=green ]; + PulseAudio -> null [ color=red ]; + PulseAudio -> "sound card" [ color=green ]; + PulseAudio -> JACK; + PulseAudio -> bluez; + PulseAudio -> ofono; + PulseAudio -> sox; + "X11 bell" -> PulseAudio; + + ofono [ shape=octagon fillcolor=yellow ]; + ofono -> "phone modem" [ color=green ]; + + bluez [ label="BlueZ" shape=octagon fillcolor=yellow ]; + ALSA -> bluez; + bluez -> "Bluetooth card" [ color=green ]; + + sox [ URL="http://sox.sourceforge.net/Docs/Features" ]; + sox -> filesystem; + sox -> null [ color=red ]; + sox -> libao; + sox -> PulseAudio; + sox -> ALSA; + + 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; + + RoarAudio [ URL="http://roaraudio.keep-cool.org/" ]; + OSS -> RoarAudio; + RoarAudio -> sndio; + RoarAudio -> PulseAudio; + RoarAudio -> ESD; + RoarAudio -> aRts; + RoarAudio -> "network card" [ label="IPv4, DECnet, OpenSLP" dir=both ]; + + // Probably incomplete, need some proper documentation + ESD -> OSS; + ESD -> ALSA; + ESD -> "network card"; + + libcanberra [ URL="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" ]; + libcanberra -> PulseAudio; + libcanberra -> OSS; + libcanberra -> ALSA; + libcanberra -> gstreamer; + libcanberra -> null [ color=red ]; + + PipeWire [ URL="http://pipewire.org/" ]; + PulseAudio -> PipeWire [ dir=both ]; + ALSA -> PipeWire; + JACK -> PipeWire; + gstreamer -> PipeWire; + PipeWire -> "?" [ color=red ]; + + sndio [ URL="http://www.sndio.org/" ]; + sndio -> ALSA; + sndio -> "network card" [ dir=both ]; + PulseAudio -> sndio; + ALSA -> sndio; + gstreamer -> sndio; + + OpenAL [ URL="https://www.openal-soft.org/" ]; + OpenAL -> PulseAudio; + OpenAL -> ALSA; + OpenAL -> OSS; + OpenAL -> SoundIO; + OpenAL -> portaudio; + OpenAL -> JACK; + OpenAL -> filesystem; + 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+" ]; + RtAudio -> ALSA; + RtAudio -> JACK; + RtAudio -> PulseAudio; + + // This shit is the hardest to find any documentation for + JUCE -> ALSA; + JUCE -> JACK; + JUCE -> "?" [ color=red ]; + + ALSA [ shape=octagon URL="https://alsa-project.org/wiki/Asoundrc#Plugins" fillcolor=yellow ]; + ALSA -> "sound card" [ color=green ]; + ALSA -> "network card" [ color=green ]; + ALSA -> PulseAudio; + ALSA -> JACK; + ALSA -> aRts; + ALSA -> null [ color=red ]; + ALSA -> filesystem; + OSS -> ALSA; + + OSS [ shape=octagon fillcolor=yellow ]; + OSS -> "sound card" [ color=green fontcolor=green label="third-party drivers from opensound.com" ]; + // OSS -> "sound card"; Got removed in the linux kernel + + // https://wiki.libsdl.org/FAQUsingSDL + SDL1 [ label="libSDL-1.2" URL="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" ]; + 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; + SDL2 -> "OpenSL ES"; // Gonna have to check again on the others + // Maybe SDL2 -> "NaCL"; + SDL2 -> null [ color=red ]; + SDL2 -> OSS; + SDL2 -> PulseAudio; + SDL2 -> sndio; + + FusionSound [ label="DirectFB/FusionSound\n[dead]" fillcolor=red ]; + FusionSound -> "?" [ color=red ]; + + // And then where the hell does it goes? + NAS [ label="Network Audio Server" ] + NAS -> "network card"; + + gstreamer -> ALSA; + gstreamer -> OSS; + gstreamer -> JACK; + gstreamer -> PulseAudio; + + phonon -> gstreamer; + phonon -> VLC; + phonon -> PulseAudio; + + ClanLib [ URL="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" ]; + ClanLib -> ALSA; + ClanLib -> OSS; + + allegro [ URL="https://github.com/liballeg/allegro5/tree/master/addons/audio" ]; + allegro -> OSS; + allegro -> OpenAL; + allegro -> PulseAudio; + allegro -> "OpenSL ES"; + allegro -> SDL1; + allegro -> SDL2; + + telepathy -> "phone modem" [ label="?" fontcolor=red ]; + telepathy -> "?" [ color=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 -> "OpenSL ES"; + VLC -> OSS; + VLC -> PulseAudio; + VLC -> sndio; + + "OpenSL ES" -> "?" [ color=red ]; +} +\ No newline at end of file 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 @@ -0,0 +1,1116 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.42.3 (20191010.1750) + --> +<!-- Title: Linux Audio Output APIs Pages: 1 --> +<svg width="2637pt" height="943pt" + viewBox="0.00 0.00 2637.00 942.74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 938.74)"> +<title>Linux Audio Output APIs</title> +<polygon fill="white" stroke="transparent" points="-4,4 -4,-938.74 2633,-938.74 2633,4 -4,4"/> +<text text-anchor="middle" x="1314.5" y="-37.8" font-family="Times,serif" font-size="14.00">Linux Audio Output APIs</text> +<text text-anchor="middle" x="1314.5" y="-22.8" font-family="Times,serif" font-size="14.00"> CC&#45;BY 4.0 © 2020 Haelwenn (lanodan) Monnier</text> +<text text-anchor="middle" x="1314.5" y="-7.8" font-family="Times,serif" font-size="14.00"> https://hacktivis.me/articles/linux&#45;audio&#45;output</text> +<!-- network card --> +<g id="node1" class="node"> +<title>network card</title> +<polygon fill="cyan" stroke="black" points="998,-89 910,-89 910,-53 998,-53 998,-89"/> +<text text-anchor="middle" x="954" y="-67.3" font-family="Times,serif" font-size="14.00">network card</text> +</g> +<!-- sound card --> +<g id="node2" class="node"> +<title>sound card</title> +<polygon fill="cyan" stroke="black" points="1561,-235 1485,-235 1485,-199 1561,-199 1561,-235"/> +<text text-anchor="middle" x="1523" y="-213.3" font-family="Times,serif" font-size="14.00">sound card</text> +</g> +<!-- phone modem --> +<g id="node3" class="node"> +<title>phone modem</title> +<polygon fill="cyan" stroke="black" points="1509.5,-395 1414.5,-395 1414.5,-359 1509.5,-359 1509.5,-395"/> +<text text-anchor="middle" x="1462" y="-373.3" font-family="Times,serif" font-size="14.00">phone modem</text> +</g> +<!-- Bluetooth card --> +<g id="node4" class="node"> +<title>Bluetooth card</title> +<polygon fill="cyan" stroke="black" points="1396.5,-395 1299.5,-395 1299.5,-359 1396.5,-359 1396.5,-395"/> +<text text-anchor="middle" x="1348" y="-373.3" font-family="Times,serif" font-size="14.00">Bluetooth card</text> +</g> +<!-- filesystem --> +<g id="node5" class="node"> +<title>filesystem</title> +<polygon fill="yellow" stroke="black" points="1383.21,-296.54 1383.21,-311.46 1353.21,-322 1310.79,-322 1280.79,-311.46 1280.79,-296.54 1310.79,-286 1353.21,-286 1383.21,-296.54"/> +<text text-anchor="middle" x="1332" y="-300.3" font-family="Times,serif" font-size="14.00">filesystem</text> +</g> +<!-- null --> +<g id="node6" class="node"> +<title>null</title> +<polygon fill="red" stroke="black" points="1832,-322 1797.14,-304 1832,-286 1866.86,-304 1832,-322"/> +<text text-anchor="middle" x="1832" y="-300.3" font-family="Times,serif" font-size="14.00">null</text> +</g> +<!-- ? --> +<g id="node7" class="node"> +<title>?</title> +<ellipse fill="red" stroke="black" cx="168" cy="-304" rx="18" ry="18"/> +<text text-anchor="middle" x="168" y="-300.3" font-family="Times,serif" font-size="14.00">?</text> +</g> +<!-- portaudio --> +<g id="node8" class="node"> +<title>portaudio</title> +<g id="a_node8"><a xlink:href="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" xlink:title="portaudio"> +<ellipse fill="lightgrey" stroke="black" cx="2037" cy="-770.74" rx="44.39" ry="18"/> +<text text-anchor="middle" x="2037" y="-767.04" font-family="Times,serif" font-size="14.00">portaudio</text> +</a> +</g> +</g> +<!-- ALSA --> +<g id="node9" class="node"> +<title>ALSA</title> +<g id="a_node9"><a xlink:href="https://alsa-project.org/wiki/Asoundrc#Plugins" xlink:title="ALSA"> +<polygon fill="yellow" stroke="black" points="1245.66,-690.28 1245.66,-705.2 1224.19,-715.74 1193.81,-715.74 1172.34,-705.2 1172.34,-690.28 1193.81,-679.74 1224.19,-679.74 1245.66,-690.28"/> +<text text-anchor="middle" x="1209" y="-694.04" font-family="Times,serif" font-size="14.00">ALSA</text> +</a> +</g> +</g> +<!-- portaudio&#45;&gt;ALSA --> +<g id="edge1" class="edge"> +<title>portaudio&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1996.06,-763.87C1970.26,-760.31 1936.23,-755.87 1906,-752.74 1661.86,-727.46 1368.5,-708.42 1256.02,-701.54"/> +<polygon fill="black" stroke="black" points="1255.91,-698.03 1245.71,-700.91 1255.48,-705.01 1255.91,-698.03"/> +</g> +<!-- JACK --> +<g id="node10" class="node"> +<title>JACK</title> +<ellipse fill="lightgrey" stroke="black" cx="1540" cy="-464" rx="32.49" ry="18"/> +<text text-anchor="middle" x="1540" y="-460.3" font-family="Times,serif" font-size="14.00">JACK</text> +</g> +<!-- portaudio&#45;&gt;JACK --> +<g id="edge2" class="edge"> +<title>portaudio&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1995.71,-764.21C1901.65,-751.52 1679.07,-721.04 1673,-715.74 1616.6,-666.51 1667.27,-616.45 1626,-554 1619.04,-543.46 1612.82,-545.04 1604,-536 1589.85,-521.49 1589.52,-515.1 1576,-500 1572.15,-495.7 1567.88,-491.28 1563.67,-487.09"/> +<polygon fill="black" stroke="black" points="1565.86,-484.34 1556.25,-479.88 1560.98,-489.36 1565.86,-484.34"/> +</g> +<!-- OSS --> +<g id="node11" class="node"> +<title>OSS</title> +<polygon fill="yellow" stroke="black" points="939.69,-296.54 939.69,-311.46 922.88,-322 899.12,-322 882.31,-311.46 882.31,-296.54 899.12,-286 922.88,-286 939.69,-296.54"/> +<text text-anchor="middle" x="911" y="-300.3" font-family="Times,serif" font-size="14.00">OSS</text> +</g> +<!-- portaudio&#45;&gt;OSS --> +<g id="edge3" class="edge"> +<title>portaudio&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M2033.97,-752.55C2020.9,-684.49 1962.22,-433.86 1796,-359 1776.42,-350.18 1118.16,-315.69 949.87,-307"/> +<polygon fill="black" stroke="black" points="949.89,-303.49 939.73,-306.47 949.53,-310.48 949.89,-303.49"/> +</g> +<!-- asihpi --> +<g id="node12" class="node"> +<title>asihpi</title> +<polygon fill="yellow" stroke="black" points="2258.44,-510.54 2258.44,-525.46 2238.27,-536 2209.73,-536 2189.56,-525.46 2189.56,-510.54 2209.73,-500 2238.27,-500 2258.44,-510.54"/> +<text text-anchor="middle" x="2224" y="-514.3" font-family="Times,serif" font-size="14.00">asihpi</text> +</g> +<!-- portaudio&#45;&gt;asihpi --> +<g id="edge4" class="edge"> +<title>portaudio&#45;&gt;asihpi</title> +<path fill="none" stroke="black" d="M2060.87,-755.49C2076.45,-745.52 2096.65,-731.25 2112,-715.74 2162.45,-664.74 2197.9,-586.45 2214.09,-545.71"/> +<polygon fill="black" stroke="black" points="2217.42,-546.79 2217.79,-536.2 2210.9,-544.25 2217.42,-546.79"/> +</g> +<!-- sndio --> +<g id="node13" class="node"> +<title>sndio</title> +<g id="a_node13"><a xlink:href="http://www.sndio.org/" xlink:title="sndio"> +<ellipse fill="lightgrey" stroke="black" cx="1417" cy="-144" rx="29.8" ry="18"/> +<text text-anchor="middle" x="1417" y="-140.3" font-family="Times,serif" font-size="14.00">sndio</text> +</a> +</g> +</g> +<!-- portaudio&#45;&gt;sndio --> +<g id="edge6" class="edge"> +<title>portaudio&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M2066.12,-756.94C2087.4,-747.01 2116.52,-732.19 2140,-715.74 2251.15,-637.85 2655.9,-394.23 2574,-286 2488.17,-172.57 2403.57,-235.17 2266,-199 2231.49,-189.93 2223.32,-185.05 2188,-180 2044.67,-159.49 1593.85,-148.66 1456.87,-145.79"/> +<polygon fill="black" stroke="black" points="1456.88,-142.29 1446.81,-145.58 1456.74,-149.29 1456.88,-142.29"/> +</g> +<!-- ALSA&#45;&gt;network card --> +<g id="edge79" class="edge"> +<title>ALSA&#45;&gt;network card</title> +<path fill="none" stroke="green" d="M1172.29,-695.93C1106.7,-693.86 972.64,-686.62 934,-661.74 886.78,-631.34 693.14,-239.59 692,-235 667.98,-138.46 816.67,-96.21 900.15,-80.28"/> +<polygon fill="green" stroke="green" points="900.79,-83.73 909.99,-78.47 899.52,-76.84 900.79,-83.73"/> +</g> +<!-- ALSA&#45;&gt;sound card --> +<g id="edge78" class="edge"> +<title>ALSA&#45;&gt;sound card</title> +<path fill="none" stroke="green" d="M1181.39,-685.84C1168.76,-679.96 1154.16,-671.83 1143,-661.74 1061.6,-588.18 977.03,-545.63 1023,-446 1078.11,-326.56 1145.37,-321.63 1272,-286 1360.04,-261.23 1394.94,-308.38 1477,-268 1488.46,-262.36 1498.45,-252.55 1506.17,-243.1"/> +<polygon fill="green" stroke="green" points="1509.07,-245.08 1512.35,-235 1503.5,-240.83 1509.07,-245.08"/> +</g> +<!-- ALSA&#45;&gt;filesystem --> +<g id="edge84" class="edge"> +<title>ALSA&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M1182.45,-685.15C1172.96,-679.54 1163.3,-671.81 1158,-661.74 1126.03,-601.02 1174.05,-410.86 1219,-359 1235.44,-340.04 1260.02,-327.19 1282.07,-318.81"/> +<polygon fill="black" stroke="black" points="1283.42,-322.04 1291.65,-315.38 1281.06,-315.45 1283.42,-322.04"/> +</g> +<!-- ALSA&#45;&gt;null --> +<g id="edge83" class="edge"> +<title>ALSA&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1204.93,-679.39C1192.88,-623.2 1163.81,-444.9 1257,-359 1296.04,-323.01 1664.16,-309.61 1790.03,-306.05"/> +<polygon fill="red" stroke="red" points="1790.51,-309.54 1800.41,-305.77 1790.32,-302.54 1790.51,-309.54"/> +</g> +<!-- ALSA&#45;&gt;JACK --> +<g id="edge81" class="edge"> +<title>ALSA&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1245.69,-693.18C1271.65,-689.1 1306.14,-680.37 1331,-661.74 1353.62,-644.79 1345.17,-628.14 1365,-608 1406,-566.37 1432.03,-575.6 1475,-536 1489.9,-522.26 1489.38,-515.01 1503,-500 1507.04,-495.55 1511.53,-491 1515.97,-486.72"/> +<polygon fill="black" stroke="black" points="1518.4,-489.23 1523.27,-479.82 1513.59,-484.14 1518.4,-489.23"/> +</g> +<!-- ALSA&#45;&gt;sndio --> +<g id="edge57" class="edge"> +<title>ALSA&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M1190.27,-681.36C1186.3,-675.47 1182.9,-668.53 1181,-661.74 1132.04,-486.33 1098.28,-396.82 1210,-253 1252.86,-197.83 1332.14,-167.1 1379.32,-153.55"/> +<polygon fill="black" stroke="black" points="1380.44,-156.87 1389.15,-150.84 1378.58,-150.12 1380.44,-156.87"/> +</g> +<!-- PulseAudio --> +<g id="node14" class="node"> +<title>PulseAudio</title> +<g id="a_node14"><a xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" xlink:title="PulseAudio"> +<ellipse fill="lightgrey" stroke="black" cx="1796" cy="-572" rx="51.99" ry="18"/> +<text text-anchor="middle" x="1796" y="-568.3" font-family="Times,serif" font-size="14.00">PulseAudio</text> +</a> +</g> +</g> +<!-- ALSA&#45;&gt;PulseAudio --> +<g id="edge80" class="edge"> +<title>ALSA&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1245.69,-690.14C1266.84,-686.93 1293.8,-683.06 1318,-679.74 1379.28,-671.33 1397.57,-682.02 1456,-661.74 1500.01,-646.47 1502.1,-623.59 1546,-608 1607.44,-586.18 1682.32,-577.95 1734.11,-574.85"/> +<polygon fill="black" stroke="black" points="1734.36,-578.34 1744.15,-574.3 1733.97,-571.35 1734.36,-578.34"/> +</g> +<!-- bluez --> +<g id="node15" class="node"> +<title>bluez</title> +<polygon fill="yellow" stroke="black" points="1452.35,-456.54 1452.35,-471.46 1431.64,-482 1402.36,-482 1381.65,-471.46 1381.65,-456.54 1402.36,-446 1431.64,-446 1452.35,-456.54"/> +<text text-anchor="middle" x="1417" y="-460.3" font-family="Times,serif" font-size="14.00">BlueZ</text> +</g> +<!-- ALSA&#45;&gt;bluez --> +<g id="edge18" class="edge"> +<title>ALSA&#45;&gt;bluez</title> +<path fill="none" stroke="black" d="M1243.84,-689.21C1262.1,-683.91 1283.96,-675.27 1300,-661.74 1314.8,-649.25 1374.9,-541.71 1402.73,-491.11"/> +<polygon fill="black" stroke="black" points="1405.95,-492.53 1407.69,-482.08 1399.81,-489.16 1405.95,-492.53"/> +</g> +<!-- aRts --> +<g id="node20" class="node"> +<title>aRts</title> +<ellipse fill="lightgrey" stroke="black" cx="472" cy="-144" rx="27" ry="18"/> +<text text-anchor="middle" x="472" y="-140.3" font-family="Times,serif" font-size="14.00">aRts</text> +</g> +<!-- ALSA&#45;&gt;aRts --> +<g id="edge82" class="edge"> +<title>ALSA&#45;&gt;aRts</title> +<path fill="none" stroke="black" d="M1172.38,-695.56C1090.99,-692.57 897.43,-683.36 836,-661.74 744.58,-629.56 472,-518.42 472,-421.5 472,-421.5 472,-421.5 472,-216 472,-201.65 472,-185.67 472,-172.51"/> +<polygon fill="black" stroke="black" points="475.5,-172.22 472,-162.22 468.5,-172.22 475.5,-172.22"/> +</g> +<!-- PipeWire --> +<g id="node26" class="node"> +<title>PipeWire</title> +<g id="a_node26"><a xlink:href="http://pipewire.org/" xlink:title="PipeWire"> +<ellipse fill="lightgrey" stroke="black" cx="1572" cy="-377" rx="44.39" ry="18"/> +<text text-anchor="middle" x="1572" y="-373.3" font-family="Times,serif" font-size="14.00">PipeWire</text> +</a> +</g> +</g> +<!-- ALSA&#45;&gt;PipeWire --> +<g id="edge50" class="edge"> +<title>ALSA&#45;&gt;PipeWire</title> +<path fill="none" stroke="black" d="M1212.54,-679.73C1223.04,-633.89 1258.45,-507.12 1340,-446 1406.19,-396.39 1439.83,-418.97 1519,-395 1522.29,-394 1525.69,-392.96 1529.1,-391.89"/> +<polygon fill="black" stroke="black" points="1530.21,-395.21 1538.69,-388.87 1528.1,-388.54 1530.21,-395.21"/> +</g> +<!-- JACK&#45;&gt;PipeWire --> +<g id="edge51" class="edge"> +<title>JACK&#45;&gt;PipeWire</title> +<path fill="none" stroke="black" d="M1546.32,-446.21C1550.81,-434.29 1556.92,-418.06 1562.05,-404.42"/> +<polygon fill="black" stroke="black" points="1565.33,-405.64 1565.58,-395.05 1558.78,-403.17 1565.33,-405.64"/> +</g> +<!-- OSS&#45;&gt;sound card --> +<g id="edge86" class="edge"> +<title>OSS&#45;&gt;sound card</title> +<path fill="none" stroke="green" d="M939.7,-299.01C1036.71,-285.54 1353.17,-241.59 1474.79,-224.7"/> +<polygon fill="green" stroke="green" points="1475.49,-228.13 1484.91,-223.29 1474.53,-221.2 1475.49,-228.13"/> +<text text-anchor="middle" x="1363" y="-256.8" font-family="Times,serif" font-size="14.00" fill="green">third&#45;party drivers from opensound.com</text> +</g> +<!-- OSS&#45;&gt;ALSA --> +<g id="edge85" class="edge"> +<title>OSS&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M913.95,-322.1C919.66,-354 933.35,-424.55 952,-482 955.35,-492.31 1019.58,-654.92 1028,-661.74 1048.17,-678.08 1115.47,-687.77 1162.06,-692.67"/> +<polygon fill="black" stroke="black" points="1161.94,-696.18 1172.24,-693.7 1162.65,-689.21 1161.94,-696.18"/> +</g> +<!-- RoarAudio --> +<g id="node23" class="node"> +<title>RoarAudio</title> +<g id="a_node23"><a xlink:href="http://roaraudio.keep-cool.org/" xlink:title="RoarAudio"> +<ellipse fill="lightgrey" stroke="black" cx="993" cy="-217" rx="50.09" ry="18"/> +<text text-anchor="middle" x="993" y="-213.3" font-family="Times,serif" font-size="14.00">RoarAudio</text> +</a> +</g> +</g> +<!-- OSS&#45;&gt;RoarAudio --> +<g id="edge35" class="edge"> +<title>OSS&#45;&gt;RoarAudio</title> +<path fill="none" stroke="black" d="M926.04,-287.41C938.4,-274.59 956.12,-256.23 970.22,-241.61"/> +<polygon fill="black" stroke="black" points="972.79,-243.99 977.22,-234.36 967.75,-239.13 972.79,-243.99"/> +</g> +<!-- asihpi&#45;&gt;sound card --> +<g id="edge5" class="edge"> +<title>asihpi&#45;&gt;sound card</title> +<path fill="none" stroke="green" d="M2225.83,-499.66C2229.91,-450.44 2233.73,-309.79 2152,-253 2104.79,-220.19 1710.77,-217.67 1571.52,-217.81"/> +<polygon fill="green" stroke="green" points="1571.16,-214.31 1561.16,-217.83 1571.17,-221.31 1571.16,-214.31"/> +</g> +<!-- sndio&#45;&gt;network card --> +<g id="edge55" class="edge"> +<title>sndio&#45;&gt;network card</title> +<path fill="none" stroke="black" d="M1378.33,-137.07C1295.86,-124.42 1102.53,-94.78 1007.98,-80.28"/> +<polygon fill="black" stroke="black" points="1377.97,-140.56 1388.39,-138.61 1379.03,-133.64 1377.97,-140.56"/> +<polygon fill="black" stroke="black" points="1008.47,-76.81 998.05,-78.76 1007.41,-83.73 1008.47,-76.81"/> +</g> +<!-- sndio&#45;&gt;ALSA --> +<g id="edge54" class="edge"> +<title>sndio&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1391.29,-153.52C1350.22,-167.07 1270.88,-197.8 1228,-253 1116.28,-396.82 1150.04,-486.33 1199,-661.74 1199.8,-664.61 1200.87,-667.51 1202.06,-670.34"/> +<polygon fill="black" stroke="black" points="1198.94,-671.96 1206.29,-679.6 1205.31,-669.05 1198.94,-671.96"/> +</g> +<!-- PulseAudio&#45;&gt;network card --> +<g id="edge9" class="edge"> +<title>PulseAudio&#45;&gt;network card</title> +<path fill="none" stroke="green" d="M1855.34,-564.87C1890.01,-559.9 1934.08,-551.13 1971,-536 2161.14,-458.08 2405.21,-331.14 2266,-180 2179.51,-86.1 1244.61,-73.84 1008.11,-72.24"/> +<polygon fill="green" stroke="green" points="1854.8,-561.41 1845.36,-566.24 1855.74,-568.35 1854.8,-561.41"/> +<polygon fill="green" stroke="green" points="1008.05,-68.74 998.03,-72.18 1008.01,-75.74 1008.05,-68.74"/> +<text text-anchor="middle" x="2437.5" y="-300.3" font-family="Times,serif" font-size="14.00" fill="green">DLNA, RTP, SDP, SAP, RAOP, Tunnel, HTTP</text> +</g> +<!-- PulseAudio&#45;&gt;sound card --> +<g id="edge11" class="edge"> +<title>PulseAudio&#45;&gt;sound card</title> +<path fill="none" stroke="green" d="M1847.06,-568.47C1878.01,-564.78 1916.99,-556.11 1946,-536 1956.7,-528.58 2072.23,-353.46 2076,-341 2076.13,-340.57 2076.26,-340.36 2076,-340 2017.6,-257.27 1695.12,-228.69 1571.37,-220.68"/> +<polygon fill="green" stroke="green" points="1571.27,-217.16 1561.07,-220.03 1570.83,-224.15 1571.27,-217.16"/> +</g> +<!-- PulseAudio&#45;&gt;null --> +<g id="edge10" class="edge"> +<title>PulseAudio&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1826.61,-557.37C1835.08,-552 1843.24,-544.93 1848,-536 1884.2,-468 1857.24,-372.36 1841.39,-328.57"/> +<polygon fill="red" stroke="red" points="1844.62,-327.21 1837.83,-319.08 1838.07,-329.67 1844.62,-327.21"/> +</g> +<!-- PulseAudio&#45;&gt;ALSA --> +<g id="edge7" class="edge"> +<title>PulseAudio&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1744.67,-575.08C1696.71,-578.35 1623.96,-586.7 1564,-608 1520.1,-623.59 1518.01,-646.47 1474,-661.74 1415.57,-682.02 1397.28,-671.33 1336,-679.74 1309.54,-683.37 1279.76,-687.66 1255.59,-691.03"/> +<polygon fill="black" stroke="black" points="1255.03,-687.57 1245.6,-692.4 1255.99,-694.5 1255.03,-687.57"/> +</g> +<!-- PulseAudio&#45;&gt;JACK --> +<g id="edge12" class="edge"> +<title>PulseAudio&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1755.11,-560.74C1738.23,-555.21 1719.12,-547.18 1704,-536 1687.7,-523.95 1693.3,-510.57 1676,-500 1639.33,-477.59 1622.18,-494.29 1581,-482 1578.69,-481.31 1576.34,-480.54 1573.99,-479.71"/> +<polygon fill="black" stroke="black" points="1575.01,-476.36 1564.42,-476.09 1572.53,-482.9 1575.01,-476.36"/> +</g> +<!-- PulseAudio&#45;&gt;OSS --> +<g id="edge8" class="edge"> +<title>PulseAudio&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1808.66,-544.54C1819.31,-518.24 1830.54,-477.4 1815,-446 1786.74,-388.87 1761.01,-380.47 1701,-359 1647.82,-339.97 1249.29,-345.58 1193,-341 1105.84,-333.91 1004.24,-319.39 949.94,-311.12"/> +<polygon fill="black" stroke="black" points="1805.39,-543.28 1804.66,-553.85 1811.82,-546.04 1805.39,-543.28"/> +<polygon fill="black" stroke="black" points="950.15,-307.61 939.73,-309.55 949.09,-314.53 950.15,-307.61"/> +</g> +<!-- PulseAudio&#45;&gt;sndio --> +<g id="edge56" class="edge"> +<title>PulseAudio&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M1847.35,-568.51C1884.11,-564.95 1933.83,-556.41 1973,-536 2083.95,-478.2 2176,-466.1 2176,-341 2176,-341 2176,-341 2176,-216 2176,-143.15 1614.49,-143.09 1457.4,-144.5"/> +<polygon fill="black" stroke="black" points="1457.19,-141 1447.22,-144.6 1457.26,-148 1457.19,-141"/> +</g> +<!-- PulseAudio&#45;&gt;bluez --> +<g id="edge13" class="edge"> +<title>PulseAudio&#45;&gt;bluez</title> +<path fill="none" stroke="black" d="M1756.87,-560.06C1684.71,-539.87 1531.35,-496.98 1457.89,-476.44"/> +<polygon fill="black" stroke="black" points="1458.64,-473.01 1448.07,-473.69 1456.76,-479.75 1458.64,-473.01"/> +</g> +<!-- ofono --> +<g id="node16" class="node"> +<title>ofono</title> +<polygon fill="yellow" stroke="black" points="1657.54,-456.54 1657.54,-471.46 1637.89,-482 1610.11,-482 1590.46,-471.46 1590.46,-456.54 1610.11,-446 1637.89,-446 1657.54,-456.54"/> +<text text-anchor="middle" x="1624" y="-460.3" font-family="Times,serif" font-size="14.00">ofono</text> +</g> +<!-- PulseAudio&#45;&gt;ofono --> +<g id="edge14" class="edge"> +<title>PulseAudio&#45;&gt;ofono</title> +<path fill="none" stroke="black" d="M1763.93,-557.72C1752.25,-552.02 1739.38,-544.66 1729,-536 1713.44,-523.01 1716.91,-512.56 1701,-500 1689.41,-490.85 1675.04,-483.49 1661.86,-477.92"/> +<polygon fill="black" stroke="black" points="1663.12,-474.65 1652.53,-474.18 1660.52,-481.15 1663.12,-474.65"/> +</g> +<!-- sox --> +<g id="node17" class="node"> +<title>sox</title> +<g id="a_node17"><a xlink:href="http://sox.sourceforge.net/Docs/Features" xlink:title="sox"> +<ellipse fill="lightgrey" stroke="black" cx="1779" cy="-464" rx="27" ry="18"/> +<text text-anchor="middle" x="1779" y="-460.3" font-family="Times,serif" font-size="14.00">sox</text> +</a> +</g> +</g> +<!-- PulseAudio&#45;&gt;sox --> +<g id="edge15" class="edge"> +<title>PulseAudio&#45;&gt;sox</title> +<path fill="none" stroke="black" d="M1788.15,-553.97C1783.64,-537.28 1779.23,-511.58 1777.37,-492.08"/> +<polygon fill="black" stroke="black" points="1780.85,-491.7 1776.61,-481.99 1773.87,-492.22 1780.85,-491.7"/> +</g> +<!-- PulseAudio&#45;&gt;PipeWire --> +<g id="edge49" class="edge"> +<title>PulseAudio&#45;&gt;PipeWire</title> +<path fill="none" stroke="black" d="M1767.42,-548.6C1762.78,-544.57 1758.14,-540.28 1754,-536 1739.91,-521.43 1739.75,-514.9 1726,-500 1701.89,-473.88 1694.61,-468.39 1667,-446 1646.1,-429.05 1621.34,-411.41 1602.34,-398.34"/> +<polygon fill="black" stroke="black" points="1765.24,-551.34 1775.14,-555.1 1769.74,-545.99 1765.24,-551.34"/> +<polygon fill="black" stroke="black" points="1604.29,-395.43 1594.05,-392.68 1600.34,-401.21 1604.29,-395.43"/> +</g> +<!-- bluez&#45;&gt;Bluetooth card --> +<g id="edge19" class="edge"> +<title>bluez&#45;&gt;Bluetooth card</title> +<path fill="none" stroke="green" d="M1381.74,-456.27C1365.83,-451.29 1348.52,-442.7 1339,-428 1334.62,-421.23 1334.51,-412.92 1336.19,-405.04"/> +<polygon fill="green" stroke="green" points="1339.55,-406 1339.08,-395.42 1332.85,-403.99 1339.55,-406"/> +</g> +<!-- ofono&#45;&gt;phone modem --> +<g id="edge17" class="edge"> +<title>ofono&#45;&gt;phone modem</title> +<path fill="none" stroke="green" d="M1600.79,-450.82C1575.58,-437.59 1534.78,-416.18 1503.92,-400"/> +<polygon fill="green" stroke="green" points="1505.18,-396.7 1494.69,-395.15 1501.92,-402.9 1505.18,-396.7"/> +</g> +<!-- sox&#45;&gt;filesystem --> +<g id="edge20" class="edge"> +<title>sox&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M1771.69,-446.43C1760.3,-422.74 1735.92,-379.76 1701,-359 1650.29,-328.86 1484.8,-314.27 1393.64,-308.36"/> +<polygon fill="black" stroke="black" points="1393.64,-304.85 1383.44,-307.71 1393.2,-311.84 1393.64,-304.85"/> +</g> +<!-- sox&#45;&gt;null --> +<g id="edge21" class="edge"> +<title>sox&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1784.72,-446.03C1792.65,-422.47 1807.45,-378.51 1820,-341 1821.24,-337.28 1822.56,-333.35 1823.84,-329.5"/> +<polygon fill="red" stroke="red" points="1827.26,-330.31 1827.1,-319.72 1820.62,-328.1 1827.26,-330.31"/> +</g> +<!-- sox&#45;&gt;ALSA --> +<g id="edge24" class="edge"> +<title>sox&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1756.76,-474.32C1704.55,-496.35 1570.3,-553.85 1461,-608 1416.14,-630.22 1408.84,-644.05 1362,-661.74 1327.42,-674.8 1286.52,-683.85 1255.71,-689.47"/> +<polygon fill="black" stroke="black" points="1254.91,-686.05 1245.68,-691.24 1256.13,-692.95 1254.91,-686.05"/> +</g> +<!-- sox&#45;&gt;PulseAudio --> +<g id="edge23" class="edge"> +<title>sox&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1786.64,-481.29C1791.22,-497.91 1795.72,-523.97 1797.61,-543.74"/> +<polygon fill="black" stroke="black" points="1794.14,-544.26 1798.38,-553.97 1801.12,-543.73 1794.14,-544.26"/> +</g> +<!-- libao --> +<g id="node19" class="node"> +<title>libao</title> +<g id="a_node19"><a xlink:href="https://www.xiph.org/ao/" xlink:title="libao"> +<ellipse fill="lightgrey" stroke="black" cx="1663" cy="-377" rx="28.7" ry="18"/> +<text text-anchor="middle" x="1663" y="-373.3" font-family="Times,serif" font-size="14.00">libao</text> +</a> +</g> +</g> +<!-- sox&#45;&gt;libao --> +<g id="edge22" class="edge"> +<title>sox&#45;&gt;libao</title> +<path fill="none" stroke="black" d="M1761.38,-450.09C1742.25,-436.07 1711.47,-413.52 1689.43,-397.37"/> +<polygon fill="black" stroke="black" points="1691.3,-394.4 1681.17,-391.31 1687.16,-400.05 1691.3,-394.4"/> +</g> +<!-- X11 bell --> +<g id="node18" class="node"> +<title>X11 bell</title> +<ellipse fill="lightgrey" stroke="black" cx="1724" cy="-697.74" rx="41.69" ry="18"/> +<text text-anchor="middle" x="1724" y="-694.04" font-family="Times,serif" font-size="14.00">X11 bell</text> +</g> +<!-- X11 bell&#45;&gt;PulseAudio --> +<g id="edge16" class="edge"> +<title>X11 bell&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1733.16,-679.92C1743.01,-661.97 1759.25,-632.77 1774,-608 1775.91,-604.79 1777.96,-601.44 1780,-598.13"/> +<polygon fill="black" stroke="black" points="1782.98,-599.97 1785.32,-589.63 1777.05,-596.26 1782.98,-599.97"/> +</g> +<!-- libao&#45;&gt;filesystem --> +<g id="edge25" class="edge"> +<title>libao&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M1641.24,-365.2C1636.01,-362.91 1630.38,-360.67 1625,-359 1546.91,-334.72 1453.52,-319.83 1393.51,-312"/> +<polygon fill="black" stroke="black" points="1393.81,-308.51 1383.44,-310.71 1392.92,-315.45 1393.81,-308.51"/> +</g> +<!-- libao&#45;&gt;null --> +<g id="edge31" class="edge"> +<title>libao&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1691.38,-374.78C1722.02,-372.24 1771.13,-364.49 1806,-341 1811.24,-337.47 1815.8,-332.51 1819.56,-327.39"/> +<polygon fill="red" stroke="red" points="1822.59,-329.15 1825.14,-318.87 1816.74,-325.32 1822.59,-329.15"/> +</g> +<!-- libao&#45;&gt;ALSA --> +<g id="edge27" class="edge"> +<title>libao&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1641.22,-388.73C1635.99,-391.03 1630.37,-393.28 1625,-395 1516.18,-429.88 1466.84,-380.79 1373,-446 1326.66,-478.21 1272.35,-616.21 1239,-661.74 1236.5,-665.15 1233.75,-668.65 1230.97,-672.05"/> +<polygon fill="black" stroke="black" points="1228.27,-669.82 1224.5,-679.72 1233.62,-674.33 1228.27,-669.82"/> +</g> +<!-- libao&#45;&gt;OSS --> +<g id="edge26" class="edge"> +<title>libao&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1641.8,-364.79C1636.46,-362.45 1630.63,-360.3 1625,-359 1511.27,-332.67 1216.01,-353.96 1100,-341 1047.35,-335.12 987.4,-322.71 949.4,-314.12"/> +<polygon fill="black" stroke="black" points="949.82,-310.62 939.29,-311.8 948.26,-317.44 949.82,-310.62"/> +</g> +<!-- libao&#45;&gt;sndio --> +<g id="edge34" class="edge"> +<title>libao&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M1658.62,-358.99C1648.77,-324.03 1621.59,-243.62 1570,-199 1537.56,-170.94 1489.59,-157.16 1456.04,-150.59"/> +<polygon fill="black" stroke="black" points="1456.59,-147.14 1446.12,-148.78 1455.33,-154.02 1456.59,-147.14"/> +</g> +<!-- libao&#45;&gt;PulseAudio --> +<g id="edge29" class="edge"> +<title>libao&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1674.7,-393.58C1691.85,-416.57 1724.66,-461.07 1751,-500 1761.03,-514.83 1771.79,-531.75 1780.26,-545.36"/> +<polygon fill="black" stroke="black" points="1777.49,-547.52 1785.73,-554.18 1783.44,-543.83 1777.49,-547.52"/> +</g> +<!-- libao&#45;&gt;aRts --> +<g id="edge28" class="edge"> +<title>libao&#45;&gt;aRts</title> +<path fill="none" stroke="black" d="M1641.8,-364.79C1636.46,-362.45 1630.63,-360.3 1625,-359 1461.98,-321.32 1035.05,-363.64 873,-322 725.83,-284.18 564.28,-197.67 500.32,-161.44"/> +<polygon fill="black" stroke="black" points="502.02,-158.38 491.6,-156.47 498.55,-164.46 502.02,-158.38"/> +</g> +<!-- ESD --> +<g id="node21" class="node"> +<title>ESD</title> +<ellipse fill="lightgrey" stroke="black" cx="839" cy="-144" rx="27.1" ry="18"/> +<text text-anchor="middle" x="839" y="-140.3" font-family="Times,serif" font-size="14.00">ESD</text> +</g> +<!-- libao&#45;&gt;ESD --> +<g id="edge30" class="edge"> +<title>libao&#45;&gt;ESD</title> +<path fill="none" stroke="black" d="M1641.36,-364.79C1636.12,-362.51 1630.46,-360.39 1625,-359 1522.4,-332.89 1253.08,-346.17 1150,-322 1049.24,-298.37 1021.1,-290.9 934,-235 904.76,-216.23 876.55,-187.77 858.58,-167.89"/> +<polygon fill="black" stroke="black" points="861.02,-165.36 851.76,-160.21 855.78,-170.01 861.02,-165.36"/> +</g> +<!-- NAS --> +<g id="node22" class="node"> +<title>NAS</title> +<ellipse fill="lightgrey" stroke="black" cx="295" cy="-304" rx="90.98" ry="18"/> +<text text-anchor="middle" x="295" y="-300.3" font-family="Times,serif" font-size="14.00">Network Audio Server</text> +</g> +<!-- libao&#45;&gt;NAS --> +<g id="edge32" class="edge"> +<title>libao&#45;&gt;NAS</title> +<path fill="none" stroke="black" d="M1641.81,-364.75C1636.47,-362.41 1630.64,-360.27 1625,-359 1539.57,-339.74 924.49,-344.9 837,-341 679.11,-333.96 495.66,-320.71 387.78,-312.39"/> +<polygon fill="black" stroke="black" points="387.82,-308.89 377.58,-311.61 387.28,-315.87 387.82,-308.89"/> +</g> +<!-- libao&#45;&gt;RoarAudio --> +<g id="edge33" class="edge"> +<title>libao&#45;&gt;RoarAudio</title> +<path fill="none" stroke="black" d="M1641.33,-364.89C1636.1,-362.61 1630.44,-360.46 1625,-359 1472.66,-318.06 1425.57,-358.06 1272,-322 1183.41,-301.2 1084.72,-259.83 1031.72,-236.01"/> +<polygon fill="black" stroke="black" points="1032.92,-232.71 1022.37,-231.78 1030.04,-239.09 1032.92,-232.71"/> +</g> +<!-- ESD&#45;&gt;network card --> +<g id="edge43" class="edge"> +<title>ESD&#45;&gt;network card</title> +<path fill="none" stroke="black" d="M858.25,-131.12C874.33,-121.19 897.71,-106.75 917.35,-94.63"/> +<polygon fill="black" stroke="black" points="919.39,-97.48 926.06,-89.25 915.72,-91.52 919.39,-97.48"/> +</g> +<!-- ESD&#45;&gt;ALSA --> +<g id="edge42" class="edge"> +<title>ESD&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M829.04,-160.95C809.48,-194.27 769.33,-273.77 786,-341 809.58,-436.13 832.75,-455.73 889,-536 932.29,-597.78 936.85,-625.49 1003,-661.74 1052.63,-688.94 1118.26,-695.98 1161.97,-697.34"/> +<polygon fill="black" stroke="black" points="1161.97,-700.84 1172.04,-697.56 1162.12,-693.84 1161.97,-700.84"/> +</g> +<!-- ESD&#45;&gt;OSS --> +<g id="edge41" class="edge"> +<title>ESD&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M841.72,-162.21C845.07,-180.8 851.76,-210.98 863,-235 870.31,-250.63 881.25,-266.48 890.84,-278.94"/> +<polygon fill="black" stroke="black" points="888.25,-281.31 897.2,-286.98 893.74,-276.96 888.25,-281.31"/> +</g> +<!-- NAS&#45;&gt;network card --> +<g id="edge108" class="edge"> +<title>NAS&#45;&gt;network card</title> +<path fill="none" stroke="black" d="M302.48,-285.82C319.72,-248.65 366.21,-161.24 436,-126 516.21,-85.5 784.1,-75.34 899.91,-72.82"/> +<polygon fill="black" stroke="black" points="900.04,-76.32 909.97,-72.61 899.9,-69.32 900.04,-76.32"/> +</g> +<!-- RoarAudio&#45;&gt;network card --> +<g id="edge40" class="edge"> +<title>RoarAudio&#45;&gt;network card</title> +<path fill="none" stroke="black" d="M985.67,-188.93C978.69,-163.16 968.25,-124.6 961.28,-98.89"/> +<polygon fill="black" stroke="black" points="982.38,-190.18 988.37,-198.92 989.14,-188.35 982.38,-190.18"/> +<polygon fill="black" stroke="black" points="964.61,-97.8 958.62,-89.06 957.86,-99.63 964.61,-97.8"/> +<text text-anchor="middle" x="1047.5" y="-140.3" font-family="Times,serif" font-size="14.00">IPv4, DECnet, OpenSLP</text> +</g> +<!-- RoarAudio&#45;&gt;sndio --> +<g id="edge36" class="edge"> +<title>RoarAudio&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M1034.71,-206.98C1071.11,-199.27 1125.41,-188.17 1173,-180 1245.11,-167.63 1329.72,-156.17 1377.98,-149.93"/> +<polygon fill="black" stroke="black" points="1378.53,-153.38 1388,-148.64 1377.63,-146.44 1378.53,-153.38"/> +</g> +<!-- RoarAudio&#45;&gt;PulseAudio --> +<g id="edge37" class="edge"> +<title>RoarAudio&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1033.4,-227.72C1084.95,-239.63 1177,-259.32 1257,-268 1291.2,-271.71 1851.8,-261.55 1876,-286 1891.69,-301.85 1907.2,-485.45 1868,-536 1861.74,-544.07 1853.14,-550.39 1844.06,-555.31"/> +<polygon fill="black" stroke="black" points="1842.35,-552.24 1834.89,-559.76 1845.41,-558.54 1842.35,-552.24"/> +</g> +<!-- RoarAudio&#45;&gt;aRts --> +<g id="edge39" class="edge"> +<title>RoarAudio&#45;&gt;aRts</title> +<path fill="none" stroke="black" d="M946.76,-209.7C844.49,-195.76 600.84,-162.56 508.41,-149.96"/> +<polygon fill="black" stroke="black" points="508.79,-146.48 498.41,-148.6 507.85,-153.42 508.79,-146.48"/> +</g> +<!-- RoarAudio&#45;&gt;ESD --> +<g id="edge38" class="edge"> +<title>RoarAudio&#45;&gt;ESD</title> +<path fill="none" stroke="black" d="M963.31,-202.31C936.53,-189.96 897.29,-171.87 870.09,-159.33"/> +<polygon fill="black" stroke="black" points="871.2,-155.99 860.66,-154.98 868.27,-162.35 871.2,-155.99"/> +</g> +<!-- libcanberra --> +<g id="node24" class="node"> +<title>libcanberra</title> +<g id="a_node24"><a xlink:href="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" xlink:title="libcanberra"> +<ellipse fill="lightgrey" stroke="black" cx="1350" cy="-843.74" rx="50.09" ry="18"/> +<text text-anchor="middle" x="1350" y="-840.04" font-family="Times,serif" font-size="14.00">libcanberra</text> +</a> +</g> +</g> +<!-- libcanberra&#45;&gt;null --> +<g id="edge48" class="edge"> +<title>libcanberra&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1346.38,-825.56C1329.31,-743.54 1258.96,-394.4 1291,-359 1324.35,-322.15 1669,-309.39 1790.16,-306.02"/> +<polygon fill="red" stroke="red" points="1790.27,-309.51 1800.17,-305.74 1790.08,-302.52 1790.27,-309.51"/> +</g> +<!-- libcanberra&#45;&gt;ALSA --> +<g id="edge46" class="edge"> +<title>libcanberra&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1308.19,-833.67C1282.34,-825.94 1250.48,-812.23 1231,-788.74 1216.45,-771.19 1211.26,-745.48 1209.54,-726.03"/> +<polygon fill="black" stroke="black" points="1213.03,-725.72 1208.9,-715.96 1206.04,-726.16 1213.03,-725.72"/> +</g> +<!-- libcanberra&#45;&gt;OSS --> +<g id="edge45" class="edge"> +<title>libcanberra&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1300.01,-842.24C1189.85,-838.29 924.94,-812.68 786,-661.74 694.37,-562.19 674.64,-468.58 754,-359 780.89,-321.87 834.97,-310.03 872.07,-306.39"/> +<polygon fill="black" stroke="black" points="872.37,-309.88 882.05,-305.57 871.8,-302.9 872.37,-309.88"/> +</g> +<!-- libcanberra&#45;&gt;PulseAudio --> +<g id="edge44" class="edge"> +<title>libcanberra&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1374.61,-827.85C1449.84,-782.36 1676.77,-645.11 1762.62,-593.19"/> +<polygon fill="black" stroke="black" points="1764.44,-596.18 1771.19,-588.01 1760.82,-590.19 1764.44,-596.18"/> +</g> +<!-- gstreamer --> +<g id="node25" class="node"> +<title>gstreamer</title> +<ellipse fill="lightgrey" stroke="black" cx="1680" cy="-770.74" rx="46.29" ry="18"/> +<text text-anchor="middle" x="1680" y="-767.04" font-family="Times,serif" font-size="14.00">gstreamer</text> +</g> +<!-- libcanberra&#45;&gt;gstreamer --> +<g id="edge47" class="edge"> +<title>libcanberra&#45;&gt;gstreamer</title> +<path fill="none" stroke="black" d="M1395.59,-836.21C1436.71,-829.99 1498.72,-819.82 1552,-807.74 1580,-801.39 1611,-792.72 1635.48,-785.47"/> +<polygon fill="black" stroke="black" points="1636.63,-788.79 1645.21,-782.57 1634.62,-782.08 1636.63,-788.79"/> +</g> +<!-- gstreamer&#45;&gt;ALSA --> +<g id="edge109" class="edge"> +<title>gstreamer&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1637.79,-763.38C1549.84,-750.12 1347.56,-719.63 1255.8,-705.79"/> +<polygon fill="black" stroke="black" points="1256.1,-702.3 1245.69,-704.27 1255.06,-709.22 1256.1,-702.3"/> +</g> +<!-- gstreamer&#45;&gt;JACK --> +<g id="edge111" class="edge"> +<title>gstreamer&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1665.05,-753.4C1656.52,-743.25 1646.3,-729.54 1640,-715.74 1609.42,-648.75 1644.54,-615.48 1604,-554 1596.46,-542.57 1588.07,-546.25 1579,-536 1567.26,-522.74 1557.63,-505.34 1550.88,-491.09"/> +<polygon fill="black" stroke="black" points="1553.99,-489.47 1546.67,-481.81 1547.62,-492.36 1553.99,-489.47"/> +</g> +<!-- gstreamer&#45;&gt;OSS --> +<g id="edge110" class="edge"> +<title>gstreamer&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1714.66,-758.83C1732.06,-752.76 1753.17,-744.46 1771,-734.74 1836.7,-698.92 1842.72,-663.45 1857,-590 1878.49,-479.48 1857.35,-401.28 1753,-359 1703.02,-338.75 1321.8,-344.71 1268,-341 1152.32,-333.03 1016.13,-317.62 950.41,-309.8"/> +<polygon fill="black" stroke="black" points="950.45,-306.28 940.1,-308.57 949.61,-313.23 950.45,-306.28"/> +</g> +<!-- gstreamer&#45;&gt;sndio --> +<g id="edge58" class="edge"> +<title>gstreamer&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M1722.31,-763.53C1790.22,-752.07 1925.89,-722.96 2024,-661.74 2039.61,-652 2252,-439.9 2252,-421.5 2252,-421.5 2252,-421.5 2252,-216 2252,-159.89 2186.31,-189.44 2131,-180 1999.96,-157.63 1588.24,-148.19 1457.36,-145.7"/> +<polygon fill="black" stroke="black" points="1457.07,-142.2 1447,-145.51 1456.93,-149.2 1457.07,-142.2"/> +</g> +<!-- gstreamer&#45;&gt;PulseAudio --> +<g id="edge112" class="edge"> +<title>gstreamer&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1714.85,-758.74C1735.67,-750.33 1760.75,-736.56 1775,-715.74 1798.66,-681.16 1800.36,-630.82 1798.71,-600.09"/> +<polygon fill="black" stroke="black" points="1802.2,-599.83 1798.01,-590.09 1795.21,-600.31 1802.2,-599.83"/> +</g> +<!-- gstreamer&#45;&gt;PipeWire --> +<g id="edge52" class="edge"> +<title>gstreamer&#45;&gt;PipeWire</title> +<path fill="none" stroke="black" d="M1650.07,-756.88C1615.25,-740.25 1558.84,-707.86 1530,-661.74 1478.64,-579.6 1460.35,-534.82 1499,-446 1507.45,-426.57 1524.5,-410.18 1540,-398.36"/> +<polygon fill="black" stroke="black" points="1542.34,-400.98 1548.38,-392.28 1538.23,-395.32 1542.34,-400.98"/> +</g> +<!-- PipeWire&#45;&gt;? --> +<g id="edge53" class="edge"> +<title>PipeWire&#45;&gt;?</title> +<path fill="none" stroke="red" d="M1540.42,-364.25C1533.45,-362.12 1526.05,-360.2 1519,-359 1365.59,-332.97 974.55,-345.37 819,-341 680.32,-337.11 327.69,-362.49 195,-322 193.58,-321.57 192.15,-321.03 190.75,-320.43"/> +<polygon fill="red" stroke="red" points="192.35,-317.32 181.88,-315.69 189.05,-323.49 192.35,-317.32"/> +</g> +<!-- OpenAL --> +<g id="node27" class="node"> +<title>OpenAL</title> +<g id="a_node27"><a xlink:href="https://www.openal-soft.org/" xlink:title="OpenAL"> +<ellipse fill="lightgrey" stroke="black" cx="1855" cy="-843.74" rx="41.69" ry="18"/> +<text text-anchor="middle" x="1855" y="-840.04" font-family="Times,serif" font-size="14.00">OpenAL</text> +</a> +</g> +</g> +<!-- OpenAL&#45;&gt;filesystem --> +<g id="edge65" class="edge"> +<title>OpenAL&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M1895.61,-839.38C1956.31,-833.42 2066.14,-818.7 2090,-788.74 2194.6,-657.38 2039.12,-574.48 1931,-446 1894.35,-402.45 1888.8,-382.6 1837,-359 1759.31,-323.61 1510.18,-310.86 1393.44,-306.75"/> +<polygon fill="black" stroke="black" points="1393.36,-303.25 1383.24,-306.4 1393.12,-310.24 1393.36,-303.25"/> +</g> +<!-- OpenAL&#45;&gt;null --> +<g id="edge66" class="edge"> +<title>OpenAL&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1896.16,-840.99C1947.43,-837.93 2037.26,-829.68 2111,-807.74 2201.31,-780.86 2252.9,-796.16 2302,-715.74 2326.96,-674.87 2309.34,-655.32 2302,-608 2288.06,-518.13 2302.1,-479.44 2240,-413 2188.87,-358.29 1959.27,-322.09 1868.8,-309.72"/> +<polygon fill="red" stroke="red" points="1869.11,-306.23 1858.73,-308.37 1868.18,-313.17 1869.11,-306.23"/> +</g> +<!-- OpenAL&#45;&gt;portaudio --> +<g id="edge63" class="edge"> +<title>OpenAL&#45;&gt;portaudio</title> +<path fill="none" stroke="black" d="M1891.75,-835.23C1916.93,-829.39 1950.75,-820.19 1979,-807.74 1988.68,-803.47 1998.66,-797.8 2007.55,-792.23"/> +<polygon fill="black" stroke="black" points="2009.54,-795.12 2016.03,-786.75 2005.74,-789.24 2009.54,-795.12"/> +</g> +<!-- OpenAL&#45;&gt;ALSA --> +<g id="edge60" class="edge"> +<title>OpenAL&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1814.14,-839.69C1759.63,-835.15 1660.32,-825.2 1577,-807.74 1454.8,-782.13 1314.33,-735.61 1247.81,-712.52"/> +<polygon fill="black" stroke="black" points="1248.75,-709.14 1238.16,-709.15 1246.45,-715.75 1248.75,-709.14"/> +</g> +<!-- OpenAL&#45;&gt;JACK --> +<g id="edge64" class="edge"> +<title>OpenAL&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1815.21,-838.28C1756.83,-830.96 1651.96,-814.56 1625,-788.74 1540.67,-707.98 1536.36,-554.55 1538.4,-492.28"/> +<polygon fill="black" stroke="black" points="1541.91,-492.22 1538.82,-482.09 1534.91,-491.93 1541.91,-492.22"/> +</g> +<!-- OpenAL&#45;&gt;OSS --> +<g id="edge61" class="edge"> +<title>OpenAL&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1813.36,-842.32C1757.42,-840.7 1655.51,-833.99 1573,-807.74 1442.26,-766.14 1419.15,-731.49 1301,-661.74 1269.32,-643.04 1048.88,-508.14 1023,-482 1010.76,-469.64 954.26,-376.9 926.49,-330.82"/> +<polygon fill="black" stroke="black" points="929.34,-328.77 921.19,-322 923.34,-332.38 929.34,-328.77"/> +</g> +<!-- OpenAL&#45;&gt;PulseAudio --> +<g id="edge59" class="edge"> +<title>OpenAL&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1875.14,-827.92C1886.55,-818.21 1899.76,-804.44 1906,-788.74 1911.91,-773.87 1908.33,-768.57 1906,-752.74 1901.06,-719.22 1899.58,-709.83 1884,-679.74 1865.4,-643.82 1854.11,-638.89 1828,-608 1824.99,-604.44 1821.74,-600.74 1818.51,-597.14"/> +<polygon fill="black" stroke="black" points="1820.89,-594.54 1811.57,-589.5 1815.71,-599.25 1820.89,-594.54"/> +</g> +<!-- SoundIO --> +<g id="node28" class="node"> +<title>SoundIO</title> +<g id="a_node28"><a xlink:href="http://libsound.io/" xlink:title="SoundIO"> +<ellipse fill="lightgrey" stroke="black" cx="1855" cy="-770.74" rx="42.49" ry="18"/> +<text text-anchor="middle" x="1855" y="-767.04" font-family="Times,serif" font-size="14.00">SoundIO</text> +</a> +</g> +</g> +<!-- OpenAL&#45;&gt;SoundIO --> +<g id="edge62" class="edge"> +<title>OpenAL&#45;&gt;SoundIO</title> +<path fill="none" stroke="black" d="M1855,-825.55C1855,-817.53 1855,-807.79 1855,-798.81"/> +<polygon fill="black" stroke="black" points="1858.5,-798.77 1855,-788.77 1851.5,-798.77 1858.5,-798.77"/> +</g> +<!-- SoundIO&#45;&gt;null --> +<g id="edge70" class="edge"> +<title>SoundIO&#45;&gt;null</title> +<path fill="none" stroke="red" d="M1877.11,-755.39C1938.58,-713.51 2105.15,-585.56 2076,-446 2067.37,-404.7 2070.06,-386.43 2038,-359 1992,-319.64 1920.56,-308.54 1875.05,-305.65"/> +<polygon fill="red" stroke="red" points="1875.09,-302.15 1864.91,-305.12 1874.72,-309.14 1875.09,-302.15"/> +</g> +<!-- SoundIO&#45;&gt;ALSA --> +<g id="edge69" class="edge"> +<title>SoundIO&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1815.87,-763.81C1792.44,-760.35 1762.05,-756.04 1735,-752.74 1558.42,-731.18 1347.78,-711.32 1255.82,-702.94"/> +<polygon fill="black" stroke="black" points="1256,-699.44 1245.72,-702.02 1255.36,-706.41 1256,-699.44"/> +</g> +<!-- SoundIO&#45;&gt;JACK --> +<g id="edge67" class="edge"> +<title>SoundIO&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1844.25,-753.26C1818.98,-715.27 1752.59,-619.79 1682,-554 1651.16,-525.25 1639.88,-522.15 1604,-500 1593.85,-493.74 1582.51,-487.34 1572.22,-481.77"/> +<polygon fill="black" stroke="black" points="1573.61,-478.54 1563.14,-476.9 1570.3,-484.71 1573.61,-478.54"/> +</g> +<!-- SoundIO&#45;&gt;PulseAudio --> +<g id="edge68" class="edge"> +<title>SoundIO&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1849.87,-752.62C1839.55,-718.24 1816.26,-640.55 1803.96,-599.53"/> +<polygon fill="black" stroke="black" points="1807.3,-598.51 1801.08,-589.94 1800.6,-600.52 1807.3,-598.51"/> +</g> +<!-- RtAudio --> +<g id="node29" class="node"> +<title>RtAudio</title> +<g id="a_node29"><a xlink:href="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" xlink:title="RtAudio"> +<ellipse fill="lightgrey" stroke="black" cx="1281" cy="-770.74" rx="40.89" ry="18"/> +<text text-anchor="middle" x="1281" y="-767.04" font-family="Times,serif" font-size="14.00">RtAudio</text> +</a> +</g> +</g> +<!-- RtAudio&#45;&gt;ALSA --> +<g id="edge72" class="edge"> +<title>RtAudio&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1278.54,-752.72C1276.95,-746.26 1274.32,-739.16 1270,-733.74 1263.73,-725.88 1255.18,-719.45 1246.46,-714.35"/> +<polygon fill="black" stroke="black" points="1247.88,-711.14 1237.41,-709.51 1244.58,-717.31 1247.88,-711.14"/> +</g> +<!-- RtAudio&#45;&gt;JACK --> +<g id="edge73" class="edge"> +<title>RtAudio&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1298.28,-754.34C1337.58,-718.73 1435.23,-626.75 1500,-536 1510.22,-521.68 1519.94,-504.53 1527.25,-490.67"/> +<polygon fill="black" stroke="black" points="1530.41,-492.17 1531.89,-481.68 1524.19,-488.95 1530.41,-492.17"/> +</g> +<!-- RtAudio&#45;&gt;OSS --> +<g id="edge71" class="edge"> +<title>RtAudio&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1244.4,-762.51C1187.27,-749.83 1075.45,-719.3 998,-661.74 941.35,-619.64 923.77,-602.81 901,-536 877.01,-465.62 892.97,-376.16 903.63,-332.07"/> +<polygon fill="black" stroke="black" points="907.09,-332.67 906.13,-322.12 900.3,-330.97 907.09,-332.67"/> +<text text-anchor="middle" x="928.5" y="-514.3" font-family="Times,serif" font-size="14.00">OSS 4.0+</text> +</g> +<!-- RtAudio&#45;&gt;PulseAudio --> +<g id="edge74" class="edge"> +<title>RtAudio&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M1313.4,-759.46C1334.67,-752.63 1363.07,-743.37 1388,-734.74 1443.36,-715.58 1581.93,-662.46 1583,-661.74 1610.09,-643.56 1604.63,-624.11 1633,-608 1664,-590.4 1702.9,-581.63 1734.93,-577.27"/> +<polygon fill="black" stroke="black" points="1735.57,-580.72 1745.06,-576.01 1734.71,-573.77 1735.57,-580.72"/> +</g> +<!-- JUCE --> +<g id="node30" class="node"> +<title>JUCE</title> +<ellipse fill="lightgrey" stroke="black" cx="1052" cy="-770.74" rx="31.7" ry="18"/> +<text text-anchor="middle" x="1052" y="-767.04" font-family="Times,serif" font-size="14.00">JUCE</text> +</g> +<!-- JUCE&#45;&gt;? --> +<g id="edge77" class="edge"> +<title>JUCE&#45;&gt;?</title> +<path fill="none" stroke="red" d="M1022.29,-764.2C958.28,-751.59 803.49,-717.45 684,-661.74 473.86,-563.77 256.37,-382.03 189.09,-323.6"/> +<polygon fill="red" stroke="red" points="191.13,-320.74 181.29,-316.8 186.53,-326.01 191.13,-320.74"/> +</g> +<!-- JUCE&#45;&gt;ALSA --> +<g id="edge75" class="edge"> +<title>JUCE&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1076.43,-759.04C1081.55,-756.89 1086.93,-754.69 1092,-752.74 1114.82,-743.95 1121.66,-744.7 1144,-734.74 1155.3,-729.7 1167.25,-723.38 1177.79,-717.46"/> +<polygon fill="black" stroke="black" points="1179.7,-720.4 1186.63,-712.39 1176.21,-714.33 1179.7,-720.4"/> +</g> +<!-- JUCE&#45;&gt;JACK --> +<g id="edge76" class="edge"> +<title>JUCE&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M1068.28,-755.15C1089.36,-736.58 1127.61,-704.02 1163,-679.74 1284.66,-596.28 1440.85,-514.83 1507.51,-481.16"/> +<polygon fill="black" stroke="black" points="1509.32,-484.17 1516.68,-476.55 1506.17,-477.92 1509.32,-484.17"/> +</g> +<!-- SDL1 --> +<g id="node31" class="node"> +<title>SDL1</title> +<g id="a_node31"><a xlink:href="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" xlink:title="libSDL&#45;1.2"> +<ellipse fill="lightgrey" stroke="black" cx="698" cy="-770.74" rx="50.89" ry="18"/> +<text text-anchor="middle" x="698" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL&#45;1.2</text> +</a> +</g> +</g> +<!-- SDL1&#45;&gt;filesystem --> +<g id="edge90" class="edge"> +<title>SDL1&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M705.48,-752.79C729.14,-700.81 807.16,-541.41 914,-446 1005.24,-364.52 1048.49,-366.11 1168,-340 1204.83,-331.95 1246.36,-323.09 1278.41,-316.3"/> +<polygon fill="black" stroke="black" points="1279.41,-319.67 1288.47,-314.17 1277.96,-312.82 1279.41,-319.67"/> +</g> +<!-- SDL1&#45;&gt;null --> +<g id="edge94" class="edge"> +<title>SDL1&#45;&gt;null</title> +<path fill="none" stroke="red" d="M715.58,-753.73C756.32,-716.47 859.93,-620.66 942,-536 979.46,-497.36 979.3,-477.41 1023,-446 1102.04,-389.18 1131.5,-389.32 1224,-359 1259.96,-347.21 1269.56,-345.5 1307,-340 1485,-313.86 1699.86,-307.23 1789.5,-305.56"/> +<polygon fill="red" stroke="red" points="1789.61,-309.05 1799.55,-305.38 1789.49,-302.06 1789.61,-309.05"/> +</g> +<!-- SDL1&#45;&gt;ALSA --> +<g id="edge87" class="edge"> +<title>SDL1&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M744.25,-763.31C841.2,-749.84 1064.79,-718.78 1162.21,-705.24"/> +<polygon fill="black" stroke="black" points="1162.92,-708.68 1172.34,-703.83 1161.95,-701.74 1162.92,-708.68"/> +</g> +<!-- SDL1&#45;&gt;OSS --> +<g id="edge92" class="edge"> +<title>SDL1&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M690.68,-752.88C665.47,-691.9 588.95,-480.06 686,-359 694.95,-347.83 698.83,-345.61 712,-340 764.55,-317.62 830.76,-309.55 871.99,-306.64"/> +<polygon fill="black" stroke="black" points="872.41,-310.12 882.16,-305.99 871.96,-303.14 872.41,-310.12"/> +</g> +<!-- SDL1&#45;&gt;PulseAudio --> +<g id="edge93" class="edge"> +<title>SDL1&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M747.37,-766.56C844.79,-759.94 1068.5,-742.96 1255,-715.74 1337.45,-703.71 1357.19,-695.58 1439,-679.74 1480.76,-671.66 1495.78,-682.33 1533,-661.74 1561.55,-645.95 1554.25,-623.42 1583,-608 1608.83,-594.15 1682.62,-584.16 1736.11,-578.48"/> +<polygon fill="black" stroke="black" points="1736.6,-581.95 1746.18,-577.44 1735.88,-574.99 1736.6,-581.95"/> +</g> +<!-- SDL1&#45;&gt;aRts --> +<g id="edge88" class="edge"> +<title>SDL1&#45;&gt;aRts</title> +<path fill="none" stroke="black" d="M679.97,-753.63C641.07,-718 548.48,-628.32 495,-536 414.16,-396.46 434.15,-341.64 420,-181 418.99,-169.58 427.46,-161.49 437.84,-155.91"/> +<polygon fill="black" stroke="black" points="439.6,-158.95 447.26,-151.63 436.71,-152.58 439.6,-158.95"/> +</g> +<!-- SDL1&#45;&gt;ESD --> +<g id="edge89" class="edge"> +<title>SDL1&#45;&gt;ESD</title> +<path fill="none" stroke="black" d="M685.1,-752.94C677.62,-742.62 668.44,-728.9 662,-715.74 650.89,-693.01 649.43,-686.45 644,-661.74 624.88,-574.76 585.15,-391.49 609,-340 650.53,-250.34 755.85,-186.89 808.32,-159.74"/> +<polygon fill="black" stroke="black" points="810.14,-162.74 817.48,-155.09 806.98,-156.5 810.14,-162.74"/> +</g> +<!-- SDL1&#45;&gt;NAS --> +<g id="edge91" class="edge"> +<title>SDL1&#45;&gt;NAS</title> +<path fill="none" stroke="black" d="M649.23,-765.42C605.6,-759.65 541.41,-746.33 494,-715.74 467.99,-698.96 467.22,-687.47 450,-661.74 374.56,-549 322.08,-393.54 302.97,-331.81"/> +<polygon fill="black" stroke="black" points="306.26,-330.61 299.99,-322.07 299.57,-332.66 306.26,-330.61"/> +</g> +<!-- SDL2 --> +<g id="node32" class="node"> +<title>SDL2</title> +<g id="a_node32"><a xlink:href="https://hg.libsdl.org/SDL/file/355a4f94a782" xlink:title="libSDL&#45;2.0"> +<ellipse fill="lightgrey" stroke="black" cx="353" cy="-770.74" rx="50.89" ry="18"/> +<text text-anchor="middle" x="353" y="-767.04" font-family="Times,serif" font-size="14.00">libSDL&#45;2.0</text> +</a> +</g> +</g> +<!-- SDL2&#45;&gt;filesystem --> +<g id="edge98" class="edge"> +<title>SDL2&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M358.96,-752.68C360.92,-746.99 363.08,-740.6 365,-734.74 406.89,-606.59 359.68,-538.25 458,-446 577.77,-333.63 650.39,-369.25 812,-340 898.32,-324.38 1152.19,-312.34 1270.28,-307.42"/> +<polygon fill="black" stroke="black" points="1270.75,-310.91 1280.6,-307 1270.46,-303.91 1270.75,-310.91"/> +</g> +<!-- SDL2&#45;&gt;null --> +<g id="edge103" class="edge"> +<title>SDL2&#45;&gt;null</title> +<path fill="none" stroke="red" d="M381.39,-755.63C417.52,-736.94 480.86,-701.65 528,-661.74 552.22,-641.24 552.63,-630.5 575,-608 600.53,-582.32 606.28,-574.68 636,-554 677.79,-524.93 691.35,-522.52 737,-500 895.2,-421.97 935.01,-393.5 1108,-359 1190.36,-342.57 1212.31,-346.96 1296,-340 1481.08,-324.61 1702.58,-311.98 1791.83,-307.13"/> +<polygon fill="red" stroke="red" points="1792.25,-310.62 1802.04,-306.58 1791.87,-303.63 1792.25,-310.62"/> +</g> +<!-- SDL2&#45;&gt;ALSA --> +<g id="edge95" class="edge"> +<title>SDL2&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M402.37,-766.22C486.62,-760.17 663.55,-747.22 813,-734.74 939.06,-724.22 1087.54,-710.31 1161.76,-703.26"/> +<polygon fill="black" stroke="black" points="1162.54,-706.7 1172.16,-702.27 1161.88,-699.73 1162.54,-706.7"/> +</g> +<!-- SDL2&#45;&gt;JACK --> +<g id="edge100" class="edge"> +<title>SDL2&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M399.27,-763.23C440.99,-757.03 503.92,-746.86 558,-734.74 652.77,-713.5 1306.1,-524.82 1400,-500 1433.98,-491.02 1472.75,-481.37 1500.87,-474.48"/> +<polygon fill="black" stroke="black" points="1501.83,-477.85 1510.71,-472.08 1500.17,-471.05 1501.83,-477.85"/> +</g> +<!-- SDL2&#45;&gt;OSS --> +<g id="edge104" class="edge"> +<title>SDL2&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M351.67,-752.42C348.22,-699.71 342.03,-537.3 385,-413 394.35,-385.97 395.66,-374.01 420,-359 495.43,-312.48 769.11,-305.88 871.76,-305.06"/> +<polygon fill="black" stroke="black" points="872.02,-308.56 882,-304.99 871.97,-301.56 872.02,-308.56"/> +</g> +<!-- SDL2&#45;&gt;sndio --> +<g id="edge106" class="edge"> +<title>SDL2&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M302.81,-768.08C235.82,-762.74 120.55,-741.73 77,-661.74 62.75,-635.57 76.45,-345.22 141,-286 187.89,-242.99 1166.76,-164.49 1377.32,-148.06"/> +<polygon fill="black" stroke="black" points="1377.62,-151.55 1387.32,-147.29 1377.08,-144.57 1377.62,-151.55"/> +</g> +<!-- SDL2&#45;&gt;PulseAudio --> +<g id="edge105" class="edge"> +<title>SDL2&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M398.6,-762.86C580.07,-735.54 1251.47,-634.81 1465,-608 1559.7,-596.11 1669.98,-584.99 1736.32,-578.6"/> +<polygon fill="black" stroke="black" points="1736.96,-582.06 1746.58,-577.62 1736.29,-575.09 1736.96,-582.06"/> +</g> +<!-- SDL2&#45;&gt;aRts --> +<g id="edge96" class="edge"> +<title>SDL2&#45;&gt;aRts</title> +<path fill="none" stroke="black" d="M302.26,-769.52C221.85,-768.31 69.57,-762.33 24,-734.74 7.55,-724.78 0,-717.97 0,-698.74 0,-698.74 0,-698.74 0,-216 0,-172.1 323.43,-152.23 434.83,-146.69"/> +<polygon fill="black" stroke="black" points="435.11,-150.18 444.93,-146.19 434.77,-143.18 435.11,-150.18"/> +</g> +<!-- SDL2&#45;&gt;ESD --> +<g id="edge97" class="edge"> +<title>SDL2&#45;&gt;ESD</title> +<path fill="none" stroke="black" d="M302.16,-769.75C231.28,-768.71 107.66,-762.79 74,-734.74 17.89,-687.97 42.29,-333.35 86,-286 135.67,-232.19 657.19,-166.61 801.93,-149.34"/> +<polygon fill="black" stroke="black" points="802.56,-152.79 812.08,-148.13 801.73,-145.83 802.56,-152.79"/> +</g> +<!-- SDL2&#45;&gt;NAS --> +<g id="edge101" class="edge"> +<title>SDL2&#45;&gt;NAS</title> +<path fill="none" stroke="black" d="M347.56,-752.67C345.77,-746.98 343.78,-740.59 342,-734.74 308.01,-622.74 284.61,-597.86 268,-482 265.73,-466.16 266.49,-461.93 268,-446 271.8,-405.96 281.54,-360.37 288.22,-332.14"/> +<polygon fill="black" stroke="black" points="291.67,-332.76 290.61,-322.21 284.86,-331.11 291.67,-332.76"/> +</g> +<!-- FusionSound --> +<g id="node33" class="node"> +<title>FusionSound</title> +<ellipse fill="red" stroke="black" cx="178" cy="-634.87" rx="100.32" ry="26.74"/> +<text text-anchor="middle" x="178" y="-638.67" font-family="Times,serif" font-size="14.00">DirectFB/FusionSound</text> +<text text-anchor="middle" x="178" y="-623.67" font-family="Times,serif" font-size="14.00">[dead]</text> +</g> +<!-- SDL2&#45;&gt;FusionSound --> +<g id="edge99" class="edge"> +<title>SDL2&#45;&gt;FusionSound</title> +<path fill="none" stroke="red" d="M301.98,-769.68C260.38,-766.58 203.95,-754.78 175,-715.74 165.8,-703.33 165.17,-686.62 167.39,-671.68"/> +<polygon fill="red" stroke="red" points="170.86,-672.18 169.32,-661.7 163.99,-670.86 170.86,-672.18"/> +</g> +<!-- OpenSL ES --> +<g id="node34" class="node"> +<title>OpenSL ES</title> +<ellipse fill="lightgrey" stroke="black" cx="237" cy="-697.74" rx="52.79" ry="18"/> +<text text-anchor="middle" x="237" y="-694.04" font-family="Times,serif" font-size="14.00">OpenSL ES</text> +</g> +<!-- SDL2&#45;&gt;OpenSL ES --> +<g id="edge102" class="edge"> +<title>SDL2&#45;&gt;OpenSL ES</title> +<path fill="none" stroke="black" d="M328.68,-754.86C311.78,-744.51 289.05,-730.6 270.44,-719.21"/> +<polygon fill="black" stroke="black" points="272.04,-716.08 261.68,-713.85 268.39,-722.05 272.04,-716.08"/> +</g> +<!-- FusionSound&#45;&gt;? --> +<g id="edge107" class="edge"> +<title>FusionSound&#45;&gt;?</title> +<path fill="none" stroke="red" d="M174.45,-607.92C171.57,-584.68 168,-549.63 168,-519 168,-519 168,-519 168,-376 168,-361.65 168,-345.67 168,-332.51"/> +<polygon fill="red" stroke="red" points="171.5,-332.22 168,-322.22 164.5,-332.22 171.5,-332.22"/> +</g> +<!-- OpenSL ES&#45;&gt;? --> +<g id="edge134" class="edge"> +<title>OpenSL ES&#45;&gt;?</title> +<path fill="none" stroke="red" d="M262.07,-681.79C268.83,-676.39 275.3,-669.65 279,-661.74 289.13,-640.11 289.23,-629.58 279,-608 273.59,-596.58 264.01,-600.51 257,-590 192.63,-493.5 220.25,-449.52 182,-340 180.9,-336.85 179.68,-333.56 178.44,-330.32"/> +<polygon fill="red" stroke="red" points="181.65,-328.93 174.71,-320.92 175.14,-331.5 181.65,-328.93"/> +</g> +<!-- phonon --> +<g id="node35" class="node"> +<title>phonon</title> +<ellipse fill="lightgrey" stroke="black" cx="2147" cy="-843.74" rx="37.09" ry="18"/> +<text text-anchor="middle" x="2147" y="-840.04" font-family="Times,serif" font-size="14.00">phonon</text> +</g> +<!-- phonon&#45;&gt;PulseAudio --> +<g id="edge115" class="edge"> +<title>phonon&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M2139.19,-825.96C2129.61,-806.64 2111.92,-774.77 2090,-752.74 2013.7,-676.05 1898.5,-618.02 1837.43,-590.56"/> +<polygon fill="black" stroke="black" points="1838.66,-587.28 1828.1,-586.41 1835.82,-593.67 1838.66,-587.28"/> +</g> +<!-- phonon&#45;&gt;gstreamer --> +<g id="edge113" class="edge"> +<title>phonon&#45;&gt;gstreamer</title> +<path fill="none" stroke="black" d="M2111.9,-837.4C2030.44,-825.02 1828.22,-794.27 1732.21,-779.68"/> +<polygon fill="black" stroke="black" points="1732.56,-776.19 1722.14,-778.15 1731.5,-783.11 1732.56,-776.19"/> +</g> +<!-- VLC --> +<g id="node36" class="node"> +<title>VLC</title> +<g id="a_node36"><a xlink:href="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" xlink:title="VLC"> +<ellipse fill="lightgrey" stroke="black" cx="2358" cy="-770.74" rx="28.7" ry="18"/> +<text text-anchor="middle" x="2358" y="-767.04" font-family="Times,serif" font-size="14.00">VLC</text> +</a> +</g> +</g> +<!-- phonon&#45;&gt;VLC --> +<g id="edge114" class="edge"> +<title>phonon&#45;&gt;VLC</title> +<path fill="none" stroke="black" d="M2183.39,-840.3C2218.57,-836.79 2272.64,-828.27 2315,-807.74 2322.52,-804.1 2329.82,-798.85 2336.22,-793.49"/> +<polygon fill="black" stroke="black" points="2338.64,-796.02 2343.78,-786.75 2333.98,-790.79 2338.64,-796.02"/> +</g> +<!-- VLC&#45;&gt;filesystem --> +<g id="edge128" class="edge"> +<title>VLC&#45;&gt;filesystem</title> +<path fill="none" stroke="black" d="M2379.03,-758.32C2393.32,-749.07 2410.57,-734.51 2416,-715.74 2435.98,-646.69 2451.53,-616.49 2416,-554 2355.41,-447.46 2289.3,-466.45 2179,-413 2118.61,-383.74 2103.47,-373.71 2038,-359 1915.97,-331.58 1541.86,-313.63 1393.52,-307.42"/> +<polygon fill="black" stroke="black" points="1393.37,-303.91 1383.24,-307 1393.08,-310.91 1393.37,-303.91"/> +</g> +<!-- VLC&#45;&gt;null --> +<g id="edge126" class="edge"> +<title>VLC&#45;&gt;null</title> +<path fill="none" stroke="red" d="M2385.53,-765.81C2420.96,-759.03 2478,-741.47 2478,-698.74 2478,-698.74 2478,-698.74 2478,-376 2478,-315.18 2019.79,-306.45 1875.18,-305.2"/> +<polygon fill="red" stroke="red" points="1874.95,-301.7 1864.92,-305.12 1874.9,-308.7 1874.95,-301.7"/> +</g> +<!-- VLC&#45;&gt;ALSA --> +<g id="edge127" class="edge"> +<title>VLC&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M2329.44,-767.91C2280.46,-764.77 2177.25,-758.18 2090,-752.74 1771.34,-732.87 1387.79,-709.57 1256.07,-701.59"/> +<polygon fill="black" stroke="black" points="1256.12,-698.09 1245.93,-700.98 1255.7,-705.07 1256.12,-698.09"/> +</g> +<!-- VLC&#45;&gt;JACK --> +<g id="edge129" class="edge"> +<title>VLC&#45;&gt;JACK</title> +<path fill="none" stroke="black" d="M2351.84,-752.89C2343.58,-732.59 2326.99,-698.86 2302,-679.74 2081.59,-511.11 1974.92,-560.2 1704,-500 1650.07,-488.02 1634.26,-496.69 1581,-482 1578.68,-481.36 1576.32,-480.62 1573.96,-479.82"/> +<polygon fill="black" stroke="black" points="1574.96,-476.46 1564.37,-476.26 1572.52,-483.02 1574.96,-476.46"/> +</g> +<!-- VLC&#45;&gt;OSS --> +<g id="edge131" class="edge"> +<title>VLC&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M2358.79,-752.74C2358.75,-746.69 2358.31,-739.85 2357,-733.74 2333.49,-623.75 2342.33,-576.63 2260,-500 2187.47,-432.49 1934.18,-378.33 1837,-359 1720.32,-335.79 1688.74,-347.38 1570,-340 1334.76,-325.38 1052.04,-311.66 950.05,-306.83"/> +<polygon fill="black" stroke="black" points="950.07,-303.33 939.92,-306.35 949.74,-310.32 950.07,-303.33"/> +</g> +<!-- VLC&#45;&gt;sndio --> +<g id="edge133" class="edge"> +<title>VLC&#45;&gt;sndio</title> +<path fill="none" stroke="black" d="M2386.49,-768.31C2456.07,-764.06 2629,-748.47 2629,-698.74 2629,-698.74 2629,-698.74 2629,-259.5 2629,-156.81 2507.04,-217.34 2406,-199 2219.31,-165.11 1619.57,-149.52 1457.62,-145.86"/> +<polygon fill="black" stroke="black" points="1457.24,-142.36 1447.16,-145.63 1457.08,-149.35 1457.24,-142.36"/> +</g> +<!-- VLC&#45;&gt;PulseAudio --> +<g id="edge132" class="edge"> +<title>VLC&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M2332.17,-762.47C2280.82,-747.49 2163.02,-710.45 2072,-661.74 2035.85,-642.39 2034.82,-623.86 1997,-608 1952.43,-589.31 1898.28,-580.6 1857.41,-576.54"/> +<polygon fill="black" stroke="black" points="1857.6,-573.05 1847.32,-575.61 1856.96,-580.02 1857.6,-573.05"/> +</g> +<!-- VLC&#45;&gt;OpenSL ES --> +<g id="edge130" class="edge"> +<title>VLC&#45;&gt;OpenSL ES</title> +<path fill="none" stroke="black" d="M2329.46,-767.61C2280.5,-764.02 2177.32,-756.78 2090,-752.74 1387.93,-720.25 535.26,-703.9 299.81,-699.79"/> +<polygon fill="black" stroke="black" points="299.78,-696.29 289.72,-699.62 299.66,-703.29 299.78,-696.29"/> +</g> +<!-- ClanLib --> +<g id="node37" class="node"> +<title>ClanLib</title> +<g id="a_node37"><a xlink:href="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" xlink:title="ClanLib"> +<ellipse fill="lightgrey" stroke="black" cx="1141" cy="-770.74" rx="39.79" ry="18"/> +<text text-anchor="middle" x="1141" y="-767.04" font-family="Times,serif" font-size="14.00">ClanLib</text> +</a> +</g> +</g> +<!-- ClanLib&#45;&gt;ALSA --> +<g id="edge116" class="edge"> +<title>ClanLib&#45;&gt;ALSA</title> +<path fill="none" stroke="black" d="M1156.09,-753.98C1164.82,-744.87 1175.99,-733.21 1185.82,-722.95"/> +<polygon fill="black" stroke="black" points="1188.61,-725.09 1193,-715.44 1183.56,-720.24 1188.61,-725.09"/> +</g> +<!-- ClanLib&#45;&gt;OSS --> +<g id="edge117" class="edge"> +<title>ClanLib&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M1110.64,-758.99C1033.49,-731.67 836,-661.74 836,-661.74 732.97,-560.49 702.84,-455.19 790,-340 808.84,-315.1 844.29,-307.09 871.98,-304.87"/> +<polygon fill="black" stroke="black" points="872.37,-308.36 882.15,-304.28 871.97,-301.37 872.37,-308.36"/> +</g> +<!-- allegro --> +<g id="node38" class="node"> +<title>allegro</title> +<g id="a_node38"><a xlink:href="https://github.com/liballeg/allegro5/tree/master/addons/audio" xlink:title="allegro"> +<ellipse fill="lightgrey" stroke="black" cx="565" cy="-916.74" rx="35.19" ry="18"/> +<text text-anchor="middle" x="565" y="-913.04" font-family="Times,serif" font-size="14.00">allegro</text> +</a> +</g> +</g> +<!-- allegro&#45;&gt;OSS --> +<g id="edge118" class="edge"> +<title>allegro&#45;&gt;OSS</title> +<path fill="none" stroke="black" d="M530.75,-912.26C491.34,-906.14 432,-889.5 432,-844.74 432,-844.74 432,-844.74 432,-733.74 432,-636.26 585.95,-422.39 660,-359 691.45,-332.08 809.41,-315.8 871.78,-308.89"/> +<polygon fill="black" stroke="black" points="872.45,-312.33 882.02,-307.78 871.7,-305.37 872.45,-312.33"/> +</g> +<!-- allegro&#45;&gt;PulseAudio --> +<g id="edge120" class="edge"> +<title>allegro&#45;&gt;PulseAudio</title> +<path fill="none" stroke="black" d="M600.27,-915.23C823.14,-911.91 2031.73,-892.62 2193,-861.74 2287.17,-843.71 2340.85,-867.17 2396,-788.74 2530.2,-597.87 2036.64,-575.05 1858.1,-572.95"/> +<polygon fill="black" stroke="black" points="1858.1,-569.45 1848.07,-572.85 1858.03,-576.45 1858.1,-569.45"/> +</g> +<!-- allegro&#45;&gt;OpenAL --> +<g id="edge119" class="edge"> +<title>allegro&#45;&gt;OpenAL</title> +<path fill="none" stroke="black" d="M599.84,-913.82C778.34,-904 1590.29,-859.31 1803.56,-847.57"/> +<polygon fill="black" stroke="black" points="1804.06,-851.05 1813.85,-847.01 1803.67,-844.06 1804.06,-851.05"/> +</g> +<!-- allegro&#45;&gt;SDL1 --> +<g id="edge122" class="edge"> +<title>allegro&#45;&gt;SDL1</title> +<path fill="none" stroke="black" d="M579.49,-900.06C602.72,-874.9 648.49,-825.34 675.85,-795.72"/> +<polygon fill="black" stroke="black" points="678.5,-798.01 682.71,-788.29 673.36,-793.26 678.5,-798.01"/> +</g> +<!-- allegro&#45;&gt;SDL2 --> +<g id="edge123" class="edge"> +<title>allegro&#45;&gt;SDL2</title> +<path fill="none" stroke="black" d="M530.02,-914.96C498.05,-912.61 450.88,-904.89 418,-880.74 389.91,-860.11 371.71,-823.35 361.91,-798.28"/> +<polygon fill="black" stroke="black" points="365.1,-796.8 358.33,-788.65 358.54,-799.24 365.1,-796.8"/> +</g> +<!-- allegro&#45;&gt;OpenSL ES --> +<g id="edge121" class="edge"> +<title>allegro&#45;&gt;OpenSL ES</title> +<path fill="none" stroke="black" d="M530.81,-912.65C489.86,-907.58 420.58,-894.52 371,-861.74 331.39,-835.55 323.13,-825.43 293,-788.74 276.41,-768.54 261,-743.06 250.56,-724.37"/> +<polygon fill="black" stroke="black" points="253.59,-722.62 245.71,-715.54 247.45,-725.99 253.59,-722.62"/> +</g> +<!-- telepathy --> +<g id="node39" class="node"> +<title>telepathy</title> +<ellipse fill="lightgrey" stroke="black" cx="1075" cy="-464" rx="42.79" ry="18"/> +<text text-anchor="middle" x="1075" y="-460.3" font-family="Times,serif" font-size="14.00">telepathy</text> +</g> +<!-- telepathy&#45;&gt;phone modem --> +<g id="edge124" class="edge"> +<title>telepathy&#45;&gt;phone modem</title> +<path fill="none" stroke="black" d="M1113.74,-456.24C1174,-445.46 1293.94,-422.97 1404.45,-395.29"/> +<polygon fill="black" stroke="black" points="1405.59,-398.61 1414.42,-392.77 1403.87,-391.82 1405.59,-398.61"/> +<text text-anchor="middle" x="1327.5" y="-416.8" font-family="Times,serif" font-size="14.00" fill="red">?</text> +</g> +<!-- telepathy&#45;&gt;? --> +<g id="edge125" class="edge"> +<title>telepathy&#45;&gt;?</title> +<path fill="none" stroke="red" d="M1035.35,-456.88C921.71,-439.32 585.09,-387.02 306,-341 256.62,-332.86 241.74,-339.9 195,-322 193.78,-321.53 192.55,-321.01 191.33,-320.44"/> +<polygon fill="red" stroke="red" points="192.75,-317.22 182.3,-315.46 189.37,-323.35 192.75,-317.22"/> +</g> +</g> +</svg>