Painting your voice
Published 12 June 2026
How Luxie turns one number — loudness — into a live waveform and a breathing glow. The science behind both, no code, computed entirely on your device.
When you record in Luxie you see a waveform streaming past a center line and a glow that swells as you talk. Here's the science behind each — and, like everything we make, it runs on your device, drawn from the same audio that becomes your private recording.
It all rides on loudness
Digital audio is a stream of numbers. A microphone measures air pressure and records it as a value tens of thousands of times a second — that rate is the sampling rate (44,100 or 48,000 samples per second is typical). Each sample swings above and below zero.
To get a single loudness for a short slice — a few hundredths of a second — you summarise those samples. Two standard ways: the peak, the biggest swing in the slice, which is cheap and reacts instantly; or the RMS (root-mean-square — the average energy), which is steadier and closer to how loud your ear actually judges it. We use the peak, for snappiness. One slice gives one loudness value, and the same stream of values feeds both the waveform and the glow.
The waveform — loudness laid out in time
Each bar is one loudness value (taller = louder), with a fixed line marking "now."
Recording: a rolling list of the most recent values, drawn as bars — newest at the center, older ones scrolling left.
Playback: rather than re-scan the file every frame, when you save we downsample the whole recording into a "loudness map" — chop it into a few hundred windows and keep each window's peak. (Downsampling just throws away detail finer than a screen pixel could ever show.) To animate, we index into that map by the current playback time, sit that entry under the center line, and draw its neighbours either side; the index slides forward as you play, so the map scrolls beneath the line.
The glow — sine waves, summed
The glow is a soft blob we redraw about sixty times a second, and the idea that makes it organic is superposition of sine waves. We take a circle and set its radius, at each angle, to a base size times (1 + a wobble) — where the wobble is a few sine waves of different frequencies added together.
That's the Fourier idea run backwards: just as any smooth ripple can be broken down into sines, you can build a rich, irregular ripple by adding a handful back together. Pick frequencies that don't share a common multiple and the shape looks complex and never quite repeats. Nudge each wave's phase forward a little every frame and the bumps drift around the edge — continuous morphing, almost for free.
Making it react — and breathe
Two small pieces of signal processing give it life.
The breathing is a low-pass filter: each frame, the size we draw moves only part-way toward the latest loudness (a first-order exponential smoother — the same math as a running average). That removes the jitter so the glow eases instead of snapping frame to frame.
The punch is an envelope follower: when loudness rises sharply — the onset of a syllable — we add a burst that then decays exponentially over the next few frames, the attack-and-decay curve synthesizers use. That's what makes words seem to land in the glow. Loudness also scales the blob's size, brightness and wobble all at once (quiet → small, dim, round; loud → big, bright, rippling), and we stack two blobs — a slow large one behind a quick tight one — for depth.
Why loudness alone
Knowing which frequencies are in your voice would mean running a Fourier transform (an FFT) on every frame — heavier, and more than a glow needs. Loudness keeps it cheap enough to stay perfectly smooth while you record — phone, tablet or laptop alike — and honest about what it shows: the real rise and fall of your voice, moment to moment. Built from these plain pieces — a number, some sine waves, two simple filters — the same code draws the same visuals wherever Luxie runs.
All of it, on your device
Nothing is sent anywhere to be analysed. The numbers behind the waveform and the glow come from the same local audio that becomes your recording. On-device, never uploaded — that's the whole point.