logo

blog

My little blog can’t be this cute!

linux-audio-output.dot (5690B)


  1. digraph "Linux Audio Output APIs" {
  2. node [ shape=ellipse style=filled ];
  3. label="Linux Audio Output APIs
  4. CC-BY 4.0 © 2020 Haelwenn (lanodan) Monnier
  5. https://hacktivis.me/articles/linux-audio-output";
  6. "network card" [ shape=box fillcolor=cyan ];
  7. "sound card" [ shape=box fillcolor=cyan ];
  8. "phone modem" [ shape=box fillcolor=cyan ];
  9. "Bluetooth card" [ shape=box fillcolor=cyan ];
  10. filesystem [ shape=octagon fillcolor=yellow ];
  11. null [ shape=diamond fillcolor=red ];
  12. "?" [ shape=circle fillcolor=red ];
  13. portaudio [ URL="https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/" ];
  14. portaudio -> ALSA;
  15. portaudio -> JACK;
  16. portaudio -> OSS;
  17. portaudio -> asihpi;
  18. asihpi [ shape=octagon fillcolor=yellow ];
  19. asihpi -> "sound card" [ color=green ];
  20. // through a patch
  21. portaudio -> sndio;
  22. // https://rudd-o.com/linux-and-free-software/how-pulseaudio-works
  23. PulseAudio [ URL="https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/" ];
  24. PulseAudio -> ALSA;
  25. PulseAudio -> OSS [ dir=both ];
  26. PulseAudio -> "network card" [ label="DLNA, RTP, SDP, SAP, RAOP, Tunnel, HTTP" dir=both color=green fontcolor=green ];
  27. PulseAudio -> null [ color=red ];
  28. PulseAudio -> "sound card" [ color=green ];
  29. PulseAudio -> JACK;
  30. PulseAudio -> bluez;
  31. PulseAudio -> ofono;
  32. PulseAudio -> sox;
  33. "X11 bell" -> PulseAudio;
  34. ofono [ shape=octagon fillcolor=yellow ];
  35. ofono -> "phone modem" [ color=green ];
  36. bluez [ label="BlueZ" shape=octagon fillcolor=yellow ];
  37. ALSA -> bluez;
  38. bluez -> "Bluetooth card" [ color=green ];
  39. sox [ URL="http://sox.sourceforge.net/Docs/Features" ];
  40. sox -> filesystem;
  41. sox -> null [ color=red ];
  42. sox -> libao;
  43. sox -> PulseAudio;
  44. sox -> ALSA;
  45. libao [ URL="https://www.xiph.org/ao/" ];
  46. libao -> filesystem;
  47. libao -> OSS;
  48. libao -> ALSA;
  49. libao -> aRts;
  50. libao -> PulseAudio;
  51. libao -> ESD;
  52. libao -> null [ color=red ];
  53. libao -> NAS;
  54. libao -> RoarAudio;
  55. libao -> sndio;
  56. RoarAudio [ URL="http://roaraudio.keep-cool.org/" ];
  57. OSS -> RoarAudio;
  58. RoarAudio -> sndio;
  59. RoarAudio -> PulseAudio;
  60. RoarAudio -> ESD;
  61. RoarAudio -> aRts;
  62. RoarAudio -> "network card" [ label="IPv4, DECnet, OpenSLP" dir=both ];
  63. // Probably incomplete, need some proper documentation
  64. ESD -> OSS;
  65. ESD -> ALSA;
  66. ESD -> "network card";
  67. libcanberra [ URL="http://git.0pointer.net/libcanberra.git/tree/src/driver-order.c" ];
  68. libcanberra -> PulseAudio;
  69. libcanberra -> OSS;
  70. libcanberra -> ALSA;
  71. libcanberra -> gstreamer;
  72. libcanberra -> null [ color=red ];
  73. PipeWire [ URL="http://pipewire.org/" ];
  74. PulseAudio -> PipeWire [ dir=both ];
  75. ALSA -> PipeWire;
  76. JACK -> PipeWire;
  77. gstreamer -> PipeWire;
  78. PipeWire -> "?" [ color=red ];
  79. sndio [ URL="http://www.sndio.org/" ];
  80. sndio -> ALSA;
  81. sndio -> "network card" [ dir=both ];
  82. PulseAudio -> sndio;
  83. ALSA -> sndio;
  84. gstreamer -> sndio;
  85. OpenAL [ URL="https://www.openal-soft.org/" ];
  86. OpenAL -> PulseAudio;
  87. OpenAL -> ALSA;
  88. OpenAL -> OSS;
  89. OpenAL -> SoundIO;
  90. OpenAL -> portaudio;
  91. OpenAL -> JACK;
  92. OpenAL -> filesystem;
  93. OpenAL -> null [ color=red ];
  94. SoundIO [ URL="http://libsound.io/" ];
  95. SoundIO -> JACK;
  96. SoundIO -> PulseAudio;
  97. SoundIO -> ALSA;
  98. SoundIO -> null [ color=red ];
  99. RtAudio [ URL="https://www.music.mcgill.ca/~gary/rtaudio/apinotes.html" ];
  100. RtAudio -> OSS [ label="OSS 4.0+" ];
  101. RtAudio -> ALSA;
  102. RtAudio -> JACK;
  103. RtAudio -> PulseAudio;
  104. // This shit is the hardest to find any documentation for
  105. JUCE -> ALSA;
  106. JUCE -> JACK;
  107. JUCE -> "?" [ color=red ];
  108. ALSA [ shape=octagon URL="https://alsa-project.org/wiki/Asoundrc#Plugins" fillcolor=yellow ];
  109. ALSA -> "sound card" [ color=green ];
  110. ALSA -> "network card" [ color=green ];
  111. ALSA -> PulseAudio;
  112. ALSA -> JACK;
  113. ALSA -> aRts;
  114. ALSA -> null [ color=red ];
  115. ALSA -> filesystem;
  116. OSS -> ALSA;
  117. OSS [ shape=octagon fillcolor=yellow ];
  118. OSS -> "sound card" [ color=green fontcolor=green label="third-party drivers from opensound.com" ];
  119. // OSS -> "sound card"; Got removed in the linux kernel
  120. // https://wiki.libsdl.org/FAQUsingSDL
  121. SDL1 [ label="libSDL-1.2" URL="https://hg.libsdl.org/SDL/file/fba40d9f4a73/src/audio" ];
  122. SDL1 -> ALSA;
  123. SDL1 -> aRts;
  124. SDL1 -> ESD;
  125. SDL1 -> filesystem;
  126. SDL1 -> NAS;
  127. SDL1 -> OSS;
  128. SDL1 -> PulseAudio;
  129. SDL1 -> null [ color=red ];
  130. SDL2 [ label="libSDL-2.0" URL="https://hg.libsdl.org/SDL/file/355a4f94a782" ];
  131. SDL2 -> ALSA;
  132. SDL2 -> aRts;
  133. SDL2 -> ESD;
  134. SDL2 -> filesystem;
  135. SDL2 -> FusionSound [ color=red ];
  136. SDL2 -> JACK;
  137. SDL2 -> NAS;
  138. SDL2 -> "OpenSL ES"; // Gonna have to check again on the others
  139. // Maybe SDL2 -> "NaCL";
  140. SDL2 -> null [ color=red ];
  141. SDL2 -> OSS;
  142. SDL2 -> PulseAudio;
  143. SDL2 -> sndio;
  144. FusionSound [ label="DirectFB/FusionSound\n[dead]" fillcolor=red ];
  145. FusionSound -> "?" [ color=red ];
  146. // And then where the hell does it goes?
  147. NAS [ label="Network Audio Server" ]
  148. NAS -> "network card";
  149. gstreamer -> ALSA;
  150. gstreamer -> OSS;
  151. gstreamer -> JACK;
  152. gstreamer -> PulseAudio;
  153. phonon -> gstreamer;
  154. phonon -> VLC;
  155. phonon -> PulseAudio;
  156. ClanLib [ URL="https://github.com/sphair/ClanLib/tree/master/Sources/Sound/Platform/Linux" ];
  157. ClanLib -> ALSA;
  158. ClanLib -> OSS;
  159. allegro [ URL="https://github.com/liballeg/allegro5/tree/master/addons/audio" ];
  160. allegro -> OSS;
  161. allegro -> OpenAL;
  162. allegro -> PulseAudio;
  163. allegro -> "OpenSL ES";
  164. allegro -> SDL1;
  165. allegro -> SDL2;
  166. telepathy -> "phone modem" [ label="?" fontcolor=red ];
  167. telepathy -> "?" [ color=red ];
  168. VLC [ URL="https://code.videolan.org/videolan/vlc/-/tree/master/modules/audio_output" ];
  169. VLC -> null [ color=red ];
  170. VLC -> ALSA;
  171. VLC -> filesystem;
  172. VLC -> JACK;
  173. VLC -> "OpenSL ES";
  174. VLC -> OSS;
  175. VLC -> PulseAudio;
  176. VLC -> sndio;
  177. "OpenSL ES" -> "?" [ color=red ];
  178. }