Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 16:39
· 130 commits to main since this release

Upgrade notes

  • Stems (render --stems, export-daw) are 24-bit WAV now (16-bit before). Projects from 0.3.0: run muser migrate <project> --from 0.3.0 --write to keep their balance under the calibrated instrument levels.

Install and upgrade

  • One-line install: curl -fsSL https://raw.githubusercontent.com/claw-works/muser/main/scripts/install.sh | sh (Windows: irm …/scripts/install.ps1 | iex) downloads the right release, checks it against SHA256SUMS.txt, installs it under ~/.local/share/muser/<version> (%LOCALAPPDATA%\muser\<version> on Windows) and puts muser and muser-mcp on PATH; Linux without ALSA gets the headless build.
  • muser self-update updates to the latest release through the same script (--check only looks, --version picks one).
  • muser migrate <project> --from 0.3.0 converts a project written for an older muser so it sounds the same now: for 0.3.0 projects it shifts the gain_db (and gain_db automation) of built-in instrument tracks by their calibration. It lists the changes; --write writes them back.

Recording and vocals

  • Record a voice in muser view: a "Record a voice" panel records from the playhead (or just the loop range) over the backing in the browser, with a count-in and latency compensation (plus a manual nudge). Every take is saved at once as recordings/<track>-take-NN.wav and listed in recordings/takes.json; the take is laid on an audio track (created if needed, replacing what it overlaps) as a pending change — the project file only changes when you press Save. Takes can be swapped in or deleted from the panel. muser takes <project> shows each take's length, level, where the singing actually starts and ends, and whether the project uses it, so an agent can trim and align them (--clean removes unused takes). A project's lyrics text is shown next to the recorder, and as karaoke at the bottom of the screen: each line highlights character by character in time with the sung syllables (Chinese characters map one-to-one onto the lyric syllables, English by word), with the next line below; a Lyrics switch in the transport bar turns it off.
  • Measure latency in the recorder: with headphones off, muser plays 8 clicks, hears them through the microphone and fills in the latency nudge; the nudge is remembered on that computer.
  • muser takes <project> --timing measures each sung phrase against the guide melody (the track whose notes carry lyric) and says how many milliseconds early or late it is, and whether a constant offset looks like recording latency.
  • Cut and move audio clips in muser view: the ✂ button (or C) turns on scissors — click an audio clip to cut it there into two clips with short fades; drag an audio clip to move it (Shift snaps to 1/16 notes); click one to select it and nudge it with ← / → by 10 ms (Shift: a 1/16 note). Edits are pending changes until Save.
  • muser clip split <project> --track vocal --at <beat> / muser clip move … --clip N --to <beat> | --by-ms -70: the view's scissors and nudges for agents, editing only that track's clips in the project file.
  • Humming lyrics: notes on choir.* instruments can carry a lyric (pinyin or English spelling), or an ABC w: lyric line maps syllables onto the notes in order. Each note sings the syllable's vowel (diphthongs glide within the note, -n / -ng close to a hum), so a line hums with the vowels of its words; consonants are not sung in 0.4. Lyrics go into MIDI exports as lyric events. Sample: samples/v0.4/moon-rising.
  • Transpose the whole song: a project-level "transpose": 3 (−24 to 24 semitones) shifts every pitched instrument track as it plays — the written notes stay as they are, drums and audio tracks don't move, and chords in analyze follow. muser view has a Key − / + control for trying keys for a different singer before recording; Save writes it.

Writing music

  • A time signature per section: "sections": { "bridge": { "bars": 4, "time_signature": { "numerator": 7, "denominator": 8 } } }. Chords follow the section's bar length; analyze bar numbers, warnings, MIDI export (a time-signature event at each change), export-data and the bar lines in muser view follow the meter changes. The drummer still writes 4-beat grooves, and ABC export lays bars out in the project meter (with a note).
  • Loops that run across sections: a part with "align": "global" counts its loop from the start of the song instead of restarting at every section, so polymeter layers (7, 13, 17 steps …) keep drifting through the whole form without rewriting them as absolute clips. Consecutive sections that use the same global part become one clip, so long notes sound across section lines, and muser view shows it as one continuous block.
  • muser view draws parts that are used more than once as rounded blocks, the same shade and the part's name for the same part — like patterns in FL Studio — and its bar lines follow the real bar lengths (they were wrong for meters like 6/8).

Hand-off and export

  • Export for a DAW: muser export-daw <project> -o <folder> (MCP export_daw) writes everything Ableton Live, Cubase or Logic needs to carry on: a MIDI file of every instrument track (tempo, meter, section markers), 24-bit stems aligned at bar 1, the mix, and IMPORT.md, a guide with the steps for Live, Cubase, Logic, FL Studio, Studio One, Bitwig, REAPER, GarageBand and Pro Tools.
  • Stems: muser render <project> --stems <dir> (MCP export_stems) writes one WAV per unmuted track — with its effects, fader, pan and what it sends to buses (reverb follows the track), sidechains intact, without the master effects — all the same length, for mixing on in a DAW.
  • muser render -o song.mp3 writes MP3 directly (320 kbit/s, with title and tempo tags) with manguebyte's encoder.
  • Section markers in WAV files: muser render (and stems) write a cue point at the start of every section of the form (verse, chorus, chorus#2…), plus the title and tempo, so DAWs and players can jump by section.
  • Data for visuals: muser export-data <project> [-o data.json] [--fps 30] (MCP export_data) writes one JSON with every track's notes in seconds (as rendered), the sections, the automation curves of tracks and master, and with --fps a per-frame level and low-band envelope — everything the Electric Sheep videos had to scrape by hand.

Better feedback for agents

  • analyze --audio warns about sections that are almost silent (average level below −45 dB, or no sound at all) and says what it can see in the project: no notes there, the master volume curve low there, the playing tracks' volume low there, or both stacked (the master curve and track fades together, as in the dreamer songs). Intentional silence can be ignored.

Fixes

  • Plugins that print their own log lines (for example Kontakt 8's […] [error] PresetSlotManager::selectSlot: slot not found …, once per instance) no longer flood the terminal during render, view and the other commands. Lines that start with a log timestamp go to muser-plugin.log in the temp folder, with one note saying where; muser's own output is unchanged. Set MUSER_PLUGIN_LOG=show to see them again (macOS and Linux).
  • muser view drew bar lines a numerator's worth of beats apart, which was wrong for meters like 6/8; the pending-changes panel kept showing "matches the project file" next to a list of changes.

Full Changelog: v0.3.1...v0.4.0