UAPMD v0.5.6 brings in some big features, but mostly for major bugfixes that should get released sooner than later.
Bugfixes
- Fixed major audio graph issues: it became impossible to convert from simple linear graph to DAG, and there were (hidden) issues in their connection setup among built-in nodes.
- Fixed the issue that audio processing went quite glitchy due to Analyser node performing DFT on the RT thread (which was used for the GUI)
- Fixed the issue that frozen tracks caused wrong rendering as they rendered at some wrong song position.
Addin foundation
v0.5.6 introduced addin foundation through the new uapmd-addin-core module. It is accessible Addin Manager window on uapmd-app. It is just a starter and we would migrate more components to the addin basis, as well as bringing in new features based on it.
ARA support is now integrated into this repository. It became a built-in addin that can be enabled and disabled on the UI. Note that if you enable it with -DUAPMD_ENABLE_ARA CMake option, the entire app license becomes APACHE V2.
Undo/redo engine
v0.5.6 introduced undo/redo engine. Most of the project edit operations have migrated to undoable commands.
Undo manager implementation is mostly based on the command pattern. I thought of implementing it more like immutable state travelers, but plugin instances and states would not fit well with its paradigm.
Here is the AI slop highlights (yet I made some correction).
Highlights
- Added project-wide undo and redo, covering clip edits, track structure, plug-in graph changes, plug-in parameters, plug-in state and preset loading.
- Undo and redo are available from the main menu with a description of the operation ("Undo Move Clip"), and from Ctrl/Cmd+Z and Ctrl+Shift+Z / Ctrl+Y.
- Continuous edits, such as dragging a parameter slider or a hosted plug-in UI control, coalesce into a single undoable step instead of flooding the history.
- The unsaved-changes indicator is now derived from the undo save point, so undoing back to the last save marks the project clean again.
- Added an addin system with an Addin Manager window, where individual addins can be enabled and disabled.
- ARA support is now an addin rather than a build-time option, and can be turned on and off at runtime.
- Consolidated the scattered command buttons in the main window into a single menu.
- Fixed the advanced DAG editor being unavailable, crashing on the master track, and converting built-in nodes incorrectly from the linear graph.
- Fixed a crash at shutdown caused by inconsistent resource release after the DAG editor had been shown.
- Fixed audio performance and glitches caused by the analyser node and by non-real-time-safe snapshot publication (issue #60).
- Fixed a playback offset that made frozen tracks glitch, and made frozen renders invalidate correctly when the track is mutated.
- Project files now carry stable identities for tracks, clips and graph nodes. Older project files still load; the reader mints the identifiers they lack.
For developers
- The undo engine is documented in [UNDO_ENGINE.md](docs/uapmd-engine/UNDO_ENGINE.md); the addin foundation is documented in [ADDIN_ARCHITECTURE.md](docs/uapmd-app/ADDIN_ARCHITECTURE.md).
uapmd-datagained the command and undo core:ProjectCommand,ProjectCommandManagerandProjectUndoEngine, plusProjectClipFragment/ProjectTrackFragmentdetachable fragments andProjectSerializationExtensionfor addin-owned project data.uapmd-enginegainedProjectAddressBookandProjectCommands, andTimelineFacadewas split into per-area translation units (audio, clips, document view, fragments, mixer, plug-ins) with serialization moved toTimelineProjectSerializer.RtSnapshotPublisherinuapmd-datareplacesstd::shared_ptr-based publication of real-time snapshots.- Document mutations are asynchronous: JavaScript and MCP track and plug-in mutations return a mutation job to poll, rather than blocking the model thread on resource preparation or history capture.
- New JavaScript and MCP surface:
getHistoryState,beginCompound/endCompound/cancelCompound,undo,redo, and mutation job polling. AddinManagerlives in the newuapmd-addin-coremodule under theuapmd_addinnamespace.- Added undo integration tests, project file identity tests, and a considerably expanded sequencer engine output test suite.