Design & AI Workflow

Lull: Sound quality iterations with Claude Chat

By Entify design team

·

5 min read

·

5/12/2026

NOTE: Everything described in this article is purely about sound. The visual design and interaction design of Lull haven't been iterated with Claude yet.

When I started building Lull, I had a simple idea: three hexagons with bouncing balls that make sounds when they hit the walls. What I didn't anticipate was how many small decisions would turn a toy physics simulation into something that actually sounds musical.


Here's what that journey looked like.

A Dream That Used to Require a Team

Before I go into the technical details, I want to say something about how this was even possible.

Before the AI era, building something like Lull would have required me to find engineers, align on a vision, manage timelines, and spend money I didn't have on something that might not work. Ideas like this stayed ideas. The gap between imagination and execution was too wide to cross alone.

Claude Chat changed that. I could describe what I wanted to hear, ask why something wasn't working, explore options, and iterate — in plain conversation, at a fraction of the cost of hiring engineers for months. Every feature in Lull exists because I could simply say "this doesn't feel right" and work toward something better. Claude became the engineering partner I never had access to before. This is genuinely what it means to have a dream come true, and I don't say that lightly.

The gap between imagination and execution was too wide to cross alone.
Claude became the engineering partner I never had access to before.

Starting Point: Making It Sound Like Music

The first challenge was harmony. When three channels play independent sounds at random pitches, the result is noise. My early attempts at tuning them by ear weren't really improving things — I was adjusting values intuitively, but without a framework, I was just guessing.

The turning point came when I asked Claude to explain the concept of musical intervals — specifically perfect fourths and fifths. As someone who isn't a musician or a sound engineer, this was a genuine education. A perfect fourth means the frequency ratio between two notes is exactly 4:3. A perfect fifth is 3:2. These ratios have been the foundation of harmony in music for thousands of years because they sound naturally consonant to the human ear — not because of convention, but because of physics.

Once I understood that, the solution became clear. Each of the three channels plays a continuous drone, and each drone is tuned to a different musical interval. Channel one plays the root note, channel two plays a perfect fourth above, and channel three plays a perfect fifth. No matter what combination of sounds plays, the three drones always form a chord together — a harmonic foundation that makes everything layered on top sound musical by default.

From there, pitch relationships between the balls themselves followed the same logic. Large balls play the root, medium balls play a fifth higher, small balls play an octave higher. Every collision is automatically in tune with every other collision.

The Drone: A Foundation That Breathes

Underneath the collision sounds, a continuous drone plays at all times. Getting this right took the most iteration.

The first problem was the loop. A sampled drone loops back to its beginning every few seconds, and that repetition is immediately noticeable — a kind of mechanical hiccup. The solution came in layers.

First, a slow pitch modulation — technically called an LFO, or Low Frequency Oscillator, which simply means a gentle wave that nudges a value up and down on a slow, repeating cycle, too slow to hear as a note but fast enough to create a sense of movement. In this case it shifts the drone's pitch up and down over 10 to 13 seconds. The loop point becomes inaudible because the pitch is always in motion. Second, two voices of each drone offset by half the sample length, so their loop points never coincide. Third, a slow stereo pan that sweeps each channel independently across the stereo field, each at a different rate and phase.

But even with those fixes, the drone still sounded synthetic. A real musician never plays with perfect consistency. So we added three more layers: subtle volume breathing that occasionally dips the drone to near silence before recovering, micro pitch drift that shifts the base pitch slightly with each cycle, and small random variations in timing so no two cycles are exactly the same length.

The result is a drone that feels alive — like someone is actually playing it.

Making Every Hit Sound Different

The next problem was repetition in the collision sounds. When a ball hits the same wall repeatedly, the same sample plays from the same position with the same character. It becomes mechanical very quickly.

We changed five things. Attack time is now randomised between 20 and 120 milliseconds per hit — some strikes feel sharp and immediate, others bloom in slowly. Decay varies by up to 20 percent, so some notes ring longer than others. Each hit gets its own temporary filter with a slightly different cutoff, making some hits brighter and some darker. And crucially, playback starts from a random position between 10 and 90 percent of the sample — avoiding the fade-in and fade-out regions at either end, and ensuring every hit draws from a genuinely different part of the recording.

Gravity as a Musical Control

The gravity dial started as a physics parameter — how hard the balls fall. We turned it into the primary musical control.

At gravity zero, balls float gently toward the centre and the drone plays alone. As gravity increases, collision sounds emerge and grow louder, decay times shorten, and the reverb becomes drier and tighter. At high gravity, a harmonizer kicks in — each collision automatically generates a fifth and an octave above the root note, creating dense harmonic chords from a single ball hit.

One dial now shapes the entire character of the music from sparse and meditative to rich and complex.

Balls That Change Size

The final iteration was giving the balls a life of their own. Each ball now oscillates smoothly between small and large on a slow sine wave — each ball at its own random rate, somewhere between 10 and 25 seconds per cycle. As a ball grows, its pitch drops. As it shrinks, its pitch rises. The music shifts gradually even when the user hasn't touched anything.

What Comes Next

Everything described in this article is purely about sound. The visual design and interaction design of Lull haven't been iterated on yet — that's the next phase. I've already prepared a full design system and screen mockups in Figma, and the visual iteration will follow the same approach: conversation, feedback, and refinement until it feels right.

After that comes real production development with Claude Code, where the prototype becomes a properly built, shippable product. Sound first. Design second. Engineering third. Each phase builds on the last, and none of it would have been possible to sequence this clearly without being able to move fast and cheaply through each stage.

What I Learned

The biggest lesson was that musical satisfaction comes from variation within constraints. Total randomness sounds chaotic. Perfect repetition sounds mechanical. The sweet spot is structured randomness — musical intervals that guarantee harmony, with human-feel variations that prevent predictability.

Every parameter that felt purely technical turned out to have a musical meaning. Physics became composition. Iteration became arrangement. And a conversation with an AI taught me more about music theory in an afternoon than I had picked up in a lifetime of listening.

Lull is still evolving. But for the first time, I'm not waiting for someone else to build it for me.

Total randomness sounds chaotic. Perfect repetition sounds mechanical.
The sweet spot is structured randomness

This article is part of a series on building Lull — covering sound design iterations, design mistakes, and the full implementation process. Read the rest at entifydesign.com/our-works.

← Previous
Next →