Songs built your way, on the Glasses Music engine · version 0.99
PAGE SSONG
LAYER WAVE 2
PART
BAR
the whole song
block: plays · bright line under it: an effect or glitch · tap a part to read it · tap a name to open that sound
Mood
The whole mix
How the sliders work
Every slider but Bass and Volume sets the middle, not a lock. Each song picks its own tempo, length, room, echo, wobble, width and movement a little to either side of where you put it, and the tempo glides from one song's pace to the next while they blend. Every sound has its seat on the stage for the song; Movement is how far the seats move when the song turns (a featured part steps forward, the tops open out, the end draws back, the kit opens round you in a drum solo). At 0% every seat stays put. Drive loads the dice for the songs to come: how many of them push or drive (the hand drums keeping a figure going, the bass pulsing in the tops, the shaker in sixteenths at the very top, a quicker pace). At 0% every song is calm. Song length past 1.5× also sets how many songs are long ones, 11 to 19 minutes in two or three movements, each later one bringing in new instruments: none at 1.5×, about one in ten at 1.7×, one in three at 1.9×, two in three at 2.2×.
Your riff
How this works
Write a riff you know and songs are built round it. The tune says it straight and then answers it, and the other voices echo it and slow it down. The yellow F rows are home: low F and high F, with a few notes below and above them. Time runs left to right. Tap an empty square for a note. Drag a note by its bright first square to move it in time or pitch, and drag its darker squares to make it longer or shorter. On a phone, press and hold before you drag. The buttons under the grid do the same one step at a time.
Play it in
How recording works
Press Record. After a count of four the drums loop, and whatever you play is written into the grid in time, with the lengths you hold. Play it again to replace it. If every note lands a step late (wireless headphones do this), "Whole riff earlier" fixes it in one press. Use the pads, the computer keys printed on them (laid out like musical typing in GarageBand, from A to Enter), or a MIDI keyboard. The instrument and octave here are only for hearing the riff while you write it. In a song the riff is just the riff: each song picks its own instrument and octave for it, and twists and turns it from there.
What your riff is reaching for
Each song built round your riff picks one or two of these chords itself and holds them softly under the riff, so songs differ. The play button plays your riff once over a chord so you can hear it. "Always use this" pins one chord for every song.
This song
Save the song playing now as a file, or open one someone sent you. You can also drop a song file anywhere on the page. Love a song to get a link anyone can play.
Songs you loved
Got a song link? Paste it here: that exact song plays next and is kept in this list.
Listen together
Open a room and send the link. Whoever opens it hears the song you are hearing, at the place you are in it.
Keep a song
Every song is recorded as it plays. SAVE on the deck saves the one playing, from its first bar to now. The last four stay here, even after a reload.
Take a song into Logic
What you get
A MIDI file of a song you heard here: a track for each sound, named after its instrument, the tempo as it played, the parts as markers. In Logic or GarageBand use File > Open. For the sound as well, record on page W with stems on: each song's zip then holds this MIDI, the stems (dry and with effects) and an Ableton set.
Pairings you turned off
Kinds of song in the set
Played
Every song played here, newest first. Tap one and it plays next, from the top, exactly as it was.
The story so far
Layer Wave 2 · version 0.99
3D sound
Every sound is placed around your head (binaural). Light places them plain left and right instead. Measured, that is only about 3% of the sound's work, so it is a small help. Auto keeps 3D and goes light only if the sound drops out three times in a minute.
nodes built a second picture ms a frame dropout, left-out note or stall REPEAT written into the song
By lane, last 10 seconds
Lane
Notes/s
Nodes/s
Running
The browser does not say what each sound costs. What can be counted is how many notes each lane plays, how many audio nodes (oscillators, sample players, filters, gains) are built for them, and how many sources are still running. More nodes a second is more work.
Effect chains
Incidents
This computer
Sounds start sooner on a phoneJosh, on a new Samsung: it “kinda hangs when trying to download the sounds”. On a phone line (1.5 Mbit/s, emulated Galaxy) the page sat on FETCHING SOUNDS for all 11 MB, about 70 s, before Play could start. Now the sound file (sounds-aaccb508df.mp3) carries what the first song needs first (the kit, the seven first recordings, both wasm files, 5.6 MB) and each recording is used as soon as its bytes are in, so Play waits for that part only and the late recordings keep arriving while it plays. Keeping it on the device happens afterwards and never holds anything up; a Cache Storage that does not answer in 4 s, or a download that stops for 20 s, falls back to single files.
SAVE makes an .mp3 on Layer Wave’s own siteOff claude.ai, SAVE gives a real .mp3 (192 kbps), made in the background as the song plays. Inside claude.ai, which does not let a page save .mp3, it stays .mp4 or .webm.
The drum kit in 3DMo: “looking forward to the 3D drum kit”. In a drum solo the kit now leaves the left-to-right line and sits round your head, placed the same 3D way as the voices. Each song has its own way: from the drummer’s seat, a wide arc in front with the floor tom at your right; all round you, with the crash behind your left shoulder and the china behind your right; or, now and then, the stereo kit as before. When the song is down to its drums alone, the kit is always all round you. Hats and cymbals each have a seat. Toms and hand drums take their place from the fill, so a fill sweeps from one side of you to the other. Kick, snares and shakers stay in front, holding the groove together. The first bar of the part opens part way. Every hit is trimmed so each drum is as loud as it was in stereo (3D makes toms and hand drums about 5 dB louder and moves hats and cymbals by up to 2 dB; measured with the kit’s own samples in Chromium and Firefox). Not all the time: a kit all round you pulls the ear away from the tune, so it waits for the parts where the drums are the music. Light sound on System keeps the kit in plain stereo.
One controls menu on page WMo: W1 World and W2 Glasses had different kinds of menu, and switching picture with CONTROLS open told you to close it. Now CONTROLS is one menu for both, in one place (a column beside the picture on a laptop, over the bottom of the picture on a phone): WORLD SETTINGS or GLASSES SETTINGS, each with CLOSE. Switch W1 or W2 with it open and it simply shows the other picture’s settings. The Glasses settings live in it (no separate panel under the picture, no SETTINGS fold). RECORD is the same menu showing recording. Whether CONTROLS was open is remembered.
SAVE: keep the song you are hearingSavvas: “bro this track”, “need an mp3 export”. Every song is now recorded as it plays. The new SAVE key saves the one playing, from its first bar to now, as a sound file named after it (.mp4 on iPhone, Safari and Chrome, .webm in Firefox; claude.ai does not let a page save .mp3). The last four songs are kept, even through a reload: before Play, SAVE saves the song a reload cut off, and page L lists them under Keep a song.
A stage: every sound in its own placeSavvas: “more intentional about instrument placement”; it was “just panning left and right”. Every voice used to circle your head all the time, and distance was not heard at all. Now each voice has its seat on the stage for the song: the tune in front near the middle, its answer and the figures either side, the long sounds wider and further back, the halo and the second hum behind you; which side comes from the instrument’s family (a section sits together, as an orchestra seats its strings and winds) and from keeping the two sides balanced, mirrored from song to song. Distance is heard the way a room gives it: further off is a little quieter, duller at the top, wetter, and the hall arrives sooner after it (pre-delay 62 ms near, 12 ms far). Nothing circles any more: a seat moves only when the song turns (a featured voice steps forward, the tops open the stage out and bring it nearer, a breakdown and the end draw it back, the fixation’s voice comes to the front), as far as Movement says. The pads that swung side to side sit still; the wind keeps a smaller drift. Drums (Mo: a kit that feels around you in a drum solo): the kit is heard from the drummer’s seat, hats left, ride and floor tom right, opened out further than before, and further still in a solo part and when the song is down to its drums. In a voice’s panel, Speed is now Moves. Page W shows each sound at its seat (it used to keep turning them on the old orbits).
Riff buttons that mean itOn page R, Earlier, Later, Shorter, Longer and Delete note stay dim until you select a note, and Whole riff earlier/later stay dim while the grid is empty. On page M the tempo label reads TEMPO with "now 109" under it.
Phone tidyBefore the first song the song lines no longer repeat LAYER WAVE 2 and the version over the start screen (a shared song still shows its title). LOVE and FILE on Played and Loved rows are normal-size buttons, not tall boxes. The P1 to P4 tabs fit on one line on an iPhone-size screen.
Voice in two columnsOn a laptop, page V shows a sound in two columns: its name, what it is doing and a tall waveform on the left, all its controls on the right, so nothing needs scrolling. Page P says the version once.
Page W: settings beside the pictureOn a laptop the world’s settings covered most of the picture. When page W is wide (820 px or more), CONTROLS, RECORD and the Glasses settings now open as a column on the right and the picture keeps the rest, still moving while you change things. On a phone they open over the bottom of the picture as before. CONTROLS and RECORD are separate now: CONTROLS is the picture’s own settings (the world’s; with W2 GLASSES it shows or folds the Glasses settings), RECORD is only recording. The panel no longer repeats the place name the header already shows.
Said onceMix and Riff no longer repeat their own name as a heading. Library L1 puts what you use first: this song, songs you loved, listen together; the Logic how-to folds away, and there is one Open song file button, not two. Old "New in" notes (one still told you to pick a mood) no longer scroll by. P4 loses its one-choice STORY row, the song column its level read-out, and Mix on a laptop gets two columns of longer sliders.
The page gets the roomMo: the song chart was holding the layout back. On a laptop the song is now a narrow column on the left and the page you are on (World, Voice, Mix...) gets two thirds of the screen. The song lines say each thing once: title and time, band with FIX and MAD, the part, then bar, tempo, key and level. POST-MO is gone from the line (every song is post-mo).
Console keysMo: the beige keys felt cheap. The keys along the bottom are now dark console keys in a recessed tray, like an 80s studio desk: smoked caps with a lit top edge, a skirt you can see, warm printed legends. They sink when pressed, and a key that is on still glows amber from inside.
Bass licks go down, from where the line isMo: the licks “jump up then slide down”, almost comical; better to slide down deeper from a regular starting point. Two of the three licks started above the line (the dive leapt an octave and slid the whole half bar down, heard on small speakers as a slide whistle from about middle C). Every lick now starts on the note the line is on and goes down. Into the floor: the note is held, then drops onto the next chord’s root on the downbeat, slowly at first and fastest at the end, so it lands with the kick; an octave under the root’s usual place where that stays above 33 Hz. The tune, walking home: the tune’s first three notes, stepped, each near the one before, onto the root (also where there is no room to fall).
Glasses settings on the page, one tap to switchMo: “glasses music has no settings, can’t see how to change effects” and “shouldn’t have to dive into a menu to switch between glasses music or the jungle run”. Page W’s sub-tabs are now W1 WORLD and W2 GLASSES, one tap each. With GLASSES on, its settings sit under the picture, all of Glasses Music’s own: Intensity, Movement, New scene every (4 to 64 bars), Contrast, Trails, Colour drift, Transition length, Transition (random, dissolve, iris, spiral, melt, warp, shatter, bloom, ripple), Sharpness, Gentle (less flashing), and NEXT SCENE. Under SCENES every scene is there by name: tap one and the picture goes there on the next downbeat. A line under them says what the last thing you touched does. SETTINGS folds it all to one line and the picture grows into the room. Kept in this browser. CONTROLS still holds RECORD.
MAD in one pressMo: “can’t seem to find a MAD drums part? pressing multiple buttons in order with little explanation is confusing”. Page S, MAD (beside FIX): in a song whose drums go off for a part it goes two bars before that part; in any other song it makes a new song with one (dj.make) and starts it there at once. The command line says what is happening. The part is named “(mad drums)” in PARTS and on the command line and shaded on the parts arc. Mo: “I can’t notice any extra drums”: the 0.83 part mostly re-ordered eighths of a beat that repeats, so it sounded like the beat. Now the whole part has a chopped break on top (sixteenths on the snare or hand drums, accents off the beat, ghost strokes, cut short, some pitched, new every bar, busier as it goes), every second bar ends in a retrigger or a pitched roll, every fourth a stammer (one sixteenth said four times, climbing) and a reversed hit into the next line; retriggers and rolls start at 0.7 instead of 0.5 (stage55.py). Rendered: snare and hand-drum channels 3 to 7 dB up in the part, master 0.5 dB.
Drums fixation rolls into the finaleMo: the snare went “TUT TUT TUT TUT TUT, TUT” then an empty beat before the song came back. Now the snare rolls on through the last two beats, sixteenths then thirty-seconds, alone and rising, right into the crown’s downbeat. Bass drum, hand drums and bass still drop out there. Tune and bass fixations unchanged.
Play/Pause stays one keyMo: the Play key turning into Pause is not how a real key works. It now always reads PLAY/PAUSE, like a CD deck, and lights from behind while a song plays (dark when paused), the same backlight as LOVED. ROCKS and EH now cool down over about 3 s, like a filament, instead of 0.6 s. LOVE keeps its legend (no more LOVE turning into LOVED) and, when the next song starts and is not one you loved, its light fades out over about 2.4 s.
Glasses Music on page WMo: “pull in and integrate this visualiser as well please, as another option”. Page W’s controls have PICTURE: WORLD or GLASSES. GLASSES is the Glasses Music picture (its fractals, tunnels, particle forms, trails and bloom), played by the song you are hearing: kicks pull and ring, the snare flashes, the bass swells, chords colour it, tune notes fly round the circle of fifths, throws echo across. A new scene comes at the crown and at a part that lifts the song (a fast cut), at a drop or breakdown (a slow fade into something quieter), and otherwise every 16 bars (NEW SCENE EVERY: 32, 16 or 8). NEXT SCENE changes on the next downbeat. TRAILS and STRENGTH as in Glasses Music. Green in the page, true colour in fullscreen; RECORD films it at 1920×1080 like the world. Only the picture you pick is drawn, and nothing at all while page W is shut. Needs WebGL 2; without it the world stays.
The plucked bass in tuneMo: “this combination of voices sucks” (deep sub bass + plucked bass), “I think it’s the plucked bass which sucks”, and then: banning an instrument because one version sounded bad is bad practice. Measured: every recorded note of the FM-1 plucked bass started about a semitone flat and slid up to 10 to 40 cents flat over two seconds (its upper partials sit flat and die first), so on top of the bass it was sour and bending. Each note is now read every 25 ms as it is recorded and played back through a matching counter-bend: the pluck stays, the sourness goes. The other 40 FM-1 sounds hold their pitch. And when a sound sits on the bass an octave up, the bass’s own top (the quiet octave above the sub) steps back to half, so the two no longer share one octave.
Song files you can findMo: no way to open a song file, and the file should carry the title. Library L1, This song: SAVE SONG FILE (the song playing now, loved or not) and OPEN SONG FILE side by side; a file can also be dropped anywhere on the page, and the command line says so while one is dragged over. Files are named "title - band.layerwave.json" (Kaikōura saves as Kaikoura, so every browser keeps the name). PLAYED rows have a FILE button. The green dots on the cream keys are gone: a key that is on is lit.
Drum mayhemMo: “go mental on drums, get all Amon Tobin about it, cuts and stutters and fills and frills”. Built on the drums as they are, placed by the form. Five gestures: a retrigger (one hit caught and repeated faster and faster, cut off each time, rising or sinking in pitch, into the next downbeat), a pitched roll (32nds on the hand drums or the snare, climbing in pitch over the last beats), a reversed hit (a frame drum or crash played backwards that swells into the downbeat of a top, also filling a dropout), a chop (the bar cut into eighths, some played again out of order and cut off at their ends; beat one never moves) and frills (the last hit of a bar said two or three times very fast). Per song, own dice (spec.wave.mad, seed ^ 0x5bd1e995): none 52%, touch 32% (one or two corners into a top, the crown’s first), mental 16% (those, and one whole part: another top, the crown, the drum solo or the part before the crown; in each four bars the first is straight, the second chopped, the third has frills, the fourth is chopped and caught; the eighth rolls or retriggers into the next phrase; it thickens through the part). Never on a corner that already has the repeat, a swell, stop, breath, sweep, band-pass or box build; never in the fixation. Measured on 300 post-mo songs: every other bar exactly as before. Page S: MAD goes to the part; +MAD asks for a mental song next. Force key mad (touch, mental, 0), Not this x+mad.
Backlit keysMo: LOVE only lit a small dot. A latched key now glows from behind its cap like an incandescent lamp: warm amber cap, lit legend, a halo on the case, 0.35 s warm-up and 0.6 s cool-down. LOVE stays lit while the song is loved (LOVED); ROCKS and EH light for 2.5 s when their mark is taken.
See and reset what is storedP4 Setup, STORED: SHOW lists every key this page keeps on the device (lw2.*, mofi.*) on screen and as console.table. RESET SETTINGS puts every setting back to default and keeps loved songs, played history, the usage log and what songs learned (Rocks, Eh, turned-off pairings). RESET EVERYTHING clears every key. Both ask for a second press, then reload. Downloaded sound files stay either way.
The keys say what they rateMo: Rocks and Eh were not clear. Each rating key has a second line: LOVE this song (kept in Library), ROCKS and EH this part (later songs lean toward or away from what plays in it), NOT THIS a sound (turn one off). ROCKS and EH answer on the command line: which part, and what changes.
PlayedMo: a history of played songs. Page L, L2 PLAYED (was L2 LOG): every song played on this device, newest first, with time, length and minutes heard; last 40 kept (lw2.played1, never sent). Tap a song: it plays next, from the top, exactly as it was. LOVE keeps it in Songs you loved. The story log is under it.
Fix: the afterglow drew the old keysPressing a page tab faded out a copy of the old page that had lost its tab styles: cream page keys stacked down the left and the old page pushed down the screen (Edge, Firefox; 0.78 to 0.80). The fading copy now leaves the tab row out and keeps the page's scroll.
Now Playing on your phone and in the carMo: on a phone it should act like a track that is playing, shown as Now Playing and on the car's screen. On a phone or tablet the song now shows on the lock screen, in Control Centre or the notification shade, on Bluetooth and CarPlay screens and on a watch: its title, its band, Layer Wave, a cover drawn for it on the green screen, and how far through it is. Play, Pause and Next work from there, from headphone buttons and from the car. The music is played exactly as before; a silent track runs beside it so the phone knows something is playing. Computers are left as they were.
The world fills its pageMo: “the screen is just kinda floating there - maybe get rid of the screen border and let it fill (with a black border) the page”. The 4:3 screen and its green edge are gone: the world fills page W inside a thin black margin, still in the page’s green with scanlines, true colour in fullscreen and in recordings as before.
Pages are tabsMo: S was useless on a wide screen and the pages wanted real tabs. The page keys left the cream deck and are tabs in the green bar of the page they change: named, over the right pane, no S, at 900 px and wider; one letter each, over the page on screen, S included, on a phone. The open page is the solid tab. The deck keeps play, next and the ratings (one row on a phone, 45 px back). The right pane opens on the last page used, World the first time. Wide PARTS shows the list only: the map is already on the left.
Songs into LogicPage L saves any recent song as a MIDI file (a track per sound named after its instrument, the tempo bar by bar as played, parts as markers, key); stem zips carry it too, with a how-to for Logic, GarageBand and Live.
StemsSavvas: “get it to create stems, not just whole tracks”; Mo: “stems you can load into a daw and mess with, raw stems and stems with effects on them”. Page W, CONTROLS, RECORD, STEMS: DRY + WET (off unless chosen). Each song then also saves a … stems.zip: every sound of the band twice, stems/dry/ (the instrument as it plays, before its own effects, level and place) and stems/wet/ (after them: filter, phaser, wobble, band-pass, crusher, level, pan or its 3-D place), and the shared rooms and echoes as stems/fx/hall, spring, room, echo, so wet plus fx is the mix before the master (tape wobble, width, the master’s filters and limiter). A room for each sound would cost a Mac more than the band does, so the rooms stay shared. 32-bit float WAV (a sound can pass full scale before the master; float keeps it), every stem of a song from that song’s first bar (bar 1 of its MIDI), all the same length and sample-aligned to each other; the mix WAV runs about 20 ms behind them, the master’s tape wobble coming after. A sound silent all song is left out. The sound goes to the browser’s storage on disk as it comes and silence is only counted, so memory stays small; the zip is made when the song ends. They are big (about 23 MB a minute for each sound that plays).
Opening a sound keeps the mix; double tap a part to go thereMo: opening an instrument to look at it should not solo it. A sound now opens in the mix; Alone under "Now, in this song" solos it (everything else down 30 dB), In the mix brings the rest back. Savvas: on the song map, a double click or double tap on a part jumps straight to it; one tap still shows the part with GO and MORE.
The world on a green screenMo: “make the visualiser look like it's been played on a vector green display like the rest of the display - only being it's true colour when we make it full screen”, and smaller, squarer, rounded. Page W now shows the world on a 4:3 screen with rounded corners, inset in the page with a faint phosphor edge, in the page’s own green: the picture is turned to grey and multiplied by the phosphor colour, so bright is green and dark stays black, with scanlines and darker corners on top. Fullscreen takes all of it away and shows true colour, and a recording is always true colour (it copies the world’s own picture, under the green). All done in CSS, so it costs next to nothing.
Record song by songMo: “would be better sliced into different songs? ... determine [where the] song actually ends and the song actually begins”. Page W, CONTROLS, PARTS now defaults to SONG BY SONG. Songs blend (the next starts under the last one’s afterglow), so silence can’t tell where one begins; the engine can: it queues each song’s first bar about a second before it sounds, and the recording cuts on that bar. The WAV switches files on the exact sample, the last song’s afterglow running on into the next file as a mix album is cut, so the files played gapless join back into the whole take. Each video file starts a few tenths of a second before its song and runs 1.5 s into the next, for cutting room. Files are numbered and named by song (layer wave 2026-11-15 21.04 03 Southerly Lullaby.mp4, … sound.zip); the 5 s of silence stays at the head of the first. ONE FILE keeps the whole take in one; 20 MIN cuts by time as before. The status line names the song being recorded.
Find the fixationPage S, title line: a FIX button. In a song with a fixation it says the kind and the time (FIX TUNE 9:12) and goes to two bars before it. In a song without one it says +FIX and asks for one in the next song (tune, bass, drums in turn; SET.once.fix, queued next song dropped with dj.recue(), so NEXT goes there now; the button says FIX NEXT until it comes). The parts arc shades the fixation’s bars.
A waveform for every soundMo: the VOICE page’s waveform “no drums, bass - but does for hum”. It only read the listening tap the terminal makes for a tile while drawing it playing; the hum plays from the first bar and got one, drums and bass that came in while VOICE was open never did, and drew flat. VOICE now makes its own tap on the open sound’s channel (TERM.tapCh, the same 2048-sample tap for low channels, 256 for the rest).
RecordPage W, CONTROLS, RECORD 1920×1080 (Mo, to cut an hour into an album). The world is drawn 16:9 at up to 1920×1080 whatever the screen (on screen it shows letterboxed) and scaled into a 1920×1080 picture at 30 frames a second, chunky pixels kept chunky; when the browser draws fewer than 22 frames a second it draws the world at 720 and then 540 lines inside the same 1920×1080 picture. The sound is the whole mix after the limiter, before the Volume slider's effect (brought back to a 0.95 peak whatever Volume says): into the video (H.264 MP4 where the browser makes it, as Chrome and Safari do, else WebM, as Firefox does; 10 Mb/s picture, 256 kb/s sound) and, with WAV TOO, a lossless 24-bit stereo WAV of the same sound, saved inside a zip (claude.ai lets a page save a zip, not a WAV). Pressed before Play: Play starts itself, the recording opens on 5 s of silence over the gliding world, then the first song from its first bar. Pressed while playing: it records from there. Pause pauses the recording. PARTS (one file, 10, 20 or 30 min; 20 by default): each video part overlaps the next by 1.5 s, the WAV parts join sample for sample. Each finished file asks to be saved; one turned down stays (SAVE, DROP) until saved or dropped. Keep the tab in front: the picture stops while it is hidden. Kept in this browser: lw2.rec.
The song in the placeBetween moves, each place moves with the band, each from one part of it and all small (Mo: "react to the music in between scene transitions ... like, audio reactive foliage"). The bass line heaves the trees and grass: each bass note swells their sway, settling over a second, on top of a sway that grows with how full the song is. The tune lights the motes (fireflies, pollen, dust, spores): each note of a lead or its answer brings more of them, brighter, fading in about half a second. The chords tint the light: a major chord warms the sun and the shade a few percent, a minor chord cools them, over a couple of seconds. The filter sets the air: as a part closes its filter the fog comes in (to 55% of the place's distance at the most muffled) and clears as the mix opens. THE SONG IN THE PLACE on CONTROLS turns it off.
The fixation before the finaleIn about one song in five (own dice seed ^ 0x5be0cd19, 30% roll, never in a float), the part right before the crown is stripped to one sound on one chord (prog P, the first chord held) for 16 bars, which climbs, then two beats of gap and the crown. It takes the place of the hush or drop that stood there. Tune: the riff said straight, a step higher every four bars (home, third, fifth, octave; started an octave down or climbing a fifth where the instrument runs out), far and dark to close and bright, bass creeps in at bar 9, bass drum at 13. Bass: filter opening, bass drum at 5, backbeat at 9, hand drums at 13, licks climbing the tune’s notes in the second half. Drums: kick and hand drums, backbeat at 5, one locked hand-drum figure at 9, bass at 13, leaning in, a quarters-eighths-sixteenths snare roll into the gap. Kinds 4 : 3 : 3.5 (drums never in a drum-solo song). Measured at Mo’s mix: each climbs 6 to 9 dB (K-weighted) across its 16 bars, the crown lands 3 to 6 dB above its end. Force key fix (lead, bass, drums, off); Not this x+fix; songs without one are exactly as before.
New instruments in each movementMo: “definitely felt like we had more instruments? needing categorisation etc”. A long song kept five voices on five instruments for 10 to 15 minutes (five is the cap past 1.5× Song length). Now it has all six guises, the sixth arriving in the last movement, and each later movement leans its new voices to a family that blends with the song’s own (strings and winds, keys with plucked strings, synths with keys or strings; the last of three comes home to the song’s family; 85% of picks where the guise has one in that family, 63% in all), under the same rules as the first cast: no instrument twice, two FM-1 voices a movement, few chimes, the airy cap, post-mo weights, your loves and bans. Most later movements open, after the drums and bass, with 16 bars of a voice you know on a new instrument: the tune (home again in the last of three), or one or two of the band. 7 to 9 instruments a long song (was 5). Two movements run 11 to 13 minutes, three 14 to 19. Tiles, song map, cast row (echo: kalimba → clarinet), parts, story, strip and panels name the instrument playing in that movement. Engine: W.long.mv, f.mv, GM.compose.instAt/waveAt; force keys mvfam, renew, six.
Page W: controls, and fewer horror placesCONTROLS on page W (Mo) opens a panel over the world, with Mo-fi's own picture controls in it too (PIXELS sharp or chunky, STYLE: each place's own, plain PS1, VHS tape, 1-bit, ink sketch, old monitor, silent film, dreamy; TRIPS off, at the crown or always, a new trip look at every move; TRIP STRENGTH; SPEED, a multiple of the song's own pace) and Mo-fi's CHOOSE WHICH ONES for the places. SKIP: a place next door that fits the part. STAY HERE: no new places until you let go. NEVER THIS ONE: skips it and never comes back (tap it in the list to have it back). The list of every place, by kind (horror, dark, trippy, big, lush, calm): tap one to go there and stay. NEW PLACE: never, rarely (the crown, the goodbye, a part turning scary; 16 bars apart), sections (as 0.66), parts (every part, 8 bars apart), phrases (every 8 bars). DARK: as the music, darker (dark places for most parts, horror two a song), darkest (everything dark, horror whenever the music is at all dark). Saved in this browser (lw2.world). Whatever you press is cut on the next phrase line of the song (every 4 bars from the start of the part, the end of the part at the latest, at least 1.2 s away): the picture goes dark over the last beat, the new place is put in in the dark, and it opens on the downbeat with a kick of its own. The automatic moves still glide to a place next door, timed to arrive on the first bar of their section. No place ends by itself any more: Mo-fi moved on when a place ran its length, now a place lasts until the music or you move it, so every change has a reason. Horror (Mo: "seems like all songs are considered scary"): half of post-mo songs are Aeolian and post-mo never writes a flat-two or diminished chord, so a minor key plus a muffled filter was enough before. Now a minor key counts as sad, and a part is scary only when a minor (or Phrygian) key meets a sound that is dark two ways at once (muffled 0.75, dirt or glitch 1, hiss 0.5, quiet 0.5, a bare drone 0.5; 2 or more); one dark way makes it gloomy, which goes to the black forest, the caverns, the library or the volcano. One horror place a song at most, never the same one twice in a song. Over 200 songs at Mo's settings: scary parts in 24 songs (1 in 8, was 97), gloomy parts in every song.
Cross-rhythms as before; the upright piano close and dryMo, on the louder cross-rhythms of 0.60: “far too loud and jarring … revert to previous behaviour”. Back to 0.59: the hand drum against four about 5 dB down and out to its side, the loop of five or seven 4 dB down; the same songs have them. Mo: “upright piano needs to default room -80% echo -100%”. Room and echo were only per voice, so whatever played the tune got them. Each instrument now has its own Room and Echo in its panel (This instrument, in every song; lw2.unit1isend[inst], engine GM.user.isend), on top of the voice’s own (1 + x = (1 + voice) × (1 + instrument)), wherever it plays, set again at every part. Defaults: the upright piano at −80% and −100%; anything set in the panel, “song” included, is kept.
Page W: fewer, bigger movesPage C (Critter) is now page W, World. Mo: a new place every part was too often. Now the ride moves on only where a big section of the song begins: a new song, a drop or breakdown that starts an act, a new movement, the crown and the goodbye, at least 24 bars apart (8 for the crown and the goodbye). Still one step, to a place next door, timed to arrive on the section's first bar. A song now visits a handful of places instead of one a part. Mo-fi's horror places (the Inside, the Blood Sea, the Watching Field, the Endless Motel and the rest) are back, for sections the music makes dark: a section is scored from its harmony first (Phrygian mode 1.5, a flat-two chord or a diminished chord 1.25, a minor key 0.75) and then its sound (a muffled filter 0.75, dirt or glitch 1, hiss 0.5, quiet 0.5, a bare drone 0.5); 1.5 or more, with at least 0.75 from the harmony, goes to a horror place next door, or towards one (caverns, black forest, library, volcanic) when none is next door. Never at the crown or in the goodbye. Over 200 songs: 15% of moves, in 41% of songs.
Song length sets how many songs are long0.62 made about one song in four long at 2.2×, and Mo still heard 6 to 7 minutes. Past 1.5× the slider now sets the share: chance 0.82 × k1.25, k = (length − 1.5) / 0.7, same dice (seed ^ 0x27d4eb2f), floats still never long. Measured at Mo’s settings (300 songs each): none at 1.5×, 12% at 1.7×, 30% at 1.9×, 68% at 2.2×. Long songs 10 to 15.6 minutes (median 12.6), two movements or three about half and half; every other song exactly as before (median 6.4 minutes).
Page C full screenFULL SCREEN on page C's line, or the F key while page C is up: the world fills the whole window with nothing over it, and the browser goes full screen where it lets the page (claude.ai may not; then it fills the page's own frame). Tap the picture, Esc or F to come back. On other pages F is the old full screen of the whole page.
Page C: Mo-fi's worldMo: the mineshaft did not work; take the visuals from Mo-fi. Page C now flies through Mo-fi's own world (its forests, jungle, beach, reef, clouds, space and trippy places, its creatures and its PS1 look), copied from Mo-fi and driven by the song instead of Mo-fi's music. The kick pulses the screen and the floating things in it, harder the fuller the song; how full the song is sets how fast you glide; each part of the song moves the ride one step to a place next door that fits it (calm places for a drop, a breakdown or the goodbye; lush ones as the song builds; big or trippy ones for the tops), started early so the new place arrives on the first bar of the part; the crown is a trip (Mo-fi's kaleidoscope, trails and ripples) that ends with the crown; a stop in the music stops the world. Mo-fi's horror places are left out of the route here. The mineshaft is gone. three.js (WebGL) is fetched the first time page C opens; nothing runs while page C is closed.
Long songs, in movementsPast 1.5× on Song length some songs are long: about one in four at 2.2×, none at 1.5× or below (own dice seed ^ 0x27d4eb2f, force key long 2 or 3, Not this x+long), never a float. Not one climb stretched: two or three movements (spec.wave.long, the chapters form). Each movement after the first starts again from the drums alone, then the bass, then the voices come back with its new ones, sixteen bars each; a movement’s crest comes in two steps, then a sixteen-bar valley with the tune nearly alone. The middle movement is in the song’s other beat (a song with none is given one); in three movements it keeps the tune as it grew, and the last brings it back as first heard, climbs to the crown and says goodbye. Measured at Mo’s settings (300 songs): two movements 10 to 12 minutes, three 12 to 15; extra bars go a part at a time to drums parts and valleys first, voices last (24 bars at most). Every other song is exactly as before. Past about 16 minutes a song needs new material, not longer parts.
The creature falls for realMo: it only bounced side to side, no gravity, never turned. Now the amoeba is a soft body (a ring of 16 points pulled back towards its shape) with gravity and momentum. The walls and ledges rise past it at the song's pace: a ledge rising under it throws it up and it falls back in an arc; one it clips on the side, or a wall it scrapes, sets it spinning; how hard it hits decides how far it flies and how much it squashes, and the ledge it hits lights up. The kick bounces it a little, the snare nudges it sideways and turns it, harder the fuller the song. Its tails trail behind the way it moves. In the goodbye gravity lets go and it drifts weightless to the middle until the next song's walls close in. Same cost limits: 30 frames a second, nothing while page C is closed.
post-moOne sound: the mood picker is hidden and every song is made the way the Post-rock mood made them (wmood: epic, label post-mo; the other moods stay in the engine for shared links). Defaults are Mo’s mix: Room 200%, Echo 100%, Tape wobble 20%, Movement 130%, Width 160%, Bass 200%, Drive 60%, Tempo 96, Song length 2.2×, Volume 100%; a slider still on the old default moves to the new one once, any slider you moved stays. The bass’s own Level +3 dB and Top 250% are its default too (lw2.unit1; a bass level still at 0 dB moves once). Measured at the crown, Mo’s mix with that bass, deep, round and rubber alike: the limiter works about 1 dB harder (3.5 dB at the loudest), everything above 250 Hz sits 0.5 to 1 dB lower there, the safety ceiling rounds 0.2% of samples (0.1% without); nothing clips. No song under about 6 minutes at its own tempo (measured at Mo’s settings: 32% were, now 2%): a short song gets 8 more bars at a time in the drums-only part, the first voices or the long goodbye, keeping the top at 3/5 to 7/10 of the way in. Cross-rhythms (38% of songs, unchanged) about 5 dB louder and nearer the middle; the loop of five or seven 4 dB louder. Band-pass moment (own dice seed ^ 0x1f83d9ab, about 1 song in 4, force key bpass, Not this x+bpass): once, over the last 4 bars of a part before a bigger one (a crest, a top that is not the crown, the voices back after a valley), the whole mix closes to a narrow bright band in a beat, the band sinks to a low muffled one, and the next part lands wide open.
Seconds counterThe seconds on page S counted whole bars, so at 80 bpm they jumped 23, 26, 30, 32 (Mo). Now they add how far into the bar the sound is (the audio clock), so they move a second at a time.
The creature falls down a mineshaft made of the songPage C redrawn in soft glowing vector lines, bright colours on black. A glowing amoeba falls down a shaft whose walls are the song read top to bottom, one stretch of wall a bar, so what is coming is seen below before it is heard: every sound playing in a bar sticks out as a ledge in its colour (drums as teeth and bass as slabs from the left wall; tunes as shards, effects as bubbles, air as wisps from the right), lit when it sounds. The amoeba bounces off walls and ledges, faster the fuller the song. The shaft narrows as the song fills, opens wide in a drop, closes in as a song begins and pulls away in the goodbye, where the cell floats free until the next song. A dashed seam where each part begins, in the part's colour; a new wall material (rock, pipe, crystal, flesh, circuit) each act. The amoeba: skin in the mood colour, nucleus bass, one pseudopod per voice, magenta bubbles effects, hairs and rim drums; every song a different cell (lobes, proportions, size, five ways to dance leaned by mood, nuclei, bubbles, hairs, tails, skin, rings), a feature more each part. Glow from a quarter-size copy added back (no blur filters); canvas at most 360 pixels a side, 30 frames a second, nothing while page C is closed.
Steadier sound when the next room comes inFirefox stutter (Mo, a long goodbye with the crowd on). The crowd used to hand the sound card every syllable of a minute or more of chatter in one go: 26,321 automation points in one engine tick, against at most about 290 in any other. Now each phrase is handed over about 1.5 s before it is sung (3.5 s with the tab hidden); the worst tick is now about 1,200, and a skipped song's crowd stops being fed. Measured with the tab hidden for a minute: the engine never late, no notes left out. Firefox cannot count its own dropouts, so this is the measured part, not a promise.
Play a copied link, song filesclaude.ai drops the part of a link after the #, so a shared song could not open itself. The command line on the start screen has a PLAY COPIED LINK button (until the first Play), and the L page box a Paste button: one tap reads the link you copied and that song plays (Safari and Firefox first show a small Paste bubble to tap; Chrome asks once to allow it, if claude.ai lets the page ask at all). If the browser says no, the L page box opens to paste into. On a computer, Cmd or Ctrl+V anywhere on the page does the same with no asking. Song files (Savvas): Save it as a song file under This song, or File by any loved song, saves a small .json (claude.ai asks you to confirm); Open song file on the L page, or a file dropped on the page, plays it.
Each mood its own drumsMeasured on 0.53 (300 songs): one recorded kit in every song and mood (bass drum, frame drums, darbuka, shaker) and three beats. Now a kit per song, built on the hand drums (spec.wave.kit, own dice seed ^ 0x3c6ef372, force key kit: hand, rock, dub, club, soft; Not this turns a kit off, x+kit:). Every kit keeps the deep bass drum, the small wet room and the three feels. Hand drums, played exactly as before: all of Desert, 45% of Upbeat, 35% of Dreamy, 25% of Dub, 40% of Post-rock. Rock kit (Post-rock 30%): snare, two toms, hi-hat, ride, crash (a rock beat, half-time rock, a tom beat). Dub kit (Dub 75%, Post-rock 10%): the hand drums with a rimshot and cross-stick (steppers, one drop, rockers). Club kit (Upbeat 55%): claps, congas, bongos (four to the floor with claps, half time with bongos, dembow). Soft kit (Dreamy 65%, Post-rock 20%): cross-stick, toms with mallets, ride. A kit song has no shaker: its hi-hat or ride keeps the time on a rung per part (1 quarters or off-beats, 2 eighths, 3 ride, loose or open hats, 4 the wash at the crown), opening as the song climbs, open all along, or held back until the build; a crash where a top begins; in some songs a cymbal swell into the crown. Fills, ghost notes and the solo play on the kit’s own drums. 25 new recordings (VCSL, CC0), levels set against the same song on hand drums.
Echo scream out; skip freeze fixedThe echo scream (a chord fed into the tape echo past unity feedback, echo time bent so the repeats climb: Mo’s “WHA WHA WHA HWA HWA”) was in 76% of songs. Songs no longer throw it (dice kept, nothing else moves); the desk pad still does. Skipping a song could stop the music: the lead-in plan outlived the cut (ENTC), a hold lead-in read a part that was gone and every bar after it threw. Opening a drum panel in a kit song threw (a name clash). Both fixed.
Page C: the creatureA new key, C. A small raster animal on a 72 x 60 pixel screen, hatched from the song's name (the same song, the same creature). Each part of it is a sound family and moves only when that family plays: legs drums (stomp on the kick, a foot tap on hand drums and hats, a lean on the snare, folded away when the drums stop), belly bass (lights on each bass note, flares on a lick), arms the tunes (one pair per voice in the voice's colour, a note lifts an arm, higher notes higher), horns effects (tips light on throws and sweeps, a throw flies off and repeats at the echo time, they stretch through a riser), mouth the chant, pale specks the crowd and birds. It bobs on the beat as hard as the song is full, grows from a blob to full size by the top, gains one trait (spikes, tail, fins, more legs, an eye) with each new part, curls up in a drop or breakdown until the bass brings it back, wears a crown on the crown, sheds itself in the goodbye, freezes on a stop and blinks when the chord changes. Ground in the part's colour. At most 30 frames a second and only while page C is up; no sound nodes. P2 PERF has a CREATURE line with its cost.
Lighter on the sound cardGlitching in Firefox (two reports with 66 sources running on the desk and no notes). Every sound channel carried its whole treatment rack from first bar to last: tape wobble with two LFOs, a swept band-pass with one, four all-pass stages with four, a crusher, about 20 nodes and 7 oscillators a channel, 60 to 70 a song, twice that while the next song warms up. 0.37 unplugged the wet sides, which is enough for Chrome (it only runs what reaches the speakers), but Firefox runs every node with a live input. Now a channel is a plain short delay until a treatment is put on; the rack is built then, crossfaded in over 60 ms, and taken apart 4 s after the treatment fades. Oscillators left running on the desk: 18 (was 66 to 69), rising for as long as a treatment is worn and falling back after (measured over two skips in Chromium).
Colour that means somethingThe screen stays one phosphor; the music is in colour, and each colour is a fact. Family: drums amber, bass and hum coral, air pale blue, effects and glitch magenta; each voice its own cool colour (tune cyan, echo blue, long notes violet, arpeggio green, sparkle white, glass sea green, afterglow pale yellow), the same in the map rows, the slots, the radar and the 3D view. Parts: a strip under the map's part numbers and a faint column tint: crests amber, the crown red, valleys and hushes blue, goodbyes violet, building parts none. Heat: the line of how much is playing runs blue (quiet) through cyan and amber to red (fullest). Mood: the BPM line in its mood's colour (Upbeat amber, Dub green, Dreamy violet, Post-rock blue, Desert sand), the PART line in its part's. P4 COLOUR: Code or One phosphor.
Fewer tunes at once; Play never hangsMeasured on 0.51 (300 songs): every voice stayed from its entry to the goodbye, so 37% of the bars with a tune had four or more at once, and nearly all of the steps up to the top and the crown (98%, 99%). Now (spec.wave.few, own dice seed ^ 0x2545f491, force key few: hand, room, off; songs of three voices unchanged): the climb keeps the tune once heard, the newest voice and the most recent other, three at most. An older voice steps back when a fourth arrives, after 12 bars at least, the song's own way: hand (plays on at 60% under the first half of the new part) or room (leaves three quarters of the way through the part before). The steps up to the top keep the three. The crown, a held top and a false ending's crown have everyone, three out in front (the tune, the featured voices, then the voices just heard) and the rest at 55%. Goodbye: the voices that came back for the top leave with it, the last three one per part; songs keep their length. Now four or more at once in 12% of those bars (the crowns), four or more out in front in under 1%. Play: decoding starts at once and resume() gets 5 s; then the boot line says SOUND NOT STARTED and the next Play tries again, and a failure while starting is shown instead of waiting for ever (Firefox on a laptop sat at DECODING RECORDINGS 0/86).
Skips and song linksSkip: the song being left is cut short in place (fewer parts, same song), and the picture kept the old song's rows and drew them against the new length, out across the next page. The picture now rebuilds when the song's shape changes, the map is clipped to its own page, and no row runs past the end. Song links: the link holds the whole song and plays it when the page receives it, but claude.ai does not pass the part after # to the app. L has an Open a song link box: paste a link, the song plays next and is kept in Songs you loved. A link that arrives after the page loads is picked up too. Songs you loved: up to 60 kept (was 12).
Shaker plan; no tanpuraMeasured on 0.50 (150 songs): shaker in 97% of bars with any drum, sixteenths in 29% of bars and 99% of songs, tripled overhead in the sky tops, and 70 to 93% of everything above 8 kHz. Now a plan per song (spec.wave.shk, own dice seed ^ 0x165667b1, force key shk: none, build, groove, old): none 30%, build (enters half-way through the part before a crest, plays only in the tops) 36%, groove (enters half-way through the first voice, out of every valley, drop and late goodbye) 33%; leaned by mood (Post-rock and Dreamy mostly none, Dub and Desert mostly groove). Rungs: 1 off-beats, 2 eighths, 3 sixteenths at the crown only, in songs that drive (27% of songs, 1.6% of bars). A run of tops steps a rung at a time up to its crown and down after it. Never in the opening, the first drums, the bass entry or any valley. Four-bar breath (0.8 to 1), hashed hand variation of 14%, accent on the off-beat in two songs of three. Now in 36% of bars with any drum. Mix (all songs): gain 0.75 to 0.55, high-pass 300 Hz, low-pass following the part (about 7 kHz quiet, 11.5 kHz at the top), single strokes firmer (off-beats x2, eighths x1.15), room 0.45 to 0.4, no longer fed to the sky copies. Drive no longer puts the shaker in sixteenths. Tanpura (Mo, v0.23: not as a bed in any of his tools) out of the hum dice and out of the FM-1 sounds inside the hum; was in 43 songs of 300; still there when asked for by name.
One songThe tune is the thread through the acts (spec.wave.theme, own dice seed ^ 0x85ebca6b). A new act, and the comeback after a false ending, put the tune back as first heard and say it straight twice (recap). In the valleys between acts it is said twice as slow, back to pace for the last 4 bars (broad, 75% of songs; force key broad; median note 4.6 sixteenths in a valley against 3 elsewhere). The crown says it straight; in 60% of songs the echo voice plays it with the lead an octave apart instead of answering (uni, force key uni). Strange sounds: each song keeps one or two (swoop, whoosh, Shepard, tinkle) and plays them only where a part turns, in valleys and the opening, never over the crown: 0.45 a minute, was 1.13 (60 songs). Voices move round the head at 0.3 of the speed while the song builds, 0.45 in crests, full speed only in valleys, drops, the opening and the goodbye (still).
ActsEach song has a form (spec.wave.acts, own dice seed ^ 0x6c62272e, force key acts; float songs keep their own). journey: the old single climb. chapters: 2 or 3 acts (3 in 60% of songs with 4+ voices), each building to its own crest (0.85, then 0.92), a valley between (16 then 8 bars, energy 0.22 to 0.38, the tune nearly alone over the B chords), the drums back in their other style. return: A up to a crest, a 16-bar middle on the B chords with a voice of its own and the drums half there, a 4-bar hush, A again to the top. terminal: one voice held back until the fullest part. false: after the first goodbye part, 4 bars of almost nothing, then everything back for the real top (the crown moves there). By mood: Upbeat leans return/chapters, Dub return, Dreamy chapters/journey, Post-rock chapters/false/terminal. 300 songs (a crest = a part at 0.78+ with a dip under 0.45 before the next): 3 or more crests in 120 (was 74), 4 in 25 (was 0); before, most second crests were only the short breakdown inside one top. Median length 5.6 to 8.5 min by form. The song list shows the form.
MoodsEach song has a mood (spec.wmood, own dice seed ^ 0x1b873593; set.wmood; force key wmood), weighting mode, drum style, instruments, hum kind, drive, pace, room, echo and movement. Upbeat (Shpongle): Mixolydian 3 / Dorian 3, four on the floor 4, drive leaning 0.95, pace x1.16 (cap 1.38), marimba x1.9, pizzicato x1.7, vibes x1.6, dan tranh x0.15, tanpura x0.04. Dub (Massive Attack, Salmonella Dub): Dorian / Aeolian, half-time 3, echo x1.45, trumpet x1.8, organ x1.6. Dreamy (Kid A): half-time first, room x1.2, tape and bowed hums x1.5. Post-rock (Mogwai, Godspeed): Aeolian 3, violins x2.2, cello x2, bowed and feedback hums x2.5, movement x0.4. Desert: Phrygian 4 / Phrygian dominant 2.5, tribal first, dan tranh x1.8, tanpura x2.6. Mix (default): Upbeat .35, Dub .2, Post-rock .18, Dreamy .17, Desert .1. Voices travel round the head at about half the old speed in every new song (movement lean 0.35 to 0.7, was 0.7 to 1.4), Post-rock and Dub less still. 300 songs on Mix: Phrygian 31 (was 161); Upbeat median 84 BPM. M page: MOOD chips; a change drops the next song if it is only chosen, so it is chosen in the new mood; NEXT goes now. The song line on S starts with the mood. The first song after this update is Upbeat.
One sound fileAll 184 files (every MP3 plus fm1.wasm, fx.wasm) come as one download, sounds-2f2dcb6ce1.mp3 (10.6 MB; .mp3 only because artifacts serve that type, it is not audio: a 4-byte header length, a JSON index of offsets, then the bytes), kept whole in Cache Storage (lw2-files-2f2dcb6ce1). 1 request instead of 184; the boot screen counts megabytes; Play waits for it (up to 60 s, was 7 s) so the first song starts on the real instruments. If the bundle cannot be fetched or read, each file is fetched on its own as in 0.46.
Sounds kept on the deviceEvery sound file (182 MP3s, about 11 MB) and fm1.wasm / fx.wasm go into the browser's Cache Storage the first time they arrive (store lw2-files-4a846f0e5d, keyed by path, not by the version's address), and every later load, updates included, reads them from there; only a store whose fingerprint (each file's name and size) changed is fetched again, and the old one is deleted. Asks for persistent storage once. Where the browser has no Cache Storage it fetches as before. P2 Perf, This computer: FILES, how many came from the device and how many from the network this visit.
Hum as instrumentsOscillator hums (overtone, beating, swept, voices) off the dice. New: tanpura (4 Karplus-Strong strings with a buzzing bridge, cycle Pa Sa Sa low-Sa per bar or per 2 bars, first string retuned to the chord, buzz rises with energy); tape (one chord tone a bar into a 2- or 4-bar loop, 5 passes, each -2.6 to -3.9 dB, low-pass x0.66, wow 2+3k cents, alternate ears; input stops halfway through the last goodbye); bowed (cello root + 2 violin parts, voice-led at chord changes, rebowed every 2 bars, low-pass 700 Hz to 7.4 kHz by energy, tremolo violins above energy 0.68, top part a beat late in 55% of songs); feedback (power chord, KS strings into tanh drive 6 to 11, 11 ms loop through a Q14 band-pass on harmonic 2, 3 or 4; loop gain rises with energy and over each 4-bar phrase; swells below 0.45, strums, 16th tremolo picking above 0.7). Weights 2.2 / 2.6 / 2.4 / 1.9, grain 1.2, didgeridoo unchanged. Levels matched to the old hum (about -21 dB). First song after the update has one of tanpura, tape, feedback.
Usage logThe page counts how it is used, on this device only (lw2.use1, never sent anywhere): seconds on each view (visible panes, their open tab, playing or paused), every tap on a key, tab, chip, slider or list (by element id, or box id plus label), taps on the screen by what was under the finger (slot role, rack cell, radar, map part, empty), keyboard keys, view-to-view moves, the last 600 actions in order, screen sizes, text size and colour. P2 Perf: Copy usage puts a text report on the clipboard (time per view, top taps, top moves, every control never touched, last 150 actions) to paste to Claude; Forget usage starts again.
Edge to edgeSwatch row and the LAYER WAVE 2 strip under the keys removed (colour stays in P4 Setup). Screen bezel gone: no 16 px side margins, no 4 px inset, no 7 px frame or rounded corners, no dark vignette at the edges; keys keep 6 px sides. Screen on a 390 x 605 phone: 350 x 469 → 390 x 513 px (+22% area); on 1280 x 800: 1240 x 678 → 1280 x 730.
LegibleNo pattern behind text anywhere. Rack cells: waiting = dotted outline, fetched = solid outline, in memory = solid outline plus a 4 px bar on the left; the hatching is gone. A slot due in the next part has a dashed outline instead of hatching. The rack scrolls (wheel or drag; a bar and an arrow on the right edge) when its cells run past the screen; names that do not fit are cut at a word. Small slots too narrow for a name show one whole word (BASS DRUM → KICK, TAPE HISS → HISS), never a chopped one. Waveforms and the phaser stripes stay clear of names: in a slot under 22 px tall the trace runs only to the right of the name. Text: canvas type 1.56x the 0.41 request sizes (was 1.36x), screen text 12% larger; dim text 40% to 62% strength, secondary 66% to 85%, dim canvas colour 55% to 72%; glow on text 7 px to 4 px, scanlines 26% to 13%, screen bloom about a quarter lower. P4 Setup: TEXT Normal / Large (1.2x) / Largest (1.4x), kept in lw2.ts; slots, rack cells and map rows grow with it. Screen colour: six swatches always under the keys (green, teal, white, blue, amber, red), one tap, the one in use outlined; white, blue and red are new; P4 has the same six.
Phosphor pagesNew interface. One screen, seven pages on keys under it: S song map (always on the left at 900 px and wider), V one sound (heard alone; waveform as a 3D waterfall, 28 slices over 2 s), M whole mix, R riff, X space (radar, scopes, a slot per sound), L songs and log, P system (rack, performance, changes, setup). Drawers and the screen strip removed. Story board replaced by one command line; tap it for the log. One phosphor colour (teal, green or amber in P4): moving numbers bright, labels dim, choices in inverse video; an effect or glitch is a bright line under its block. Leaving a page leaves an afterglow: copied once, 80% to 0 over 1.1 s, opacity only, off with Motion low or reduced motion. Canvas text in VT323 at 1.36x the old sizes.
Each instrument's own voice, register and playingSound panel of an instrument, under "This instrument, in every song", kept in lw2.unit1 (play[inst] = { v, oct, st }, engine GM.user.play). Voice: plain, slowed tape (the sample an octave up at half speed, same pitch), backwards (notes of 0.3 s or longer). Register: an octave down or up, folded back at the ends of what was recorded (7 semitones below, 5 above), an octave up through a 5.2 kHz low-pass. Playing: smooth (1.5 x length; blown and bowed notes swell in over 0.14 s), short (0.4 x length, release 0.07 to 0.1 s). Applies where the instrument plays a line (tune, echo, half speed, arpeggio, sparkle, long notes, the keys in its panel), not in the hum or in peeled textures. Level trims from renders of 60 instruments against the plain voice (GM.OWN): slowed tape on struck instruments x0.76, backwards x1.5 held and x1.25 struck, short x1.3 held and x1.1 struck; after them every variant is within 3.2 dB of plain at the median.
Performance screenSystem, tab Performance. Counted, not guessed: dropouts (AudioContext.playbackStats), notes left out because the page stalled past the scheduler's 0.4 s lookahead (desk.missed, shown nowhere before), scheduler work per 60 ms tick, picture time per frame and the longest gap between frames. By lane over the last 10 s: notes scheduled, audio nodes built for them (GM.perf.lane names the lane while its event is scheduled; the page wraps the context's create*), sources still running. Effect chains: treatments plugged in now, nodes built by kind, 3D or plain panners, deliberate REPEAT / dirt / hiss counts. Incidents: each dropout, left-out note, late tick, picture stall and deliberate REPEAT with the bar, part, songs sounding, nodes a second and picture time at that moment. Measure this computer: an offline render of a reference patch about as heavy as two songs blending at a top (3 convolvers of 7.5 s, 20 HRTF panners, 60 swept filters, 150 gains), as a share of real time. Copy report puts all of it on the clipboard. Fixed: coming back to a hidden tab no longer counts as a picture stall.
Entries and exitsMeasured over 300 songs: 5.2 new voices a song arrived at full level on bar 1 of their part, 4% with any lead-in. Now each is led in (GM.compose.enterPlan(spec), force key enter = early | hold | rise | cold): early, 2 or 4 bars under the part before at 0.4 to 0.66 of its level, dark, saying the riff's first two bars; hold, a held home note (blown, bowed) or a quarter-note vamp on it (struck); rise, 0.5 to 0.9 over its first four bars, the only way after a drop, a dropout or the drum solo; or the song's reverse swell. The way the song has gone longest without is chosen (150 songs: early 37%, rise 35%, hold 23%, swell 5%). First bars after a lead-in 0.75 and 0.9. Every other layer (drums, bass, deep piano, pad, long notes, chant) eases in at 0.5 then 0.78 and out at 0.84 then 0.6 unless the bar is a hit (boom, top, drop, solo) or a cut (dropout, tape stop, breath). Bass drum: two soft beats on 3 and 4 before its first bar (70%). A leaving voice's last note goes to the bloom send. Rendered: an arpeggio that started at -29.7 dB now reads -43, -36, -31, -29 dB over the four bars around its entry; master peak unchanged. Map: a ramp before the block shows a lead-in.
A fifth less work for the same soundThe wet branch of each tune channel's treatments (wobble oscillators, sweeping band-pass, phaser, crusher: 25 nodes on 7 channels a deck) ran all the time at zero gain. Each is now connected only while worn and disconnected 4 s after it has faded (ch.treat.plug). Offline render of a top with two decks, 22 s of sound: 20.4 s before, 16.4 s after. Output unchanged: difference -93 dB (the 16-bit floor) in four passages, one with a worn wobble. Share of what is left, measured the same way: three convolvers 18%, HRTF panners 3%, so Light sound saves little; its note on System now says so.
A growling didgeridooPer song, 40% of didgeridoo songs (spec.wave.bed.didg.growl, force key growl): the buzz is amplitude-modulated by a sine at half its pitch (gain 0.6 ± 0.4, ± 0.8 on the drum pushes) and pressed through a tanh shaper, which adds partials an octave under the note; mouth formants lower (360 and 900 Hz at rest, vowels to match), body low-pass 440 Hz, tube peaks at 2 and 4 times the note, breath noise at 1 kHz. Rendered against the plain one in G and F: same level (-22.9 against -22.8 dB in a top), 1 to 3 kHz 8 dB down, 200 to 400 Hz 3 dB up. Hum panel: How the didgeridoo is played: Either way / Plain / Growling, kept (set3.growl).
The song map on the main page; one bar; this part rocks / not feeling it; dropout counterMain page: the words (story board, title, parts line) are off by default and the song map is drawn in their place, in the picture itself: title and clock, how much plays bar by bar, a row per sound, a column per part, playhead, your marks. Tap a name to open that sound, tap a part to read it. Tap the picture for the words; the choice is kept (lw2.words). Wide screens: slots and radar with the scopes beside it on top, the map across the full width under them. Phone: radar strip 48 to 60 px, slots, map. The button bar is the same in both views, a size down (36 px), with two new buttons that replace works / drags: This part rocks, Not feeling it. Besides the pacing tally they now lean how often the instruments, hum kind, drum style and bass sound playing at that bar are cast: 0.25 a tap, weight exp(0.45 x), between about half and double, fading 3% a song (lw2.lean1). Sound health (System): dropouts counted from AudioContext.playbackStats where the browser has it, engine lateness, picture stalls, output delay; a dropout flags on the read-out line. 3D sound Auto / Always 3D / Light: Light swaps the HRTF panners for equal-power ones; Auto does so after three dropouts in a minute.
A share link that holds the song itselfShare and Copy link now give #s1-…: the song's saved form, numbers to 4 places, deflate-raw, base64 with -a and -b for + and /. About 4,000 characters. Nothing is looked up, so it opens for someone who is not signed in to Claude, and anyone can share, not only the page's owner. Old #song- links still open (signed in). Where the browser has no CompressionStream, Share gives the old short link. Before a song plays, the title and the line under the start screen are gone (the start screen says both).
One strip: every panel is a screen of one machineMAP, SOUND, DESK, RIFF, SONGS, LOG, SYSTEM across the top of the drawer; one tap from any screen to any other, the drawer stays where it is and only its contents change. The Desk's tab row and its System button are gone (they are strip entries). One screen at a time: opening one closes the other. Titles that repeated the strip are gone; a sound keeps its name line.
Each sound has its own controlsSound panel, kept for every song (lw2.unit1). Drums, each: tune -5 to +5 semitones (playback rate), length 25 to 100% (hold 55% of it, then a fall), level, room. Bass: level, top (the octave above the sub, 0 to 250%). Hum: level, movement 50 to 200%, room. Voices: height -0.5 to +1.2 and speed round the head 0 to 300% (0 parks it), room, echo. Other channels: level, room, echo. Room and echo run -100 to +100%: below 0 scales what the song sends, above 0 scales it up and adds a send of its own. Beat, bass shape and hum kind take never, less, normal, more, like instruments. Engine: GM.user.drum, send, space, bass, hum, desk.setSend, hum kind weighted by taste. The didgeridoo choice (never, some, every song) moved from the Desk to the hum's panel. 296 engine patches.
Didgeridoo; driveHum kind didg, one song in five (Desk, Sound: never, some, every song): a 34% pulse and a saw at 49 to 92 Hz, tube peaks at 2.9 and 4.8 times the note, two band-passes as the mouth (oo, wah, ee). With drums the mouth opens on the bass drum's and the backbeat's steps (+7 dB at 1 to 3 kHz, gone before the next beat); without, it drifts. Overblown to 3 times the note for 2.6 sixteenths at the end of a phrase in a top (65% of these songs). Level as the other hums (-23.5 dB RMS in a top). Drive: per song, own dice, loaded by the Desk slider Drive (60%: calm 16%, push 48%, drive 36%). Push: shaker sixteenths in the part before a top and in tops. Drive: from the second voice on, plus a hand-drum cell under the later parts and tops (75%); float form rare. Bass re-struck on eighths in tops (70% of drive songs, 30% of push; bass channel 2 dB under held notes). Pace +0.04 or +0.10, at most 1.25 (median 71 to 76 bpm). Bass drum and backbeat unchanged: no double time. Slot tags 16THS, PULSE.
One drawer; radar in 3D on a tapSound, parts, Not this, System and Desk open in one drawer: bottom edge and 74% of the height on a phone; right edge and full height on a wide screen. One header (kind, name, Close). It slides in with a phosphor flash and is opaque. A tap on the picture outside it closes it. Phone: words and buttons take about a third of the height (story lines to come on one line each, WORKS and DRAGS beside the parts strip, status on the title's line); the slot grid tightens before it can reach the words. Picture on its own keeps play, next, love and not-this. Radar: unchanged until tapped. Tapped, a camera drifts round the same positions (0.11 rad/s, 28 to 48 degrees above the floor), two upright rings and an axis are added, height is drawn 2.3 times taller, each moving sound leaves a 3 s trail, and the sounds placed by left and right only appear as squares on the inner ring. Tap again for flat. Page only; 268 engine patches.
Fixed slotsSong screen: every sound of the song has one slot for the whole song, in a grid of 4 columns (phone) or 8 (wide), rows by family: drums, bed, voices (double width), air, effects. A slot is lit while its sound plays, hatched when it is next, dim otherwise; nothing is re-packed, the STANDBY line is gone. The line under the title that repeated key, tempo and part is removed. Opening a sound solos it: deck.solo(names, t) with no length holds every other channel trim at -30 dB until deck.unsolo, released on close, on In the mix, and while the sound is silent in the part; the bass takes its second voice with it, the kit panel solos the five drum channels. Hear alone 4 s is gone from the panel. 268 engine patches.
Story linesA story line more than 4.5 bars ahead now waits in the queue and is shown when it is 4 bars off; before, a 14-bar countdown could hold one of the two slots on a phone. "An" before instrument names that start with a vowel. Page only; 267 engine patches.
Song mapParts box: a map of the song. One row per sound, texture, FM-1 effect and glitch device; one column per part; drawn from the section data the engine plays (layer ranges, featured treatments, box effects, peels, grit flags). Rose underline: a treatment on that voice in that part. Wedge: dirt rising. Dots: hiss. Dashed line: the fullest moment. Tap a part for what it is for and what is in it, then Go; tap a name to open that sound. The list is kept as a second view and now names glitch and dirt too. Composer: rising dirt no longer shares a corner with a repeat, a sweep, a stop, a rest or a box build, and never runs through the fullest part (one build per corner). 267 engine patches.
Glitch and dirtFour devices, each with one job and one kind of place, own dice. Repeat (36% of songs): the last 1 or 2 beats of the bar before a top are caught and looped on the master, as eighths, sixteenths, or eighths then sixteenths then thirty-seconds; never on a corner that already has a sweep, a stop, a rest or a box build, never on two corners in a row. Dirt on the hands (32%): overdrive or a 4-bit crusher on the frame drum, hand drums and shaker bus, bass drum and sub untouched; rises through the part before a top and is off on the downbeat, or holds through the first drums-only part. Hiss (25%): tape hiss or record crackle under the drumless opening and the last goodbye, cut one beat before drums enter. Worn tune (18%): the tune through a 4-bit crusher with a 4.2 kHz low-pass in the goodbye or the breakdown. 30% of songs have none, 46% one. Each has a rectangle, a line in the story, a panel, and a ban key. Crusher added to the effects you can put on a voice by hand. 267 engine patches.
Open any soundTap a rectangle in a song, or a cell of the rack (start screen and System page), to open it. Instruments: level -12 to +6 dB and tone 600 Hz to open, kept for every song; how often it is cast (never, less x0.35, normal, more x2.5); eight keys that play it in the song's key on the sixteenth grid, and a held key becomes a riff. A playing voice: hear alone for 4 s; wobble, band-pass, phaser, echo or far put on by hand until the next part. Drums, bass, hum and the other channels: a level each. FM-1 effects and textures: what each does, where in a part it is placed and why, which parts of this song use it, jump there, allow or never. FM-1 engines list their presets. Settings are kept in this browser. 255 engine patches.
The terminal is the pictureThe valley is retired. The rack stays on screen; when a song starts, everything it does not use fades and the rest move into place: one rectangle per layer, texture and box effect. Each shows its channel's real waveform (an analyser per channel), a level bar, and whether it is playing, next, or silent. Effects are drawn on the rectangle: band-pass window, phaser stripes, echo ghosts, reverse, half speed, wobble, far, overhead. Box effects, the filter sweep and transitions act on the whole screen. Radar: each sound's position round the listener, height as a stem, one sweep per bar. Master: stereo scope, waveform, spectrum, peak in dB. Phosphor persistence and glow; glow follows the room send. Tap a playing rectangle to solo it for 4 s.
Boot screen, info menu, live readoutsLoad screen: every sound source and effect is drawn as an outline, hatched once fetched, filled once decoded or running. System status, changes and credits moved to their own menu (Desk header). The Desk Log tab holds only the song log. Readouts that change are cyan mono with a lamp; fixed text is not. These notes rewritten.
Listen togetherDesk, Songs, Open a room. The host writes song spec, bar, wall-clock time of the bar line, tempo and next-song blend to one database document; guests render locally and align to the bar line. No audio is streamed. Two-page test: within 0.007 bar, next song followed without a jump. Host needs write access to the page database (owner or contributor); guests must be signed in.
Louder topsMeasured: tops were within 1.5 dB of the build. Per-song gain plan: stack -1 to -2.2 dB rising to 0, peaks +0.8 to +1.5 dB, crown +2 to +2.8 dB with +1.5 to +3 dB sub. About 5 dB from first stack to crown. Wall of sound at the crown in about 53% of songs (overdriven saw chord, sixteenth tremolo, opening low-pass). Resonant low-pass sweep into the crown in about 28%. Not this: wall.
Chant channelChant channel restored to Glasses Music values: gain 0.5 to 0.85, high-pass 90 to 240 Hz, hall send 0.5 to 0.26.
Chant ensembleChant is 3 to 5 detuned, staggered voices, one an octave down when in range, level x1.35. Line contour: rise, mid lift, final fall. New songs only.
Airy cap, home family, longer openingsAt most 1 or 2 airy voices per song: 0/1/2 in 8/55/37% of songs (3 or more in 33% before). Two airy voices disable the air texture and weather. Wind off in about half of songs. Each song has a home family (strings, winds, keys, synth) with x5 casting weight. Drums-only and drums-plus-bass sections last 8 or 16 bars. The goodbye uses only voices already in the cast. Checked on 500 composed songs.
Moving hum, harmonyHum kinds: overtone (moving formant), beating (detuned pairs, 0.14 to 4 Hz), swept (low-pass and two band-passes), voices (two parts on chord tones), grain (a sustained instrument). Rule: pitch and timbre are never both static. Pads: per-note swell, re-voicing every 2 bars, or swell and fade. Harmony in 50% of songs: thirds, sixths, chord or open voicing under one or two voices; always, in full sections, or late. New songs only.
FM-1 effects boxEight effects from FM-1 firmwares (fx.wasm in an AudioWorklet) on the music bus, sub and kick excluded: echo throw, echo feedback build, high-pass sweep, isolator, granular cloud, resonator, phaser, chorus. Scheduled as gestures at section boundaries; 0 to 3 per song, each in about 1 song in 8.
Birds removed, wider Not thisSynth birds removed from openings. Not this lists every non-instrument layer in both blending songs (voices, chant, weather, FM-1 hum and bass colour, desk throws, textures), each with a permanent off switch. Bans are listed in Desk, Songs.
Dynamics, textures, loose timingVelocity changes level, brightness and attack. Per-section dynamic shapes per voice; riff accents; swell on sustained notes. Textures: parallel sends of playing voices (drum-synced chop, sympathetic strings, air trails), 0 to 2 per song. A third chime voice is unlikely. Per-voice timing offset and jitter; downbeats fixed.
55 more sounds10 recordings (VSCO 2 CE) and 45 FM-1 engine presets (fm1.wasm, rendered in a worker). Loaded on demand per song; at most two FM-1 voices per song. FM-1 roles: bass colour, hum, weather, riser. All levelled to about -24.4 dB; bright ones low-passed.
Song arcSection lengths vary from 4 to 16 bars. The top is never level for more than 16 bars; the fullest point is near two thirds. Arc drawn in the parts strip and in Parts. This part works / drags marks are stored and fed back into composition. Deep piano lowered.
Next-room voices, bass levelVoices behind a wall between songs, in 30%. Sub level cut by more than half (about 75% of energy before, about 50% now). Bass slider added; 100% is the new level.
Per-song formForms: stack, hills, float. Openings: hum, riff, drums, birds, chant. Section transitions: reverse swell, tape stop, breath. Sliders set a centre; each song offsets tempo, length, reverb, echo, wobble, width and movement; tempo glides during blends only. Polyrhythm in 38%. Rests after a voice enters. Fixed: vibraphone level, clipped transients on plucked attacks.
Key repeatHeld keys on the riff tab no longer auto-repeat into the browser.
Riff tab layoutHelp text collapsed. Default grid 2 bars x 32 steps, fitted to Desk width. Key map A to Enter: C below low F to G above high F.
Drummer, drum soloPer-song drummer: fill set, fill rate, ghost notes, 4-bar variations, optional alternate beat for one section. Drum solo over a filtered, phased chord in 40% of songs.
Riff: bars, octave, chordsRiff stored as notes and timing only; the song picks instrument, octave and key. 1 or 2 bars, 16 or 32 steps. Chord suggestions: one or two per song, or one pinned. Riff answers: mirror, reverse, third or fifth up, leaps. Drag to edit. Desk tabs. MIDI input with error reporting.
Per-song effect setEach song uses a subset of the effects and its own rate of bass licks, throws and overhead drums. Version number and change list added.
Bass licksSub glide landing on the root on the downbeat.
Parts, Not this, recorderParts strip with jump. Not this with solo and ban. Un-love. Riff builder with note lengths, recording to drums, key and chord hints. Afterglow distortion fixed.
Reverb contrast, heightClose dry voices; the hall kept for moments. Elevation cues. The lead varies the riff.
Riff, share linksSongs built on a user riff. Share link for loved songs.
Full screenFull screen and picture-only mode. Label motion smoothed. Kick no longer shakes the picture.
Glasses Music engineLayer Wave structure as a mood on the Glasses Music engine, with sampled instruments.
First versionReplaced by 0.2.
Setup
PHOSPHOR
COLOUR
MOTION
TEXT
STORY
STORED
Colour Code: the screen stays one phosphor and the music is in colour. Drums amber, bass and hum coral, air pale blue, effects magenta, each voice its own cool colour. Parts: crests amber, the crown red, valleys blue, goodbyes violet. The line of how much is playing runs from blue to red. The BPM line takes the mood's colour. One phosphor: everything in the colour above.
Motion low turns off the afterglow between pages, the flicker and the light pen. Phone settings that ask for less motion do the same.
Credits
The recordings are from the Versilian Community Sample Library and VSCO 2 Community Edition, both free of copyright (CC0). The FM-1 sounds are made by the synthesis engines of SLOOP by isod89, built on Felucca by Leo Kuroshita, with parts after Dexed, Mutable Instruments Rings, DaisySP, CrispyZebra and klattsch. The FM-1 effects are the tape echo, filter and isolator of DUB-BOX by altessproduction (after sloop-DUB), the granulator of Tonitor by Nuno Zimas, and the resonator, phaser and chorus of Veffbox by Veff. All of that code is free software under the GNU General Public License, version 3, so this page as a whole is offered under the same licence. Sources: github.com/isod89/sloop-fm1, altessproduction/DUB-BOX-FM1, nzimas/tonitor, galfaroth/veffbox, and this page itself (view source).
>
this song
Not this
What should go? If you are not sure which sound is which, hear it on its own first. Everything else steps back for four seconds.