Repository navigation
ucdaw: drive Studio Pro over UCNET (CLI + MCP) - #39
Merged
Merged
Conversation
Batched press+value with an 80 ms hold, byte-exact JM bodies, snapshot wait, parameter set and lab commands. Play/Stop proven live; metronome open.
…ize on a track's events
… fader and MCP fader
…rs say what exists
ucdaw song new [--tempo BPM] [--click on|off] and MCP new_song run File > New Session, press the New window's OK button by its label, wait for document/title to change, then set tempo and click and read back. Any other dialog is cancelled and reported. DismissDialog now presses the button labelled Cancel: the New window lists OK first, so pressing button 0 there would start a song.
…ng faders - analyze / analyze_audio: average RMS over active audio, peak, BS.1770 LUFS, silence, clipping and the trim to a -18 dBFS target; streams WAV/AIFF/AIFC - trim / trim: channel input gain in dB, read back - gainstage / gain_stage: every audio track's trim to the target, faders untouched - track to file from ucdaw's import log, or the song's waveform cache plus Spotlight - fader, trim and param set take negative levels and every global flag - mixing workflow in the MCP instructions and skills/ucdaw/mixing.md
…d and CONTRIBUTING
The go-sdk runs tool calls concurrently and, without ucdaw serve, nothing serialized them, so selection-based edits could interleave and act on the wrong track. One process-wide lock now wraps every request except Stop, using the same Request.Exclusive rule as ucdaw serve.
An unlabeled first button was dropped, shifting the second into slot 0, so pressing it by index sent the wrong dialogResult. Slots now stay in place; only trailing empty slots are dropped.
DismissDialog pressed button 0 when there was no Cancel and reported it canceled. It now presses only Cancel, No, Don't... or Do Not... (matched as whole words; Don't Save is excluded because it loses work), or the only button of a one-button alert. Otherwise it presses nothing and every caller reports the dialog left open with its buttons named. Import picked the last label containing a positive word, so it could answer Don't Convert. It now skips any label that turns the offer down and takes the first positive one.
A timed play converted seconds or bars to time.Duration before checking MaxPlay; on amd64 1e300 or +Inf overflows to a negative Duration that passes the check and plays untimed. The length is now checked as a float first (NaN, negatives and -Inf rejected the same way), and the import landing wait is capped the same way.
A timed play slept for its length and always pressed Stop, so a musician who stopped and restarted playback meanwhile had it stopped under them. It now waits on transport/start with the deadline, returns as soon as playback stops or restarts elsewhere, and presses Stop only if Studio Pro is still playing its own run at the deadline. A client hang-up still stops playback.
Delete, rename and add confirmed only the section count (or one name), so a Studio Pro that removed or renamed the wrong section was reported as success. Every arranger edit now waits for the exact list it expects, names and starts, and reports what Studio Pro shows if it differs. Move checks the pasted copy (name at the destination, the rest shifted) before deleting the original, so a bad paste never costs the original section.
Skill, CLI help and MCP tool descriptions said ucdaw cancels every dialog and a timed play always stops itself; both are now conditional. dismiss also says when a dialog closed before ucdaw answered it.
On "Save changes?" a No button discards the song, and labels alone cannot tell which button keeps the work. A dialog whose title or text mentions saving, discarding, deleting, removing, overwriting or closing is now left open, whatever its buttons, with the dialog and buttons named; import does not answer a conversion question that mentions overwriting.
… arranger check Studio Pro makes no arranger section in a song with no tracks and reports nothing, so add waited and timed out. It now refuses up front with the fix. The whole-list arranger checks passed live on a new song for add, rename, duplicate, move both ways, delete and repeat.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
ucdaw, a CLI and MCP server that drives Fender Studio Pro 8 over UCNET (the protocol the Studio Pro Remote app uses), and ships it in the same release and Homebrew formula asucmix..goreleaser.yml: second buildcmd/ucdawin the same archives; the formula installs both binaries (brew install steveclarke/tap/ucmix).fakeboardstays out.goreleaser checkpasses apart from the existingbrewsdeprecation notice;goreleaser release --snapshot --clean --skip=publishsucceeded and the archives and formula containucdaw. Nothing published or tagged.just test, no real captures).Proven live (Studio Pro 8.0.2)
Details and output in
DECISIONS.md.ucdaw serveanswers in about 40 ms.Untested
Connectthe CLI uses andserveretries with backoff, but Studio Pro was never quit during testing.Test plan
just test(845 tests),golangci-lint runclean