WLED offers a way to directly drive the connected LEDs via UDP. The protocol is referred to as WLED [Audio-Reactive-Led-Strip](https://github.com/scottlawsonbc/audio-reactive-led-strip) (WARLS), since the support of that project was its primary goal. However, it can also be used for other realtime applications like an ambilight.
Byte 1 tells the server how many seconds to wait after the last recieved packet before returning to normal mode, in practice you should use 1-2 (seconds) here in most cases so that the module returns to normal mode quickly.
After this the LED color information is transmitted like:
Byte | Description
--- | ---
2 + n*4 | LED Index
3 + n*4 | Red Value
4 + n*4 | Green Value
5 + n*4 | Blue Value
When WARLS mode starts, all LEDs will be black. However, you don't have to change all LEDs using one packet.
Changing a single LED therefore only requires a packet of 2+4 bytes. All LEDs maintain their color until it is changed or the module exits WARLS mode because of a timeout.
1. Download [audio-reactive-led-strip](https://github.com/scottlawsonbc/audio-reactive-led-strip) and follow its installation instruction. Use python 3! You can also use my (untested) [fork](https://github.com/Aircoookie/audio-reactive-led-strip). In that case, you can skip step 2 and it should also work with python 2.