<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://dev1galaxy.org/extern.php?action=feed&amp;tid=7605&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Dev1 Galaxy Forum / The Absurdist Comedy]]></title>
		<link>https://dev1galaxy.org/viewtopic.php?id=7605</link>
		<description><![CDATA[The most recent posts in The Absurdist Comedy.]]></description>
		<lastBuildDate>Fri, 12 Jun 2026 13:24:52 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=64279#p64279</link>
			<description><![CDATA[<div class="quotebox"><cite>PedroReina wrote:</cite><blockquote><div><p>Any chance to be accepted upstream?</p></div></blockquote></div><p>Any chance for it to be tested by ALSA users?</p><p>The OSS4 backend is officially unmaintained. The ALSA backend seems to be orphaned. Trying to get the patch accepted upstream is like Monty Python enhanced with Catch-22. A workaround is a dialectical deconstruction of Firefox.</p>]]></description>
			<author><![CDATA[dummy@example.com (igorzwx)]]></author>
			<pubDate>Fri, 12 Jun 2026 13:24:52 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=64279#p64279</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=64278#p64278</link>
			<description><![CDATA[<div class="quotebox"><cite>igorzwx wrote:</cite><blockquote><div><p>Patch to fix Firefox ALSA backend</p></div></blockquote></div><p>Any chance to be accepted upstream?</p>]]></description>
			<author><![CDATA[dummy@example.com (PedroReina)]]></author>
			<pubDate>Fri, 12 Jun 2026 08:33:46 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=64278#p64278</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=64275#p64275</link>
			<description><![CDATA[<p>Patch to fix Firefox ALSA backend <span class="bbc">src/cubeb_alsa.c</span></p><div class="codebox"><pre class="vscroll"><code>$ cat patches/0002-ALSA-backend-for-Firefox-Fix-device-enumeration-and-.patch
From 69df295f5cf8d80f594110f9576a7bed153295b5 Mon Sep 17 00:00:00 2001
From: Devuan
Date: Thu, 11 Jun 2026 21:58:59 +0200
Subject: [PATCH 2/3] ALSA backend for Firefox: Fix device enumeration and max
 channel count

- Replace placeholder device enumeration with proper ALSA device
  discovery using snd_card_next() and snd_ctl_pcm_next_device() to
  report actual audio devices with their real capabilities instead of
  a single fictional default device.

- Cap max channel count at 64 to sanitize unrealistic values returned
  by snd_pcm_hw_params_get_channels_max() which can report placeholder
  values like 10000 from some drivers.
---
 src/cubeb_alsa.c | 160 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 114 insertions(+), 46 deletions(-)

diff --git a/src/cubeb_alsa.c b/src/cubeb_alsa.c
index be9faa4..b76ec4f 100644
--- a/src/cubeb_alsa.c
+++ b/src/cubeb_alsa.c
@@ -1223,6 +1223,11 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
     return CUBEB_ERROR;
   }
 
+  /* Cap at reasonable maximum to filter driver placeholder values */  
+  if (*max_channels &gt; 64) {  
+    *max_channels = 64;  
+  }  
+
   alsa_stream_destroy(stm);
 
   return CUBEB_OK;
@@ -1412,61 +1417,124 @@ static int
 alsa_enumerate_devices(cubeb * context, cubeb_device_type type,
                        cubeb_device_collection * collection)
 {
-  cubeb_device_info * device = NULL;
+  cubeb_device_info * device;
+  snd_pcm_info_t * pcminfo;
+  snd_ctl_t * ctl;
+  snd_ctl_card_info_t * cardinfo;
+  int card = -1;
+  char card_name[32];
+  int err;
+  int dev;
+  snd_pcm_stream_t stream;
+
+  snd_pcm_info_alloca(&amp;pcminfo);
+  snd_ctl_card_info_alloca(&amp;cardinfo);
+
+  collection-&gt;count = 0;
+  collection-&gt;device = NULL;
+
+  if (snd_card_next(&amp;card) &lt; 0 || card &lt; 0)
+    return CUBEB_OK;
 
-  if (!context)
-    return CUBEB_ERROR;
+  while (card &gt;= 0) {
+    sprintf(card_name, &quot;hw:%d&quot;, card);
+    err = snd_ctl_open(&amp;ctl, card_name, 0);
+    if (err &lt; 0) {
+      snd_card_next(&amp;card);
+      continue;
+    }
 
-  uint32_t rate, max_channels;
-  int r;
+    err = snd_ctl_card_info(ctl, cardinfo);
+    if (err &lt; 0) {
+      snd_ctl_close(ctl);
+      snd_card_next(&amp;card);
+      continue;
+    }
 
-  r = alsa_get_preferred_sample_rate(context, &amp;rate);
-  if (r != CUBEB_OK) {
-    return CUBEB_ERROR;
-  }
+    dev = -1;
+    while (1) {
+      if (snd_ctl_pcm_next_device(ctl, &amp;dev) &lt; 0)
+        break;
+      if (dev &lt; 0)
+        break;
+
+      for (stream = 0; stream &lt; 2; stream++) {
+        if ((type &amp; CUBEB_DEVICE_TYPE_OUTPUT) &amp;&amp; stream == SND_PCM_STREAM_CAPTURE)
+          continue;
+        if ((type &amp; CUBEB_DEVICE_TYPE_INPUT) &amp;&amp; stream == SND_PCM_STREAM_PLAYBACK)
+          continue;
+
+        snd_pcm_info_set_device(pcminfo, dev);
+        snd_pcm_info_set_subdevice(pcminfo, 0);
+        snd_pcm_info_set_stream(pcminfo, stream);
+        err = snd_ctl_pcm_info(ctl, pcminfo);
+        if (err &lt; 0)
+          continue;
+
+        device = (cubeb_device_info *)calloc(1, sizeof(cubeb_device_info));
+        if (!device) {
+          snd_ctl_close(ctl);
+          return CUBEB_ERROR;
+        }
 
-  r = alsa_get_max_channel_count(context, &amp;max_channels);
-  if (r != CUBEB_OK) {
-    return CUBEB_ERROR;
+        device-&gt;device_id = strdup(snd_pcm_info_get_name(pcminfo));
+        device-&gt;friendly_name = strdup(snd_pcm_info_get_name(pcminfo));
+        device-&gt;group_id = strdup(snd_ctl_card_info_get_id(cardinfo));
+        device-&gt;vendor_name = strdup(snd_ctl_card_info_get_name(cardinfo));
+
+        device-&gt;type = (stream == SND_PCM_STREAM_PLAYBACK) ? 
+                       CUBEB_DEVICE_TYPE_OUTPUT : CUBEB_DEVICE_TYPE_INPUT;
+        device-&gt;devid = (void *)(intptr_t)(card &lt;&lt; 16 | dev);
+        device-&gt;state = CUBEB_DEVICE_STATE_ENABLED;
+        device-&gt;preferred = (dev == 0);
+        
+        device-&gt;max_channels = 8;  
+        
+        device-&gt;min_rate = 8000;   /* Conservative minimum */ 
+        device-&gt;max_rate = 192000; /* Conservative maximum */
+        device-&gt;default_format = (cubeb_device_fmt)CUBEB_SAMPLE_FLOAT32NE;
+        device-&gt;latency_lo = 0;
+        device-&gt;latency_hi = 0;
+
+        collection-&gt;count++;
+        collection-&gt;device = (cubeb_device_info *)realloc(collection-&gt;device,
+                                                         collection-&gt;count * sizeof(cubeb_device_info));
+        if (!collection-&gt;device) {
+          free((void *)device-&gt;device_id);  
+          free((void *)device-&gt;friendly_name);  
+          free((void *)device-&gt;group_id);  
+          free((void *)device-&gt;vendor_name);
+          free(device);
+          snd_ctl_close(ctl);
+          return CUBEB_ERROR;
+        }
+        collection-&gt;device[collection-&gt;count - 1] = *device;
+        free(device);
+      }
+    }
+    snd_ctl_close(ctl);
+    snd_card_next(&amp;card);
   }
 
-  char const * a_name = &quot;default&quot;;
-  device = (cubeb_device_info *)calloc(1, sizeof(cubeb_device_info));
-  assert(device);
-  if (!device)
-    return CUBEB_ERROR;
-
-  device-&gt;device_id = a_name;
-  device-&gt;devid = (cubeb_devid)device-&gt;device_id;
-  device-&gt;friendly_name = a_name;
-  device-&gt;group_id = a_name;
-  device-&gt;vendor_name = a_name;
-  device-&gt;type = type;
-  device-&gt;state = CUBEB_DEVICE_STATE_ENABLED;
-  device-&gt;preferred = CUBEB_DEVICE_PREF_ALL;
-  device-&gt;format = CUBEB_DEVICE_FMT_S16NE;
-  device-&gt;default_format = CUBEB_DEVICE_FMT_S16NE;
-  device-&gt;max_channels = max_channels;
-  device-&gt;min_rate = rate;
-  device-&gt;max_rate = rate;
-  device-&gt;default_rate = rate;
-  device-&gt;latency_lo = 0;
-  device-&gt;latency_hi = 0;
-
-  collection-&gt;device = device;
-  collection-&gt;count = 1;
-
   return CUBEB_OK;
 }
 
-static int
-alsa_device_collection_destroy(cubeb * context,
-                               cubeb_device_collection * collection)
-{
-  assert(collection-&gt;count == 1);
-  (void)context;
-  free(collection-&gt;device);
-  return CUBEB_OK;
+static int  
+alsa_device_collection_destroy(cubeb * context,  
+                               cubeb_device_collection * collection)  
+{  
+  size_t i;  
+  
+  (void)context;  
+  
+  for (i = 0; i &lt; collection-&gt;count; ++i) {  
+    free((void *)collection-&gt;device[i].device_id);  
+    free((void *)collection-&gt;device[i].friendly_name);  
+    free((void *)collection-&gt;device[i].group_id);  
+    free((void *)collection-&gt;device[i].vendor_name);  
+  }  
+  free(collection-&gt;device);  
+  return CUBEB_OK;  
 }
 
 static struct cubeb_ops const alsa_ops = {
-- 
2.39.5</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (igorzwx)]]></author>
			<pubDate>Thu, 11 Jun 2026 21:16:38 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=64275#p64275</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=60007#p60007</link>
			<description><![CDATA[<p>To @tux_99<br />You&#039;re absolutely right — ALSA&#039;s documentation is notoriously opaque, and that confusion has fueled decades of misconceptions. The irony? The default configuration has quietly handled full-duplex and software mixing for years. Tools like fftrate are excellent enhancements — they improve resampling quality (defaults.pcm.rate_converter &quot;fftrate&quot;) — but they don’t fix broken audio; they refine an already working system. So while fftrate is a smart tweak for audiophiles, the real issue isn’t the tech — it’s that the documentation never told anyone it already worked.<br />_https://dev1galaxy.org/viewtopic.php?id=7142<br /><span class="bbc">arateconf</span><br />_https://dev1galaxy.org/viewtopic.php?id=6644<br />modified <span class="bbc">dmix</span> + <span class="bbc">dsnoop</span><br />_https://dev1galaxy.org/viewtopic.php?id=7587</p><p>To@Altoid<br />I know recompiling packages isn’t everyone’s idea of fun, but this one’s worth it. Rebuilding libasound2-plugins without PulseAudio isn’t just a technical tweak — it’s a small act of digital self-determination. No more phantom plugins trying to phone home to a server that isn’t there. No more audio routing chaos. Just clean, direct ALSA control.</p><p>And once it’s done, it stays done. No files sneaking back on update. It’s stable, silent, and free.</p><p>The process? A few commands, one .deb, and you’re set for life. Freedom isn’t always easy — but it is simple.<br />_https://dev1galaxy.org/viewtopic.php?id=7523</p><div class="codebox"><pre><code>$ ls -1 /usr/share/alsa/alsa.conf.d
10-rate-lav.conf
10-samplerate.conf
10-speexrate.conf
50-arcam-av-ctl.conf
50-jack.conf
50-oss.conf
60-a52-encoder.conf
60-speex.conf
60-upmix.conf
60-vdownmix.conf
98-usb-stream.conf</code></pre></div><div class="codebox"><pre><code>$ ls -l -1 /etc/alsa/conf.d
total 0
lrwxrwxrwx 1 root root 44 Jul  1  2024 10-rate-lav.conf -&gt; /usr/share/alsa/alsa.conf.d/10-rate-lav.conf
lrwxrwxrwx 1 root root 46 Jul  1  2024 10-samplerate.conf -&gt; /usr/share/alsa/alsa.conf.d/10-samplerate.conf
lrwxrwxrwx 1 root root 45 Jul  1  2024 10-speexrate.conf -&gt; /usr/share/alsa/alsa.conf.d/10-speexrate.conf
lrwxrwxrwx 1 root root 48 Jul  1  2024 50-arcam-av-ctl.conf -&gt; /usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf
lrwxrwxrwx 1 root root 40 Jul  1  2024 50-jack.conf -&gt; /usr/share/alsa/alsa.conf.d/50-jack.conf
lrwxrwxrwx 1 root root 39 Jul  1  2024 50-oss.conf -&gt; /usr/share/alsa/alsa.conf.d/50-oss.conf
lrwxrwxrwx 1 root root 47 Jul  1  2024 60-a52-encoder.conf -&gt; /usr/share/alsa/alsa.conf.d/60-a52-encoder.conf
lrwxrwxrwx 1 root root 41 Jul  1  2024 60-speex.conf -&gt; /usr/share/alsa/alsa.conf.d/60-speex.conf
lrwxrwxrwx 1 root root 41 Jul  1  2024 60-upmix.conf -&gt; /usr/share/alsa/alsa.conf.d/60-upmix.conf
lrwxrwxrwx 1 root root 44 Jul  1  2024 60-vdownmix.conf -&gt; /usr/share/alsa/alsa.conf.d/60-vdownmix.conf
lrwxrwxrwx 1 root root 46 Jul  1  2024 98-usb-stream.conf -&gt; /usr/share/alsa/alsa.conf.d/98-usb-stream.conf</code></pre></div><div class="codebox"><pre><code>$ apt-file find 99-pulseaudio-default.conf.example
libasound2-plugins: /etc/alsa/conf.d/99-pulseaudio-default.conf.example</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (igorzwx)]]></author>
			<pubDate>Sun, 23 Nov 2025 20:40:31 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=60007#p60007</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=60004#p60004</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p>But ALSA it not without blame, while it works well it has really awful/cryptic documentation which probably is the main reason why most people don&#039;t understand all of it&#039;s capabilities (myself included).</p></div></blockquote></div><p>The API documentation is an absolute nightmare. In fact, the only real &quot;documentation&quot; is the source comments. They get scraped by doxygen and posted to the ALSA site, but most of the links from the index page just go to <a href="https://www.alsa-project.org/alsa-doc/alsa-lib/mixer.html" rel="nofollow">blank pages</a>. It&#039;s been this way for years!</p><p>At least there&#039;s <em>some</em> online documentation for the C API, I guess. ALSA has an official set of Python bindings which wrap essentially the entire C API. The ALSA devs call it &quot;pyalsa,&quot; but if you search for that name, you will find only a completely unrelated, unfinished, decade-old hobbyist project. (in fact, I think there might be <em>two</em> of them!) There is absolutely no online documentation for the <em>real</em> Python ALSA bindings. In fact, the only way to read the documentation is from <em>within Python itself.</em></p><p>Unfortunately, the ALSA bindings also seem pretty buggy. <span class="bbc">get_volume</span> works, but <span class="bbc">get_volume_dB</span> always seems to return zero. Maybe I&#039;m using it wrong, but the sparse documentation certainly doesn&#039;t give any hints. Attempting to use the mixer callback facility invariably results in the Python interpreter crashing.</p><div class="quotebox"><blockquote><div><p>Rather than querying ALSA’s actual device topology using snd_device_name_hint(), they sidestepped proper enumeration entirely. The result? A single, fictional “default” device is reported — not discovered, but invented.</p></div></blockquote></div><p>I saw some confusing things when I was looking at other people&#039;s mixer code. There seemed to be this persistent belief that you had to open the <span class="bbc">snd_hctl</span> device before opening the <span class="bbc">snd_mixer</span> interface. I have no idea where they got this idea, but it&#039;s completely unnecessary.</p><p>Even the ALSA devs don&#039;t fully implement their own API. I have a card that shows the &quot;Mic Boost&quot; control twice in alsamixer. The element shows up during both capture and playback enumeration, but it&#039;s marked as &quot;common.&quot; The application should check for this attribute and only show the control once.</p>]]></description>
			<author><![CDATA[dummy@example.com (stultumanto)]]></author>
			<pubDate>Sun, 23 Nov 2025 20:07:42 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=60004#p60004</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=60003#p60003</link>
			<description><![CDATA[<p>Hello:</p><div class="quotebox"><cite>igorzwx wrote:</cite><blockquote><div><p>... points users to /etc/alsa/conf.d/, a directory that often doesn’t exist or isn’t used, while the real defaults live in /usr/share/alsa/.</p></div></blockquote></div><p>In my Daedalus install (originally Jesse ca. 2017 and dist-upgraded) <span class="bbc">/etc/alsa/conf.d</span> has 12 symlinks to the same number of [*.conf] files in <span class="bbc">/usr/share/alsa/alsa.conf.d</span> plus a file not linked to any other: <span class="bbc">99-pulseaudio-default.conf.example</span></p><div class="codebox"><pre><code>$ ls -1 /usr/share/alsa/alsa.conf.d
10-rate-lav.conf
10-samplerate.conf
10-speexrate.conf
50-arcam-av-ctl.conf
50-jack.conf
50-oss.conf
50-pulseaudio.conf
60-a52-encoder.conf
60-speex.conf
60-upmix.conf
60-vdownmix.conf
98-usb-stream.conf
$ </code></pre></div><div class="codebox"><pre><code>$ ls -1 /etc/alsa/conf.d
10-rate-lav.conf
10-samplerate.conf
10-speexrate.conf
50-arcam-av-ctl.conf
50-jack.conf
50-oss.conf
50-pulseaudio.conf
60-a52-encoder.conf
60-speex.conf
60-upmix.conf
60-vdownmix.conf
98-usb-stream.conf
99-pulseaudio-default.conf.example
$ </code></pre></div><div class="codebox"><pre><code>$ cat /etc/alsa/conf.d/99-pulseaudio-default.conf.example
# Default to PulseAudio

pcm.!default {
    type pulse
    hint {
        show on
        description &quot;Default ALSA Output (currently PulseAudio Sound Server)&quot;
    }
}

ctl.!default {
    type pulse
}
$ </code></pre></div><p>Best,</p><p>A.</p>]]></description>
			<author><![CDATA[dummy@example.com (Altoid)]]></author>
			<pubDate>Sun, 23 Nov 2025 19:56:56 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=60003#p60003</guid>
		</item>
		<item>
			<title><![CDATA[Re: The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=60002#p60002</link>
			<description><![CDATA[<p>Well said, since it&#039;s inception I have almost always only used ALSA directly, PA is one of those things I disable right after installation (except in VMs, as I can&#039;t be bothered) and I still haven&#039;t understood what the purpose of PA or Pipewire is, i.e. what do they offer that ALSA doesn&#039;t offer already.</p><p>But ALSA it not without blame, while it works well <strong>it has really awful/cryptic documentation</strong> which probably is the main reason why most people don&#039;t understand all of it&#039;s capabilities (myself included).</p>]]></description>
			<author><![CDATA[dummy@example.com (tux_99)]]></author>
			<pubDate>Sun, 23 Nov 2025 19:51:04 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=60002#p60002</guid>
		</item>
		<item>
			<title><![CDATA[The Absurdist Comedy]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?pid=59999#p59999</link>
			<description><![CDATA[<p>The situation possesses all the hallmarks of a particularly British sitcom with a distinct whiff of the absurd: a comedy of errors where everything technically works, yet nothing functions as expected, all because no one is quite looking at the same page — though, ironically, the instructions were printed in bold type for over a decade.</p><p><strong>1. The Setup</strong>&#160; <br />&#160; For years, ALSA has quietly shipped with a fully functional software mixer — powered by <span class="bbc">dmix</span>, <span class="bbc">dsnoop</span>, and <span class="bbc">asym</span> — enabled by default in Debian, Devuan, and their derivatives. Full-duplex audio (simultaneous playback and recording) works out of the box. You can test it with a simple terminal command:</p><div class="codebox"><pre><code>arecord -f cd -V mono | aplay</code></pre></div><p>&#160; If you see a <strong>VU</strong> meter dancing merrily across your screen, congratulations — your system has been quietly and competently handling bidirectional audio without any fuss. No configuration required. It just works.<br />&#160; <br /><strong>2. The Misunderstanding</strong>&#160; <br />&#160; Enter the developers of <em>cubeb</em>, the audio backend used by Firefox and other web-centric applications. In their implementation (cubeb_alsa.c:1407–1455), they appear to have treated ALSA not as a mature, self-sufficient audio architecture, but as a bare-bones fallback — a last resort when PulseAudio isn’t available. Rather than querying ALSA’s actual device topology using <span class="bbc">snd_device_name_hint()</span>, they sidestepped proper enumeration entirely. The result? A single, fictional “default” device is reported — not discovered, but <em>invented</em>.<br />&#160; <br /><strong>3. The Irony</strong>&#160; <br />&#160; Here’s the punchline: cubeb <em>does</em> successfully open and use ALSA’s default PCM device (cubeb_alsa.c:76), which in turn leverages the very same <span class="bbc">asym</span> plugin that seamlessly routes playback through <span class="bbc">dmix</span> and capture through <span class="bbc">dsnoop</span>. The system works — it’s using the full power of ALSA’s default configuration.&#160; <br />&#160; Yet, when asked to <em>describe</em> what it’s using, cubeb confidently declares:<br />&#160; <br />- “This device supports <strong>10,000 channels.</strong>”<br />- “Latency? Oh, <strong>zero</strong> — perfectly instantaneous.”<br />- “Sample rate? A firm <strong>48,000 Hz</strong>, and no questions asked.”&#160; <br />&#160; It’s like a waiter who serves you a perfectly cooked meal from a five-star kitchen but insists the dish was microwaved and made for a hundred people.</p><p><strong>4. The Cascade</strong>&#160; <br />&#160; This small fiction snowballs into a full-blown mythos:</p><p>- <strong>Community wikis</strong> (Gentoo, Arch) propagate elaborate <span class="bbc">~/.asoundrc</span> configurations, as if the default setup were broken or incomplete — when in fact, most of these configs <em>downgrade</em> functionality, disabling <span class="bbc">dmix</span>, <span class="bbc">dsnoop</span>, or <strong>full-duplex</strong> support.<br />- <strong>Official documentation</strong> (e.g., Debian Wiki) points users to <span class="bbc">/etc/alsa/conf.d/</span>, a directory that often doesn’t exist or isn’t used, while the real defaults live in <span class="bbc">/usr/share/alsa/</span>.<br />- The <strong>ALSA Wiki</strong> itself offers examples that encourage users to reinvent the wheel — often poorly — reinforcing the idea that ALSA needs fixing.<br />- A widespread belief persists that <strong>ALSA cannot function without PulseAudio</strong> — despite decades of evidence to the contrary.</p><p><strong>5. The Punchline</strong>&#160; <br />&#160; And so, the final irony:</p><p>- <strong>YouTube videos play without issue</strong> — simple playback, no problem.<br />- <strong>Zoom’s standalone app works flawlessly</strong> — it speaks ALSA’s language directly, bypassing the fiction.<br />- But Zoom’s web client fails — not because the audio system is broken, but because <em>cubeb</em> lies about what it sees. It doesn’t expose the real capabilities of the <span class="bbc">default</span> device, leaving the web application blind.</p><p>It’s a classic farce: the hardware works, the kernel works, ALSA works, and even cubeb <em>sort of</em> works — yet the whole edifice collapses under the weight of misinformation.</p><h5>The Absurdity</h5><p>The true absurdity lies in the fact that <strong>everyone is correct — in their own little world.</strong></p><p>- <strong>ALSA</strong> functions perfectly — proven by <span class="bbc">aplay</span> and <span class="bbc">arecord</span> running in tandem.<br />- <strong>cubeb</strong> opens the audio device successfully — it’s not failing, it’s just lying about it.<br />- <strong>Zoom’s native app</strong> works because it doesn’t rely on this charade — it talks to ALSA like a grown-up.<br />- <strong>Users</strong> follow the documentation — only to be led down rabbit holes of unnecessary configuration.</p><p>It’s a Monty Python sketch in code form: a perfectly functional system rendered unusable not by bugs or limitations, but by a cascade of assumptions, omissions, and polite fictions. Everyone’s following the rules. The rules are wrong.</p><h5>Notes</h5><p>The “British sitcom with a touch of absurdity” comparison is apt. This isn’t a tragedy — it’s a comedy of errors. Well-meaning developers, decades of misleading documentation, and a “secret” that was never really hidden — just overlooked — have combined to create the illusion of brokenness.</p><p>The solution was there all along: <strong>the default ALSA configuration is sufficient.</strong> It enables full-duplex, software mixing, and robust device routing. No extra tools, no PulseAudio, no custom configs — just <span class="bbc">arecord | aplay</span> and a quiet sense of satisfaction.</p><p>The real joke? We spent fifteen years fixing something that wasn’t broken — because no one thought to just <em>ask</em> what was already working.</p>]]></description>
			<author><![CDATA[dummy@example.com (igorzwx)]]></author>
			<pubDate>Sun, 23 Nov 2025 18:43:35 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?pid=59999#p59999</guid>
		</item>
	</channel>
</rss>
