Close
0%
0%

StereoBoy

A hackable & modular portable hi-fi audio player

Similar projects worth following
Demo video: https://youtu.be/U4b0qpHDqGk?si=UVqX6U2CwbbTQ3nx This is StereoBoy, my senior project for Purdue ECE! We won first place among 30-ish teams, and we're insanely proud of this thing. Essentially, it's a hi-fi digital audio player (DAP) designed to be fit right into a GameBoy Pocket shell. It has a unique cartridge system that lets users to expand the base hardware's capabilities. The firmware and music is stored in cartridges, allowing users to share their own music and software between different devices. But the cartridge port also exposes a whole bunch of GPIO, including all eight HSTX pins of the RP2350, allowing for some really cool hardware expansion, such as HDMI video output. We gave a lot of love to the software as well, including a super high FPS oscilloscope visualizer that lets you see your music in real-time. It's pretty trippy and I find myself staring at it a lot. It's insanely beautiful to actually see the music you love. Anyways, thanks for reading

Firmware Github: https://github.com/iamericmin/StereoBoy_Firmware

Demo video:

StereoBoy is a portable and modular stereo system. In essence, it's a portable music player housed inside a GameBoy shell, with the songs stored in removeable cartridges. Think of it as one of those Sony Walkman devices, the chunky cassette players our parents used to listen to music, except while the Walkman's cassette tapes hold nothing more than music, the cartridges on StereoBoy can be so much more. The cartridge system allows users to add their own software and hardware onto the device, allowing users to easily extend and augment the system to fit their needs. This means StereoBoy can interface with different sensors, work with other electronic musical devices, or even play games!

The idea was to build a fun device where creative users can share their own hardware and software with others, along with great music of course. We really miss the days of physical media where people used to meet in person to share those things. StereoBoy is our idea of how we can sort of bring that back in a meaningful way. Nowadays, sharing great content is little more than tapping a button on our phone and hoping the other side sees it. So much is lost in that process, and we really think it can be, and should be, better than that.

There is also a hi-res color display to provide interactive visualizers that react to the music, and it provides some really mesmerizing visuals to go along with the songs you love. The whole device also feels very chunky and hefty in your hand, and I mean this in the best possible way. The buttons are super clicky and satisfying to use. We're real big fans of this device, obviously. All of us plan on using it in the decades to come, and being part of the StereoBoy team was easily one of the greatest joys of my life.

We're trying to gauge interest in StereoBoy for a potential future crowdfunding campaign! Link to interest form here!

Discord server for those interested: https://discord.gg/ZcPGb9be5

stereoMag.kicad_pcb

StereoMag dev kit KiCad PCB

kicad_pcb - 742.21 kB - 05/24/2026 at 22:53

Download

stereoMag.kicad_sch

StereoMag dev kit KiCad schematic

kicad_sch - 141.28 kB - 05/24/2026 at 22:53

Download

stereoMag.kicad_pro

StereoMag dev kit KiCad project

kicad_pro - 14.93 kB - 05/24/2026 at 22:53

Download

stereoBoy_MGB.kicad_pcb

StereoBoy logic board KiCad PCB

kicad_pcb - 4.82 MB - 05/24/2026 at 22:53

Download

stereoBoy_MGB.kicad_pcb.zip

StereoBoy logic board gerber files

Zip Archive - 1.11 MB - 05/24/2026 at 22:53

Download

View all 13 files

  • 1 × RP2350B Main CPU
  • 1 × VS1063B Audio co-processor
  • 1 × TLV320DAC3100 DAC
  • 1 × TPS61092 5V boost converter
  • 1 × TLV62569 3.3V and 1.8V buck converter

View all 7 components

  • Album Artwork Cache

    Eric Min • 06/20/2026 at 05:04 • 0 comments

    Right now, displaying album art on StereoBoy is a painfully slow process. The RP2350 extracts album covers from MP3 metadata, which is slow and takes up to 10+ seconds for hi-res artwork. Obviously, this is not ideal. I knew the artwork system had to change, but I didn't really know how.

    But then, I remembered the original iPod's user interface, which had full support for album covers, allowing cool features like Cover Flow that let users glide through album covers quickly with minimal latency. I decided to look into how the iPod achieved this, since their CPU was a simple ARM chip, actually much less powerful than the RP2350.

    I learned the iPod actually used a cache for its artwork, instead of extracting it from the song metadata. When syncing, iTunes would also extract and downsample the album covers and store it in the iPod's hard drive. That way, the iPod could just look up the cached artwork instead of having to pull it from the file every time. I figured it was simple enough for me to give a go for StereoBoy.

    After some thinking, I arrived on this:

    The cache system will consist of two files: A LUT and the artwork cache. The LUT will be a dictionary, consisting of pairs of a hash and a corresponding pointer. The hashes will be generated by a very simple FNV-1a algorithm from the track's title, artist, and album data, and the pointers will be the address within the artwork cache that contains the artwork for the given song. The artwork cache will be a single monolithic file containing a 160x160 RGB565 array for each album cover. A simple program, like a python script, will be run on the host computer's side to generate the LUT and cache. This will be the equivalent of iTunes for the iPod.

    On StereoBoy's side, the LUT and cache will be stored on the SD card. Whenever the album cover needs to be displayed, the RP2350 will generate its own hash from the currently selected track, and use that hash to look through the LUT to find the corresponding pointer. Then, it will look through the cache file, and use the pointer to find the album cover to fetch and display on the screen. Looking through the LUT will be a simple binary search with a big-O of O(log(n)), and fetching the artwork will be O(1). I think this will be quite fast, especially considering the faster processor and disk speed of StereoBoy compared to the original iPod. Remember, the Classic line used spinning hard drives!

    Assuming a library of 5000 songs, the resulting LUT will be about 60KB, and the artwork cache will be about 256MB. I think the LUT should easily fit in the RP2350's main memory, so I'll try to load it into ram on bootup. This should make the hash lookup super fast. As for the artwork cache, it might take a fraction of a second, maybe a bit noticeable, but I don't think it will be a big deal.

    Edit: I got it working the next day, it works almost flawlessly. I say almost because the RP2350 takes a fraction of a second to fetch the image from the SD card, and it's pretty noticeable, especially if it happens in the middle of playback. It's caused because the fetch process halts Core 0, which is responsible for audio playback. But if I put the fetch process onto Core 1, there is contention for the SD card from both cores, so I need to find a way to run the process on Core 0 while still keeping audio playback happening in the background. Perhaps it's time for me to move the audio streaming process from CPU to DMA. After all, it's been on my list for a while and long overdue.


  • StereoBoy R2 - PSU redesign for LiPo

    Eric Min • 05/25/2026 at 20:48 • 0 comments

    I'm insanely happy with the results of our first prototype, StereoBoy R1.

    Pretty much all hardware functionality is confirmed working, from small things like the thumbwheel potentiometer to XIP from QSPI flash wired over a GameBoy cartridge connector, which I was pretty scared on whether it would work or not. Well, it works beautifully.

    The past few days, I've shoehorned a LiPo charger module into the device and fit a 500mAh lipo cell into the battery well. With simple testing, I got over 4 hours of continuous playback from headphones. This isn't the best, but I still think this is better than AAAs, which had a battery life of 5 hours for non-rechargeable alkalines and 2.5 hours for rechargeable NiMH cells. So I'm planning on redesigning StereoBoy R2's PSU to use LiPo batteries instead of AAAs.

    This means future StereoBoy models will only be able to use aftermarket shells with modified battery compartments, not the original shell. But aftermarket shells are available easily for cheap online, so I don't think this will be a huge deal.

View all 2 project logs

Enjoy this project?

Share

Discussions

Aqnazar Arysbek wrote 09/03/2026 at 15:30 • point

Very cool! It might be a good fit for the Retrocomputing contest

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates