In 2017 Spotify finally deprecated their public vanilla C SDK library, libspotify, and officially replaced it with dedicated SDKs for iOS and Android and this new-fangled web thing we’ve all heard so much about. This is probably great for their maintainability but makes writing a native application for a Linux or a hardware device significantly harder, at least without an application process and NDA. Or is it? Instead of using that boring slab of glass and metal in their pocket [Dani] wanted to build a handy “now playing” display and remote control interface but was constrained by the aforementioned SDK limitations. So they came up with a series of clever optimizations resulting in the clearly-named ESP8266 Spotify Remote Control.
The Spotify Remote Control has a color LCD with a touchscreen. Once attached to a Spotify account it will show the album art of the currently playing track (with a loading indicator!) and let you play/pause/skip tracks from its touch screen, all with impressively low latency. To get here [Dani] faced two major challenges: authorizing the ESP to interact with a user’s Spotify account, and low latency LCD drawing.
If you’re not on iOS or Android, the Spotify web API is the remaining non-NDA’d interface available. But it’s really designed to be used on relatively rich platforms such as fully featured web browsers, not an embedded device. To that end, gone are the days of asking a user to enter their username and password in a static login box, the newer (better) way is to negotiate for a per-user token (which is individually authorized per application), then to use that to authenticate your interaction. With this regime 3rd party applications (in this case an ESP8266) never see a user’s password. One codified and very common version of this process is called OAuth and the token dance is called a “workflow”. [Dani] has a pretty good writeup of the process in their post if you want more detail about the theory. After banging out the web requests and exception handling (user declines to authorize the device, etc) the final magic ended up being using mDNS to get the user’s browser to redirect itself to the ESP’s local web server without looking up an IP first. So the setup process is this: the ESP boots and displays a URL to go to, the user navigates there on a WiFi connected device and operates the authorization workflow, then tokens are exchanged and the Remote Control is authorized.
The second problem was smooth drawing. By the ESP’s standards the album art for a given track at full color depth is pretty storage-large, meaning slow transfers to the display and large memory requirements. [Dani] used a few tricks here. The first was to try 2 bit color depth which turned out atrociously (see image above). Eventually the solution became to decompress and draw the album art directly to the screen (instead of a frame buffer) only when the track changed, then redraw the transport controls quickly with 2 bit color. The final problem was that network transfers were also slow, requiring manual timesharing between the download code and the display drawing routing to ensure everything was redrawn frequently.
Check out [Dani]’s video after the break, and take a peek at the sources to try building a Spotify Remote Control yourself.
Perhaps you’ve noticed, but we here at Hackaday have a slight obsession with the over-engineered. One could fairly say there’s a linear relationship between how likely we are to feature a project and how needlessly complex it is. That said, it isn’t as if we are unable to appreciate a minimalist approach. Taking the scenic route can be a lot of fun, but sometimes it’s nice to just get where you’re going before you run out of gas.
This very slick Spotify “Now Playing” display created by [Jon Ashcroft] is a perfect example of that principle. The hardware is so straightforward that it’s barely worth mentioning: a Raspberry Pi with a small HDMI display, tucked neatly into a photo frame. Nothing to get too excited about there. The real hook with this particular project is the software.
Using Spotify’s excellent API, his software pulls down the current track information and stores it locally. It does this every ~4 seconds, checking to see if the track has changed. [Jon] isn’t thrilled with this brute force method, but it works for now. It displays the current playing song and artist, and uses a library called node-vibrant to extract a dominant color from the album art and use that to create a complementary background color. Very slick.
[Jon] provides all of his source code and made it easy to connect to your own Spotify account, so don’t be surprised if you see this running on a “Magic Mirror” near you soon.
Ok, so you want a radio — but not just any radio. It has to be wireless, access a variety of music services, and must have a vintage aesthetic that belies its modern innards. Oh, and a tiny screen that displays album art, because that’s always awesome. This 1938 Emerson AX212-inspired radio delivers.
Building on the backbone of a Raspberry Pi Zero W and an Adafruit MAX 98357 mono amp chip, the crux of this single-speaker radio is the program Mopidy. Mopidy is a music player that enables streaming from multiple services, with the stipulation that you have a premium Spotify account. Once signed up, [Tinkernut] helpfully outlines how to set up Mopidy to run automatically once the Pi boots up. The addition of a screen to display album art adds flair to the design, and Adafruit’s 1.8″ TFT LCD screen is small enough to fit the bill.
Although many of us may have had childhood aspirations to be a famous wrestler in the WWE, not very many of us will ever realize those dreams. You can get close, though, if you have your own epic intro music theme that plays anytime you walk into a room. Although it’s not quite the same as entering a wrestling ring, [Matt]’s latest project will have you feeling just as good whenever you enter a room to your own theme song.
The core of the build consists of a boom box with an auxiliary input. The boom box is fed sound via a Raspberry Pi which also serves as the control center for the rest of the project. It runs Node.js and receives commands via websockets from a publicly accessible control server. The Pi is also running Spotify which allows a user to select a theme song, and whenever that user’s iBeacon is within range, the Pi will play that theme song over the stereo.
The project looks like it would be easy to adapt to any other stereo if you’re looking to build your own. Most of the instructions and code you’ll need are available on the project’s website, too. And, if you’re a fan of music playing whenever you open a door of some sort, this unique project is clearly the gold standard. It might even make Stone Cold Steve Austin jealous.
There are dozens — dozens! — of options to meet your music and streaming needs these days. Looking to make something of his own that retains that 90’s vibe of having a dedicated stereo system but with modern wireless integration, [thk4711] turned an old Yamaha hifi into a Raspberry Pi streaming client.
As far as the case goes, a few modifications allowed [thk4711] to use all of the existing buttons, and a quick-swap of the back-plate and screen gave him a better enclosure than one he could fabricate himself. The power supply proved to be the most difficult part of the project due in part to some “digital noise” interference between the digital and analog components while they were wired to a common ground. This was solved by implementing two transformers, a LM2596 voltage regulator and a LT1084 low-noise power supply to smooth things out.
The Raspberry Pi 2-centered device supports internet radio, Spotify connect, Airplay, USB and auxiliary inputs.
Have an extra Raspberry Pi kicking around? Pi MusicBox provides a way to quickly turn it into a standalone streaming device that can fetch music from tons of sources. The latest release of Pi MusicBox adds a bunch of new features.
We took a look at this software over a year ago, and noted that it made streaming Spotify easy, and had support for controlling tracks using Music Player Daemon (MPD). The newest release supports AirPlay, DNLA, Google Music, SoundCloud, and several other music sources.
Since the analog audio output on the Pi isn’t great, Pi MusicBox includes support for a variety of USB sound cards. It’s also possible to use the HDMI port for digital audio output, which can be connected into your home theatre system.
If you want to build a standalone music device, this looks like a great place to start. The user community has built a variety of projects that run this software, which are featured on the Pi MusicBox homepage.
The latest creation in the never-ending collection of “____ Hero” instruments is this Raspi-infused pan flute, built by [Sven Andersson] and his team at the 2013 WOW Hackathon. The flute itself consists of varying lengths of bamboo from a local flower shop, cut short enough to be hand-held while still hiding the Pi from the front side. In the spirit of other ‘Hero’ instruments, the pan flute has no real musical functionality. Each pipe houses what appears to be an electret microphone breakout board, which they kept in place by sealing off the end of the pipe with glue.
The sensors connect to the GPIO connector on the Raspi, which communicates to a local TCP/IP server the team ran as a controller hub. The game is also their original creation, written entirely in LUA. They turned to Spotify to find suitable material for the player to experience, creating playlists with actual pan flute songs and using the libspotify SDK to access the music. You can see the end result of the project in a short demo video below.