ZUnderglow


Inspiration

I love messing with addressable RGB leds and it often annoys me that to control them we need to install bloated, invasive and/or inefficient applications. Products that ship with "RGB" often require account creation and web applications for basic functionality.


The Goal:

I set out to build a small prototype with the key feature being a live-reload render function supported by raylib.

The prototype would consist of three parts:

  1. A windows application made with raylib
  2. A led receiver to receive data from the application
  3. An "underglow" setup installed on my vehicle

The Good News:

  • We have a live-reload function that updates leds
  • We successfully made an led receiver (more on this in tech section)
  • We shot some footage of the app working in the wild. In fact, the original goal was to release a build vlog of the day I installed the leds and shot some footage however this will be delayed till after the jam.

The Bad News:

  • No raylib functions can be called from hot-reload dll. Unfortunately I couldn't figure out how to get it to work :(
  • The led strips I soldered initially worked fine, but after a couple tests began outputting incorrect data. Therefore the colours of the leds no longer matched the application. This was definitely a hardware issue as the app worked great with other strips, but since I did not prepare those strips for the underglow I ran out of time to swap the broken strips with working ones.

The Grand Adjustment

So I figure since I failed at my initial goal of a live-reload raylib function (in fact I failed at quite a lot during this project and got pretty salty), I would add some music reactivity to spice things up. One problem I encountered is I had never implemented any of this in C, plus I was new to raylib so progress was slow. I ended up getting a simple bass reactive mode working, and a glaringly sparse setup page (the orientation buttons dont even do anything, just for show). But overall I believe it conveys the intended use case.

Additionally, near the end of the jam I had the idea to create a mini build vlog of installing and running the app. I have all the footage but didnt realize my PC isnt up to the task of editing 4K footage (should've shot in 1080p). I will probably release a couple of vids, but the full video might follow after the jam and when I'm able to upgrade my PC. Here's the intro to the build vlog, incase I never get around to it. I'm from Auckland New Zealand - so the big tower you see is the Sky Tower.


Pics or it didnt happen:

Custom Render Function Custom_render_function.PNG

Bass Frequency VU Mode Bass_reactive.PNG

In the field :D

raylib_in_the_field2.PNG

Hardware Receiver (just an esp8266 dev board with buck regulator) GOPR0027.JPG


The Tech (key aspects)

Software:

  • Raylib/raygui application that blasts udp packets to esp
  • WASAPI loopback audio reactivity
  • Live Reload custom render function

Hardware:

  • 3D printed enclosure modeled in OpenSCAD
  • esp8266 with a slightly modified version of This firmware. The esp acts as an access point and waits for udp packets to render straight to the strip
  • 2 extremely jank led strips soldered and attached to the vehicle in dubious ways

Postmortem:

  • Raylib ended up being a bad choice, I couldnt figure out how to hot-reload the library, and once I added windows native stuff like WASAPI - the cross platform nature of the library became irrelevant. Raylib ended up being just a UI library and PNG loader for me.
  • I learned the importance of having my own UI library in C. If I had this available for the jam, I would've been more successful. Perhaps I should've seen this coming for the Wheel Reinvention Jam lol.
  • I should've verified that all file formats and resolutions I was planning to shoot my video with - was actually editable by my hardware - huge oversight.

Recent Activity

Managed to add a couple more features and got the hardware working since my last update. A lot went wrong during this jam, tried my best to find ways to compensate. What I'm most salty about is I filmed a cool "build vlog" of getting it working for the first time last night, unfortunately my PC isnt up to the task of editing the 4k footage (I didnt know it would struggle with that, new to video editing :owlofshame:), so all I can share is a short clip with no audio. Perhaps I'll get the video out some time after the jam. RIP. &zunderglow

Finally made some progress. Made a little enclosure in openscad for the receiver and got colour data updating from a raylib gui. &zunderglow