Laband — the estate’s own music
Three tracks.
One record you can hold.
This is a deck rather than a player. The two dials do genuinely different things — speed moves the tempo and leaves the pitch where it was, pitch moves the pitch and leaves the tempo where it was — the brake is a turntable losing power rather than a fade, and the platter is a record: put a finger on it, drag it either way, and the audio goes where your hand goes. Let go and it carries on from where you left it.
No audio is uploaded and none is fetched from anywhere else — not the three tracks, not a file you open, not one the generator writes. The three tracks are files on this site, decoded in your browser, and every duration printed below is measured from the decoded audio rather than read off a filename — the MP3 headers of these three overstate their own contents by about a twenty-fifth of a second, and this page does not repeat that.
3Tracks by Laband
±12Semitones of pitch
50–200%Speed, pitch held
−48Semitones a second, braking
The deck
Pick a side.
Choosing a track fetches it, decodes it and starts it. The waveform is drawn from the decoded audio — the loud parts are where the drums are — and pressing or dragging along it moves the needle. The platter beside it is the record itself.
Write one Built in this browser out of oscillators and noise. No audio is ever uploaded. Publishing sends the recipe — a seed and four settings — and nothing else.
Bright arpeggio over a driving four. The one that moves.
Same seed, same track — always.
The library reading…
Try a title, a mood, “tape”, “over 3 min”, “this week”, or a seed.
A recipe, not a recording: a seed and four settings rebuild the same audio anywhere. Newest 1,000 kept.
MP3 · M4A · WAV · FLAC · OGG · Opus — off this machine with FILE, or from a direct link with LOAD. A file stays in this browser; nothing is uploaded.
Anything the browser can decode — MP3, M4A, WAV, FLAC, OGG, Opus. Drop a file anywhere on the deck. It stays on your machine; nothing is uploaded.
LUFS −∞ CREST — RMS −∞
Nothing loaded yetChoose one of the three above
0:00.0 of — · runs — at this speed −0:00.0
Moves the pitch and leaves the tempo alone.
Moves the tempo and leaves the pitch alone.
The output of this page, and nothing else on the machine.
Pitch & speed
Two controls, and they are not the same control.
On a record they are one thing: turn the platter faster and everything goes up. Separating them means rebuilding the music at a different length and then playing that at a different rate, and this page does it the way that keeps the drums intact.
The track is cut into overlapping windows of 4,096 samples — about 85 milliseconds — and laid back down a quarter of a window at a time. Where each window is taken from decides the length: take them closer together and the music gets shorter, take them further apart and it gets longer, and the pitch never moves because nothing has been resampled. Then a read head runs over the result at whatever rate the pitch dial asks for, which moves the pitch and undoes the length change at the same time. Speed is one of those numbers, pitch is the other, and neither can reach the other’s.
Where each window is taken from
Not from the arithmetically obvious place. A window dropped at the ideal instant almost never lines up with the one it overlaps, and two misaligned copies of the same bass note cancel. So each window is searched for: forty-two milliseconds either side of the ideal instant, the position is found whose waveform best continues the window before it. Forty-two rather than ten because the lowest strong partials in these three tracks sit between 50 and 100 Hz, and a search that cannot slide a whole period of a 50 Hz note cannot align one.
That search has a trap in it that this build fell into and had to measure its way out of. The best match, mathematically, is always the window that carries straight on from the last one — which is the window that does no stretching at all. Left alone the search takes it every time, drifts away from the timeline it was supposed to follow, and then snaps back. On a 440 Hz tone at three-quarter speed that measured 27 cents flat with a third of the amplitude gone, while the running time came out right to within three hundredths of a percent — which is exactly what made it look like a working stretcher. A small penalty on how far a window may stray from where it was asked for fixes it: the same test now lands within half a cent, at full amplitude.
What it measures
On a 440 Hz tone, across twelve combinations of the two dials from half speed to double and from minus twelve semitones to plus twelve, the pitch lands within half a cent of what the dial says and the running time within two tenths of a percent. On Black Glass Tides the beat period comes out at the source’s period divided by the speed, the spectrum moves by the number of semitones asked for and by nothing when none are, and the crest factor — the thing that goes soft when a stretcher smears transients — stays within a decibel and a half of the original’s 11.9.
The one place they stop being independent is under your hand, and it is not a compromise so much as a fact about records: see below.
The hand
The brake, and the platter.
The brake is a curve, and it is the right one
A platter left to drag slows the way anything under friction slows: its speed falls by a fixed proportion of itself every moment, which is an exponential. That curve has a property that makes it the right one rather than merely a nice one. Pitch in semitones is twelve times the log of the rate, and the log of an exponential is a straight line — so a rate falling exponentially is a pitch falling at a constant number of semitones per second. With the time constant this page uses that is 48.09 semitones a second. Rendered against a 400 Hz tone and fitted across the whole audible fall it measures 48.08, and it measures 48.09, 48.08 and 48.04 in three separate windows of that fall — which is what constant has to mean if the word is doing any work.
Held all the way down, the record is silent rather than humming. A cartridge reads the velocity of the groove under it, so a stylus at rest generates nothing, and the deck follows the same rule: the output is scaled by how fast the record is turning and reaches zero when the record does. Without that, a stopped platter goes on handing the speakers whichever sample the needle froze on — measured on this deck before it was fixed, up to half of full scale of steady DC, for as long as the button was held.
A straight ramp down to zero is not this. Its pitch is twelve times the log of a line, which does not fall at a constant rate; it falls slowly and then plunges without limit, because the log of zero has no bottom. That is a cut, not a spin-down. Let the brake go and the motor pulls the platter back up on the same kind of curve in the other direction, which is what a motor applying torque towards a target speed actually does.
The whole trajectory is arithmetic the deck does per sample against the audio clock. There is no timer anywhere in it, so a phone that has been left alone for half a minute — which throttles a page’s timers towards one a second — cannot turn the brake into a staircase.
The platter turns both ways
Put a pointer or a finger on the disc and it becomes the record: the angle your hand travels through is the distance the needle travels, at one revolution to 1.8 seconds of audio, which is the scale that makes a wrist movement feel like a record rather than like a slider. Drag it backwards and the music plays backwards. Let go and the motor takes it back up to speed from wherever you left it.
Playing backwards is the part with no shortcut. The browser’s own audio source node accepts a negative playback rate, reads it back, throws nothing at all — and renders digital silence. Rendered offline, peak zero. The other way round is to hold a second, reversed copy of the track and swap between them, but a three-minute track decodes to 65 MB and its mirror image is another 65, and a sign change becomes a node teardown that has to be scheduled on the audio clock from a pointer event that did not arrive on one. So the read head is written out instead, it takes a signed rate, and it interpolates between samples with a four-point curve rather than a straight line — a straight line is about 32 dB of accuracy at 6 kHz, which is audible grit on hats, and a scratch spends its whole time at exactly the rates that put that grit where you can hear it.
Nothing schedules a scratch. A hand has no future to write ahead into, so the pointer events are the clock: each one works out how fast the record is turning and carries the rate there over the interval the next event is expected in. Stepping the rate at each event instead measures about eighteen decibels worse.
The hand takes the record off keylock, and so does the brake
While you are holding the platter, or while the brake is down, the pitch dial stops holding the pitch still — the record is being turned by hand and the pitch follows the hand, which is the entire point of both gestures. A brake that held its pitch would be a stutter. The tempo is what stays continuous at the moment you press: the speed dial keeps its meaning and the pitch bends, rather than the other way round, because a lurch in tempo is the one a listener hears as a fault. When the two dials agree — and they agree wherever they are both left alone — there is no seam at all, because both paths are then the same arithmetic.
About
The band, the engine, and what this is not.
Laband
Three tracks — Neon Horizon Run, Black Glass Tides and Black Glass Undertow — are the estate’s own music, and they are the only audio this page will ever load. There is no file picker here and no library: this is a deck built for one record.
What the deck is running on
Where the browser has an AudioWorklet, the read head and the stretcher run on the audio thread, off the main thread, and a page busy drawing a waveform cannot make them stutter. Where it does not, the same code — the same class, out of the same file — runs in a ScriptProcessor on the main thread instead, and the deck says so in the console above rather than pretending. Everything works either way; the fallback shares the main thread, so a very busy page can make it crackle. If the browser has no Web Audio at all, the page says that too.
Nothing is uploaded, and nothing is invented
This page posts nothing. It fetches three MP3s from this site and its own scripts, and that is the whole of its network traffic. Every number it prints is measured: the durations come from the decoded buffer, the waveform is the decoded samples, the platter reading is the rate the deck reports rather than the rate the interface last asked for — during a scratch those differ — and the playhead is extrapolated forward from the deck’s own timestamp and pulled back by the output latency, because the sound you are hearing left the graph a few milliseconds ago.
The scripts this page adds are js/dsp.js,
js/engine.js and js/deck.js, and you are
welcome to read all three.