Close
0%
0%

Linamp

Your favorite music player of the 90s, but in real life

Similar projects worth following
A physical music player inspired by Winamp 2.91 and retro hi-fi gear

Features

Linamp is a stand alone music player that aims to be easy to use, have great sound quality and look good.

Currently, Linamp has the following features:

  • Play music files from the file system (mp3, m4a, FLAC, etc.), including from SMB network mounts.
  • Playlist management for file playback
  • Display a real time bar spectrum analyzer
  • Display track information, including bitrate and sample rate
  • Control the output volume and balance
  • CD Playback (when connecting an external CD drive), including getting the track information from MusicBrainz
  • Bluetooth and Spotify playback (This is a Work in Progress)


Inspiration

Winamp was one of my first exposures to music on computers. (the first one was probably the Mac OS 7 CD Audio Player, which had a similar look and feel).

Since then, I've always liked the default skin that came with Winamp, and loved the bar spectrum analyzer.

One day I was checking my email and got to the hackaday newsletter and saw the AIRAMP MP3 project, which inspired me to do my own take on how Winamp would look if it was part of a hi-fi mini system.

Specifically this image from the post stood out:

This render looks kind of similar to a mini system my dad used to own (and now I own), a circa 1983-1984 AIWA mini system:

(That AIWA Stereo today. Both the amplifier and the radio works, we used to have the cassette player but unfortunately it broke and got discarded in the early 2000s. I removed the side handles sometime in the 2010s because they were a little corroded. The Sony DVD player is being used as a CD player for this stereo)

(That AIWA Stereo in my teenage room in 2005, picture taken with a Palm Zire 72)

(Myself and the AIWA stereo, circa 1991, it still had the tape player)

The Youtuber Techmoan reviewed a similar system here:  

As you can see I have a long story with that stereo and always liked how it looks, so that gave me enough inspiration to do my own rendition of a retro hi-fi gear + retro audio software.


Design

I wanted to learn how to design sheet metal parts, so I tore down the AIWA radio and took pictures and measurements of the sheet metal case. I used that as inspiration for my own design and as reference dimensions.

(AIWA Stereo Tuner R22 top cover)

I used Onshape to design the sheet metal case and the front cover.

For manufacturing, I researched several providers including SendCutSend and Ponoko, but because some of those options didn't ship to my country or were too expensive, I ended up going with PCBWay.

I also ordered a version of the front cover 3D printed in Nylon from PCBWay, as I didn't have a good 3D printer at that time and wanted to experiment with different 3D printing technologies.

(The design as created in Onshape)

(The MJF 3D printed Nylon front covers from PCBWay. On the final build I ended up using a multi color 3D print I did on my Bambulab P1S instead.)

(Test fit of the sheet metal parts and front case, back side)

(Test fit of the sheet metal parts and front case, front side)

The sheet metal parts are made of 1mm thick anodized aluminum. Originally I wanted it to be sandblasted so it would have a similar look to the AIWA case, but a PCBWay support engineer told me that they didn't recommend it for 1mm thick aluminum because it could deform the metal, so I went with just anodized aluminum.

For the user interface, I originally planned on using physical buttons, by creating a custom PCB for the buttons, connecting it to the Raspberry Pi GPIO, and 3D printing the buttons. However, I also wanted to have the bar spectrum analyzer and the scrolling song information display to work and look as close as possible to the original Winamp app.

I searched for small, extra wide screens, but couldn't find one small enough to span the whole width of the player (so it could display both the spectrum analyzer and the track info widgets), that still left enough space for the physical...

Read more »

  • Debuging Screen issues

    Rodmg06/20/2024 at 23:13 0 comments

    Recently I started building a second Linamp, using some extra spare parts I had from the original build and ordered the rest of the parts I needed.

    One of the most important parts is the screen, it is sold under several brand names by different sellers in Amazon and originates from China, the generic model seems to be "P79-T", which is a 7.9'' ultra wide screen with touch capabilities.

    When I did the original build, I struggled to get it working correctly with the Raspberry Pi - because it uses a non-standard resolution, it requires some manual configuration in order to make it work, which is specified in the manual that comes with the screen.

    The thing is, the configuration values mentioned in the manual don't really work, and now I just discovered that the correct settings seem to vary between same-model screens.

    In short, the configuration needed involves modifying the "config.txt" file that lives in the Raspberry Pi boot partition, the manual instructs you to set the following values:

    # DON'T USE THIS! This probably won't work
    max_usb_current=1
    hdmi_group=2
    hdmi_mode=87
    hdmi_timings=400 0 100 10 140 1280 10 20 20 2 0 0 0 60 0 43000000 3

    However, when I used those values on my original screen, I got a flickering image with glitches and lines:

    After a lot of trial and error, I was able to fix it by using the following values:

    # config.txt changes that worked for my original screen
    hdmi_cvt=400 1280 60 3
    hdmi_group=2
    hdmi_mode=87
    hdmi_drive=2
    dtoverlay=vc4-kms-v3d
    

     I also updated the cmdline.txt file, which controls the startup of the Linux Kernel, adding the following parameters:

    video=HDMI-A-1:400x1280M@60,rotate=270

    This worked! I now got a clean picture and everything seemed to work great!

    However this was not the whole story...

    Now that I'm building a second device, I used another sceen, which came from the same Amazon vendor, in the same box, same manual and same outside looks, but when I connected it to the Raspberry Pi with the same SD card as before, I got a different set of glitches:

    These screens come with a metal shell which I remove in order to fit it inside my custom case, when I opened it, I saw a slight difference:

    My original screen back side:

    The new screen back side:

    As you can see, the electronics seem the same, but the actual display panel is different.

    And now I also know that the hdmi timing configurations for these are also different.

    Understanding the issue

    There are several things at play here. First of all, these screens, when connected to a macOS or Windows PC, work just fine, but when connected to a Linux machine, being it a Raspberry Pi or PC, they have the issues I'm seeing.

    This seems to be due to non-standard HDMI protocol implementations in these screens, which macOS and Windows seem to correctly parse (probably because when these screens were designed, they were tested to work on those OSes primarily), but Linux is having issues with it.

    Specifically the issues seem related to the "EDID" a kind of identification that displays send to the host computer when connected, which tell the computer what video modes the display supports so it can auto-configure it.

    So that's why the manual instructs us to use the "hdmi_timings" in the Raspberry Pi - that setting overrides the auto configuration of the display and forces specific signal timings that the display needs to work.

    Those timings seem to depend on the actual display panel, so they seem to vary. In an ideal world, the controler board on the display would be correctly configured to report the actual good values the panel supports to the OS, so the OS could auto configure it. But the world is not ideal.

    Also, now comes another complication: How did I manage to make it work without using hdmi_timings on my original display? Well, it turns out that I didn't get it 100% right there, if you look closely, when the Raspberry Pi boots, it firsts displays a test color...

    Read more »

  • Thank you! - Figuring out logistics

    Rodmg06/18/2024 at 23:50 0 comments

    Linamp started as a personal DIY project, something I did for myself and just showed to a couple of friends. Thanks to one of those friends, Javier, who insisted on me publishing it, I got the courage and wrote this project page. 

    Since its publication, I've seen an amazing response from people around the world, this really gives me motivation to continue improving this project and sharing it with the world. For all that, Thank you!

    I've been seeing a lot of interest from people who want to be able to purchase the player, so I'm trying to figure out the logistics to make this a reality.

    Getting there is no small step for me, so I would like to request the help of the community by filling this survey: https://forms.gle/nvo1WEPQZNkJo2Yp6

    Your response will greatly help me to plan the next steps for this project.

    Please note: Linamp is and will continue being an Open Source project, this effort aims to make it available to more people and start a community around it, I'm excited to see what you will do with it!

  • Video: Linamp UI demo

    Rodmg06/07/2024 at 04:06 0 comments

    I've uploaded a video showing the main features of the Linamp UI, you can watch it here:

  • Code now available in GitHub

    Rodmg06/07/2024 at 02:50 0 comments

    The source code for the Player application is now public in GitHub: Linamp

    If you want to try it, you should be able to run it on a modern Linux distribution, I've tested it on Debian Bookworm, you just need to install the Qt development packages, the dependencies mentioned in the repo's README and QtCreator from the official repos and you should be able to build and run it.

View all 4 project logs

Enjoy this project?

Share

Discussions

William Jacoby wrote 06/29/2024 at 04:09 point

For this you earn your lifetime nerd cred.

  Are you sure? yes | no

sl4ppy wrote 06/14/2024 at 17:43 point

Very cool project!  I raced out and grabbed all the identical hardware and got up and running pretty easily, so thank you!  For the life of me can't get player audio out via the 3.5mm jack (or anywhere?) to work .  Time to dig into Qt Multimedia I guess. :grimace:

  Are you sure? yes | no

Alexander Williams wrote 06/07/2024 at 05:55 point

This is absolutely amazing! Great job! Do you plan to make the Winamp Equalizer for stacking below the player?

  Are you sure? yes | no

Rodmg wrote 06/07/2024 at 17:13 point

I'm undecided on that, for looks that would be cool, but implementing as just another screen in software would probably be more practical and economical

  Are you sure? yes | no

Dan Maloney wrote 06/07/2024 at 00:18 point

Fantastic build, brings back a lot of memories. Wrote this up for the blog, should publish soon. Great work!

  Are you sure? yes | no

Rodmg wrote 06/07/2024 at 02:55 point

Thanks!

  Are you sure? yes | no

Andres Yuhnke wrote 06/07/2024 at 00:06 point

Super cool, balanced outs would make this really useful in pro audio installations, ie connected to a mixing desk for house music before/between performances in a music venue.

  Are you sure? yes | no

Supercrab wrote 06/06/2024 at 18:19 point

Amazing!  I need this!  Great work on the visualiser too. You might have been able to use CAVA for the visualiser 🤔 (c++ dev)

  Are you sure? yes | no

Rodmg wrote 06/07/2024 at 02:57 point

Oh yeah!, I stumbled upon CAVA while researching how to implement it, but at that time I found the Audacious code easier to follow

  Are you sure? yes | no

Adam Wolf wrote 06/06/2024 at 17:21 point

This is awesome, especially if winamp is really going open source soon! Original skin gang unite!

  Are you sure? yes | no

RunnerPack wrote 06/06/2024 at 15:24 point

Very impressive! Needs a diamond-and-lightning icon on the power button ;)

  Are you sure? yes | no

tuftsanti wrote 06/06/2024 at 11:48 point

100% on board with this, I share the same affinity to Winamp. Could you share your files?

  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