I’ve been building Audionaut, a free, open-source (GPLv3) multitrack audio editor on JUCE, and wanted to share it here since the JUCE side might be useful to others.
It records, cuts, arranges and exports multitrack sessions on macOS, Windows and Linux. The newest part is agent control: Claude (or any MCP client) can edit a session through claude mcp add audionaut -- npx -y audionaut-mcp.
Some JUCE-specific bits, in case they help anyone:
- GUI binary as CLI, Projucer-style. initialise() checks for a known verb, runs it headless and quit()s before any window exists; file arguments fall through to the GUI. Gotchas: moreThanOneInstanceAllowed() has to be true or JUCE forwards the verb to the running instance, and on Windows the GUI-subsystem exe must only re-attach streams that aren’t already pipes.
- Editing the open document from another process. The app writes a small marker next to the project (pid, port). A command finds it and sends the work over juce::InterprocessConnection; the app runs it on a scratch engine and applies the result as a single UndoManager step. Any InterprocessConnection subclass needs ~Connection() { disconnect(); }, or in a debug build the server’s pruning asserts and the IPC thread stops.
- Real-time path. Message → audio thread only via lock-free triple buffers (farbot), and a Catch2 harness renders sessions through the live device callback and through the offline bounce and compares them sample by sample (~210 test cases, CI on macOS, Windows and Linux).
Repo: GitHub - kvoltmer/Audionaut: Audionaut professional audio editing and audio recording · GitHub · Downloads: Download Audionaut for macOS, Windows and Linux - Audionaut
Feedback very welcome, especially from anyone who has fought the same battles.