Most browser voice apps play incoming audio like a file attachment: decode the blob, crank a volume slider, hope for the best. On a CB channel that's a disaster. One person keys with a whisper into a broken mic; the next person blows out your speaker with a scream. GCCR treats every key-up as a broadcast segment that deserves the same care a radio engineer would give a live feed — loudness matching, peak control, and ear protection built into the playback path, not bolted on as an afterthought.

The problem Channel audio arrives from dozens of devices, codecs, and mouths. Phone mics vary wildly. Bluetooth adds compression artifacts. Users hold the mic six inches away or eat it. Raw playback means constant volume riding with your thumb — and one surprise key-up can genuinely hurt on earbuds or a phone speaker cranked in a cab.

What GCCR does

  • Per-message loudness matching — Each key-up is analyzed and leveled so speakers sit in a consistent loudness window. The quiet guy on a bad mic and the loud guy on a headset meet in the middle without you chasing a fader.
  • Ear protection on playback — A dedicated protection stage tames harsh highs and catches peaks before they slam the transducer. It's not mute — it's the difference between "that was loud" and "my ear is ringing."
  • Full Web Audio playback chain — Incoming voice doesn't go straight to a media element. It runs through a real-time graph: dynamics, gain staging, and limiting the way a small broadcast console would route air chain audio.
  • Operator-tunable processing — Sound Settings expose compressor makeup, bass cut for engine rumble, and hiss cut for white noise — prefs that sync across your devices so your ears get the same chain everywhere you log in.
  • Same philosophy on whispers — Private voice messages and inbox playback reuse the leveling mindset so one-off clips don't arrive at a totally different volume than channel traffic.
  • Smart when battery matters — On battery saver, the heaviest analysis steps back off so you still get clean audio without draining the phone running ML-grade math on every clip.
Why this is hard in a browser Web apps aren't supposed to be broadcast consoles. Browsers give you decode-and-play primitives, suspend AudioContext when you blink, and offer no guarantee that analysis will finish before the next key-up lands in queue. Building loudness matching that feels instant — while also running compressors, shelves, and limiters on a graph that must survive iOS background kills — is weeks of tuning most chat products never attempt. We did it because radio culture demands consistent air sound, not "whatever the mic captured."

What operators notice

You stop reaching for volume between speakers. KAOS FM ducks cleanly when you key. Classic Mode listeners hear a channel that behaves like equipment, not a Discord server with a push-to-talk skin. Hobbyists still get chaos; operators get a signal chain that respects their ears and their speaker hardware. That's the balance we were aiming for — fun on the features, serious on the sound.