Inspiration
Boston is a five-hour drive from Ithaca, NY. The only thing that kept us going was an endless queue of songs on our playlist. Yet despite this, none of us had Spotify Premium. Every time an ad played, it was a complete upset. They always felt out of place, awkward, or simply ineffective.
After listening to ads after almost every song, we started talking about why ads have to sound so disconnected from what we were listening to. We were already talking about hackathon ideas, and we ended up talking about the technical implementation of making it play as an extension of the song, so it feels less boring at a minimum
That is what led to Seren[ad]e.
What it does
An ad shouldn’t interrupt your flow.
To make this hold true, we designed two systems that work together. A context-aware ad recommendation system chooses an ad based on the listener’s situation, and seamless music integration makes that ad feel like part of the listening experience.
Neither is enough alone. A perfectly matched ad still breaks your flow if the music drops out around it, and a smooth transition doesn’t help if the ad has nothing to do with what you’re doing. So we made them work together to create a better experience. The situation that picks the ad also shapes the music that introduces it.
Making music sound good is inherently hard, so to integrate it smoothly, we focused on three things: the previous song’s vibe, the listener’s context, and the ad matcher. The music that the ad leads into should feel different when you’re starting your day with an energetic playlist than when you’re studying at midnight, and so should the ad.
To keep the two pieces together, Seren[ad]e has a Factory Droid agent write the arrangement, and fixed code builds a short bridge from the previous song’s own beats, matched to its tempo, key, and mood, and checks it before the ad plays.
The goal is that the energy isn’t lost when an ad happens. Even with an ad, what you hear fits what’s going on, and the music still feels familiar and ultimately creates advertising that moves with your music.
How we built it
We’re a three-person team, and each of us took a major component of the project.
- Ad preparation and matching: This involved building the ad library and selecting an ad from simulated listener signals, with consent controls.
- Music engine: Analyzing the song, building the musical extension, mixing the ad, and measuring the result. This uses fixed audio-processing code.
- Droid loop: Having Factory Droids write constrained mixing recipes, then using Optuna to tune their parameters and feeding back failed checks for revisions to create a loop that iterates to perfection.
Before splitting up, we wrote three spec files with a common set of standards: who owned each component, what it accepted and produced, and how we would test it.
Each spec included the same interface contracts and Git rules, so we could work independently on separate branches and build toward the same system.
Challenges we ran into
- Matching the musical backdrop with the ad script: Combining the music’s tone, energy, and pacing to the spoken message so it was cohesive required a lot of trial and error.
- Developing the context layer: Testing and validating how user data can turn into an ad-selection system varied signficantly and was hard to test without violating privacy.
- Optimizing processing time: Identifying pipeline bottlenecks and balancing faster execution with and audio quality.
Accomplishments that we're proud of
- The meshing. The hardest part was making an ad feel natural and actually feel like it is part of the music. We built a bridge out of a music library, matched to the song’s tempo, key, and mood, so the ad fits inside it.
- A loop that can check its own work. Factory Droid’s unique design makes it so that the code renders and measures itself. The agent only ever sees which checks failed rather than the entire score, keeping it independent. Every render is repeatable, so the same inputs produce the same audio.
- The double-layered architecture. One layer decides what to play and for whom. The other decides how to make it fits seamlessly. Chalk creates the context layer, which picks the ad, and a separate loop builds and checks the transition. Neither layer depends on how the other works inside, which lets us build them in parallel.
- Owning the whole path. We built the context layer, ad selection, and meshing ourselves, end to end, from a user’s schedule and movement to the finished audio. That gave us control over both which ad fits the moment and how it sounds against the music the listener was already enjoying.
What's next for Seren[ad]e
- A seamless soundtrack across the board. Connect songs, ads, and the next track into one flowing mix that follows the energy of the listening session.
- Ads that adapt to the music. Adjust the ad’s backing track, voice delivery, and pacing to its surroundings. The same campaign could sound energetic during a workout and relaxed on a late-night drive.
- Our bigger vision: an adaptive audio platform. Give streaming services, podcasts, and radio the tools to shape an entire listening experience around the person and the moment, from what plays to how every piece connects.
Seren[ad]e makes an ad sound like the next part of your song instead of a break from it.
Log in or sign up for Devpost to join the conversation.