Inspiration
Most "AI DJ" projects we saw were really just smart playlists pick the next track, crossfade, done. We wanted the room itself to be the input, not just a listener. The question that stuck with us: what if the crowd's own movement could steer the music, live, instead of anyone picking songs at all?
What it does
Audience phones join over a browser (no app install) and read two things locally: how much the room is moving (camera) and how loud/rhythmic it is (mic). No video or audio is ever recorded or sent anywhere each phone reduces its sensor data to a handful of numbers a few times a second and discards the rest. Those numbers get combined across everyone in the room into a single "room state," which drives a live mixing engine that builds the set in real time tempo, layers, and filter brightness all shift with the crowd. There's no playlist and no one at a booth. The room's energy is the DJ.
How we built it
Phones do lightweight on-device signal extraction (frame-differencing for motion, RMS/onset detection for sound) and stream small JSON vectors over WebSocket never raw media. A server aggregates across however many phones are connected into one room-energy signal, then a pure mapping function turns that into music parameters. The sound itself comes from a rule-based procedural engine (Tone.js) a fixed set of loops all locked to one musical scale, so nothing the crowd does can ever produce a wrong note. Parameter changes are quantized to the beat/bar grid instead of applying instantly, which is what keeps it feeling like a DJ reacting instead of a system glitching. We split the build two ways: one of us on the phone-sensor and audio-engine side, the other on the aggregation/mapping logic, each testing against fake data before wiring the real pipeline together.
Challenges we ran into
Mobile browsers throttle camera access the moment a tab gets backgrounded or the screen locks that turned out to be a bigger risk than any of the audio or signal-processing work. Camera/mic access also refuses to run at all without HTTPS, which isn't obvious until you try it on a phone over local wifi. And getting the music to feel responsive without sounding broken took real tuning snapping to a new tempo mid-bar just sounds like a bug, so we built in deliberate delay and smoothing rather than reacting instantly.
Accomplishments that we're proud of
Getting the full loop working live someone moves, the room hears it change, within a couple of seconds in one week with two people. And the fact that it's demo-safe: because the music is built from one fixed scale and a quantized grid, there's no live input that can make it sound actually wrong, only a little sparser or busier.
What we learned
A lot about where to draw the line between "on the phone" and "on the server" when bandwidth and latency both matter, how to make a rule-based system feel intentional rather than random, and just how many quirks mobile browsers have around camera/mic access that never show up until you test on a real device in a real room.
What's next for AI_DJ
Testing with a real crowd at scale, not just a few phones in a room. Adding a language/region-aware track layer so the vibe fits the crowd culturally, not just energetically. And exploring a light melodic layer on top of the current rhythm-and-texture engine for sets that run long enough to want more musical variety.
Built With
- asp.net
- dotnet
- openai
- react
- signalr
- three.js
- tone.js
- typescript
- webgl
Log in or sign up for Devpost to join the conversation.