author: Wesley Matlock read_time: 6 —
🎤 “Yo — this ain’t your usual SwiftUI deep dive. With WWDC right around the corner, I’m spinning something different today: no .backgroundPreferenceValue, no dependency injection, no Actor dance-offs. Just vinyl, caffeine, and one janky MacBook breathing new life as a pirate radio server.”
Lately, it’s been frameworks all day, every day. But sometimes? You just need to make something fun. Something weird. Something for the soul.
That’s what this post is about.
I finally did the thing I’ve joked about for years — launching a pirate-style internet radio station, complete with crusty vinyl, noisy transitions, and live mic rants. Welcome to pyr8rdio, broadcasting to the internet from my turntable and a dusty old Mac in the corner.
This is the full setup, story, and signal chain powering my analog-fueled rebellion.
⚙️ The Setup (a.k.a. The Gain Chain)
The best part? I didn’t buy anything new. This thing is built on what I had lying around — like any good hack.
- Technics 1200 turntable — because digital-only is for cowards
- Ortofon Concorde cartridge
- Rockville BluTube SG tube amp
- 1Mii USB Audio Interface — the unsung hero that converts RCA → USB cleanly
- Blue Yeti USB mic
- MacBook Air (Mid-2015) — sitting unused, running Monterrey like it’s 2019
- Free DJ software: Mixxx
- Stream host: caster.fm
That MacBook had been collecting dust. Too slow for dev work, too hot for daily use, too “vintage” for anything but Spotify. But for pushing out lo-fi punk sets at midnight? It’s perfect. Mixxx runs smooth, and the fan barely spins unless I’m also running Safari (which I’m not).
This signal chain is what makes it all go:
swift
Vinyl Deck → Tube Amp → 1Mii USB Audio Interface → Mac running Mixxx → caster.fm → The World
swift
🔌 How to Connect a Turntable to Mixxx (and Actually Hear It)
Let’s clear this up — turntables aren’t plug-and-play like USB mics. You need a few things to get the signal sounding right in Mixxx:
✅ Here’s what I used:
- Turntable (Technics 1200) with RCA output
- Phono preamp — in my case, built into the Rockville BluTube SG
- RCA out from the amp → into the 1Mii USB Audio Interface
- USB → into my MacBook running Mixxx
This gets you line-level audio, which is what Mixxx expects. Most turntables output phono-level, which is way too quiet unless preamped.
If you don’t have a receiver or amp with a built-in phono preamp, you’ll need a standalone unit or DJ mixer.
🛠 Mixxx Input Settings
Once your USB interface is plugged in:
- Open Mixxx → Preferences → Sound Hardware
- Under Input Devices, look for your USB interface (e.g., USB Audio CODEC)
- Assign Deck 1 Input to that interface
- Assign Microphone 1 to your Blue Yeti
- Save + restart Mixxx if needed
Then in Mixxx:
- Load a dummy track or leave Deck 1 blank
- Click the ⚙️ icon in Deck 1 → enable Live Input
- You should now hear your vinyl signal
If not:
- Double-check macOS system input settings
- Verify amp output isn’t muted or using “tape out”
- Boost gain in Mixxx if it’s too low
Once it’s working, it’s butter.
🖥️ 💡 Sidebar: Old Macs, New Beats
Don’t toss that old MacBook yet.
Seriously — these machines are gold for DIY audio work. Here’s why:
- Quiet CPU footprint means no jet engine fans on stream
- USB audio interfaces just work
- Core Audio is rock-solid
- Headless mode? No problem — SSH, screen sharing, or VNC it
- Built-in battery = accidental UPS
All I did was make a new user account, nuke iCloud/Photos/Dropbox nonsense, and install Mixxx. Now it lives behind the amp, blinking softly like it’s holding the line.
🎚️ Configuring Mixxx to Stream Like a Lunatic
Mixxx is the brain of this whole thing. Here’s what I did:
- Plugged the turntable into my amp → USB interface → Mac.
- Launched Mixxx, mapped vinyl input to Deck A.
- Deck B runs digital fallback tracks (for overnight automation).
- Mic input is the trusty Blue Yeti — mapped and toggleable.
- Broadcasting tab → dropped in caster.fm details → saved.
- Rock that Enable Live Broadcast button.
I even mapped a few hotkeys:
- M toggles the mic (cue DJ Wreckless Wes rants)
- L connects the stream
- Space = load next track
It’s simple, fast, and raw. No automation software, no fancy scenes, no OBS trickery. Just vinyl and vibes.
🧠 Shell Scripts Keep It Alive When I’m Not
When I’m asleep, pyr8rdio doesn’t die. I built a few quick scripts to keep it breathing:
- Python script (non_dmca.py) scrapes public domain/CC music from the web
- Shell script cleans filenames and metadata
- Everything lands in the “radio” crate ready for Mixxx
Example:
swift
#!/bin/bash
python3 non_dmca.py
for f in radio/*; do
clean=$(echo "$f" | sed 's/_/ /g' | sed 's/-/ /g')
mv "$f" "radio/$clean"
done
swift
📡 Going Live
When it’s time to go live, it takes about 30 seconds:
- Spin up Mixxx
- Load a vinyl track into Deck A
- Load a digital loop into Deck B
- Toggle mic, cue the set, yell something stupid into the Yeti
- Hit broadcast
Boom. You’re now tuned into pyr8rdio.ismyradio.com, probably hearing me butcher a crossfade between Metallica and Butthole Surfers while ranting about old tour shirts.
This setup lets me blend analog grit with digital backup — because even I need bathroom breaks.
🔮 What’s Next for PYR8RDIO?
Glad you asked.
- Twilio call-in line — listeners leave voicemails, I play them mid-set
- Track log web app — SwiftUI + Firebase view of what’s playing
- iOS remote app — start/stop the stream and adjust volume from my phone
- Vinyl-only nights — zero digital fallback, just needle and noise
- Themed sets — Metallica Mondays, Noise Floor Fridays, Dead Milkman Hour
There’s also been talk of merch. Stickers. Maybe even a zine-style show guide. If anyone out there actually listens, I might make it real.
📻 Tune In and Melt Your Brain
Want to hear what this sounds like?
🎧 Listen Live → https://pyr8rdio.ismyradio.com
🎙️ On air: DJ Wreckless Wes
🎵 Genres: Punk. Metal. Loops. Weird midnight vinyl.
🛠️ Powered by: Mixxx, shell scripts, and a 13-year-old Mac
No sponsors. No ads. Just music and chaos.
Got an old Mac, some records, and a hot take on Fugazi’s best EP? Build your own station. This post wasn’t about code, but you know the feeling — wiring up weird stuff to bring something to life. That’s what pyr8rdio is. That’s what this is.
Stay wreckless,
DJ Wreckless Wes 🎤📼🔥
🎯 Bonus: More Real-World iOS Survival Stories
If you’re hungry for more tips, tricks, and a few battle-tested stories from the trenches of native mobile development, swing by my collection of articles:
👉 https://medium.com/@wesleymatlock
These posts are packed with real-world solutions, some laughs, and the kind of knowledge that’s saved me from more than a few late-night debugging sessions. Let’s keep building apps that rock — and if you’ve got questions or stories of your own, drop me a line. I’d love to hear from you.
Originally published on Medium