Logitech G13 using the G13Spotify app

The Project

During my time studying, I found having to swap between Spotify and my IDE's often distracting, especially if it were just to see what was currently playing or to quickly skip through a few songs. I had also acquired a Logitech G13 keyboard, which had a small LDC screen attached to the keyboard, and as Logitech had released the SDK to use the screen, applications could be created for it. Being able to display Spotify's current playback, in a style very reminiscent to old USB Sony Walkman's and car radios, became the obvious choice for my personal G13 project.

Goals achieved

  • Setting up a C++ project using the Logitech gaming SDK to connect to the G13

  • Creating an instance of Spotify development space, to gain access to user playback information

  • Handled Spotify's OArth system, deciding on the session and refresh key system to keep a user's Spotify login details safe, yet still not requiring them to log in every time they wanted to use the G13 Spotify screen

  • Setting up a lightweight Node.js application which would launch if a user needed to log into their Spotify to use the G13 application

  • Setting up REST API calls to Spotify to obtain current user playback

  • Setting up a render loop, text rendering, and image rendering to create the screen UI

  • Setting up dynamic API polling to reduce the possibility of being rate limited from too many API calls

Planned Improvements

  • Media controls independent of the computer's inbuilt controls

  • Quick add to a playlist, and quick playlist select

  • Intelligent merge between playlists (Spotify's more detailed API calls can return attributes about songs, such as tempo and style, making the possibility to merge between playlists without large jumps in tempo and style a possibility)

Current Progress

The application in it's current state does work, and shows a user's current playback correctly, but there are still many features I'd like to add to turn the G13 Spotify controller from just being a screen to an actual tool

 
Building example
A song's title is too large to fit in the window, so a scrolling effect is active