Yesterday’s static, today: A Bluetooth speaker for the vintage listener

8 Jul 2026

Here’s the project write-up for a little cathedral speaker I made as a gift earlier this year.

Photo of bluetooth cathedral speaker

What?

A Bluetooth speaker in a housing modeled off a vintage Cathedral radio, with one knob for adjusting volume and another for adjusting “vintage-ness”—the amount of static and filtering applied to the audio. The higher the vintage-ness, the lower the audio fidelity!1

Why?

My partner frequently listens to baseball game radio broadcasts, instead of watching televised games. Given the long history of radio and baseball broadcasts I thought it would be fun to add a vintage flavor to her experience by building a “vintage” Bluetooth speaker for listening to hometown games in low-fi style.

Of course, you can use it to listen to anything—not just baseball games.

Ironically, you’re going to have to take my word for the “vintage” mode sounding super static-y—I can’t convince some combination of my phone plus YouTube to respect my original audio and not filter out at least some of the static. 🙃 2

How?

Hardware

I used this Adafruit tutorial by the Ruiz Brothers and Liz Clark as a starting point for the component selection and software approach.3 As in that tutorial, my build uses an Adafruit ESP32 Feather microcontroller, with a couple of rotary potentiometers and a speaker.

Here it is all wired up and connected to the front-plate:

Photo of assembled hardware from the back
Photo of assembled hardware from the front

Enclosure

I modeled the speaker’s wooden housing on a Crosley 179 “Dual Four” Cathedral radio from 1934: in parametric CAD program cuttle.xyz I traced the main outline and cutouts from a photo of the Crosley, then rearranged the knob positions and added simplified decoration to the faceplate.

Faceplate trace, with original photo toggled on and off.

I scaled it to just big enough to fit the electronics.

Vectorized layout of components to cut.

My Cuttle design is here, if you want to cut your own.

I cut the pieces from 1/8” plywood using the laser cutter at my public library’s maker space.4 I finished the wood with a basic stain.

Photo of cut components.
Photo of components during staining

The speaker fabric was roughly four inches of a perfect ribbon I found at my local second-hand art supply store. Seriously, they could not have had a more perfect option. I glued it on, along with a small piece of mulberry paper over the dial hole.

Photo of speaker fabric glued.

A small piece of velcro helped hold the speaker component in place:

Photo of speaker velcro.
Photo of speaker, velcroed.

Once I confirmed everything fit together, I glued the wood layers together. The wood knobs were glued directly onto their respective potentiometers.

Photo of speaker assembly
Photo of assembled speaker from the back
Photo of assembled speaker from the front

Complete, with external battery pack and mug for scale:

Photo of assembled speaker from the back next to mug

Software

The speaker is programmed in C++, using the Arduino Audio Tools and ESP32-A2DP (audio over Bluetooth) libraries written by Phil Schatzmann.

Processing chain:

My code is here. The implementation ended up being slightly convoluted (read: hacky), due to my lack of familiarity with the processing library and the tricky conditions under which I was working.5 I ran out of time to add the notch filter I wanted, and also the high pass filter. Oh well.6

Next steps

For me, for now? None! I thought that I might continue to futz with it to get the processing how I wanted, but after I gifted it I realized I was done. It works, it works mostly as designed, and it is usable without my intervention. Good enough for giftable work!

If I wanted to improve on the speaker or build something similar in the future, I’d definitely figure out what was going on in my code and make it nicer. I might also switch over to a different board and programming ecosystem—after the fact, a friend recommended using a Teensy, which apparently has a whole GUI system for easily setting up exactly the processing chain I’d wanted.

If you want to make one, go for it! Typical caveat applies: I have not spent time turning my steps into a nice tutorial.

If you make one, let me know!

Thanks to the Ruiz Brothers and Liz Clark for their Adafruit tutorial, and to Phil Schatzmann for the Arduino libraries.


Footnotes

  1. In the interest of full disclosure, this is not the first audio ✨dehancement✨ project I’ve worked on. During my time as a DSP engineer at iZotope, one of the projects my team shipped was the 15 year re-release of their original Vinyl plugin, which adds a record player effect to input audio.

    The current iteration of Vinyl (which you can get for free here!) has a modern UI, but back when my team worked on it it still had its original look and feel, complete with Easter egg credits:

    ↩︎
  2. Noise is in the ear of the belistener…↩︎

  3. Well, it was more like “I used that tutorial as an ending point,” after attempting various other more complicated set-ups first…↩︎

  4. Thanks, staff at the Cambridge Public Library’s Hive! Thanks, taxpayers of the greater Camberville area!↩︎

  5. Read: on a moving train, with the giftee sitting next to me such that I couldn’t try out my code changes live without giving up the surprise, on the day the gift was due! After this project, I’m declaring a temporary moratorium on builds with any holiday gifting deadlines. The wow factor is not worth the stress of impending deadlines.

    “But Hannah,” you may be saying to yourself, or to me if you’re feeling rude(!), “why didn’t you :just-flag: complete this project sooner?”

    Luckily for us both, this is a question I am far too genteel to dignify with a response.↩︎

  6. If you use this code you have to promise to squint at it instead of read it head-on, as my rush to meet the gifting deadline lead to a quality that I don’t really stand behind. The speaker sounds like I wanted it to sound, which is I think at least a little coincidental, and I’m not convinced that the filter is actually doing anything. But also, after I handed it over, I did not then go back to verify or clean it up to be what I’d envisioned, as I thought I might! A true houseplant program.↩︎