Package-level declarations
Types
One command an addin contributed.
Which call publishes which extension point, since they are split between the engine and the registries here:
uapmd_anchor_origin_t: which end of the anchor the offset is measured from.
Borrows the timeline's own map: the handle is only valid until the project changes, so this is fetched fresh from TimelineFacade.masterTempoMap rather than cached.
Mirrors uapmd_app_project_result_t.
Mirrors remidy::AudioBusRole.
One separated stem, ready to become a clip.
Stable document identity of one clip.
Mirrors uapmd_clip_audio_events_result_t.
The clip a clip-scoped command is being offered for. The identifiers are the ones the rest of this API takes, so a command resolves the clip through the engine rather than through anything carried here.
Timeline clip editors contributed by addins.
A clip detached from the document: the payload shared by an undo entry and a clipboard entry. Fragments obtained from TimelineFacade.captureClipFragment must be closed; those borrowed from a TrackFragment need not be.
The project's history: thread-affine and asynchronous. Its methods are called on the model thread; completions may arrive on any thread.
Application-wide commands contributed by addins.
Minimal format manager – exposes available plugin formats by name.
Marker for a MIDI 2.0 function device (no public C API beyond retrieval).
One audio bus of a graph node — remidy::AudioBusConfiguration.
One end of a graph connection.
One node of a track graph: uapmd_graph::AudioGraphNode plus the remidy::PluginAudioBuses facade it exposes.
Borrows the timeline's own map: the handle is only valid until the project changes, so this is fetched fresh from TimelineFacade.masterTempoMap rather than cached.
Borrows the timeline's own map: the handle is only valid until the project changes, so this is fetched fresh from TimelineFacade.masterTempoMap rather than cached.
Marker for a platform MIDI I/O device handle.
uapmd::MidiRecorder — captures live MIDI input into a selected clip.
A tempo change inside a MIDI clip, positioned in the clip's own ticks.
Borrows the timeline's own map: the handle is only valid until the project changes, so this is fetched fresh from TimelineFacade.masterTempoMap rather than cached.
The clipboard actions a session performs on its selection.
One note as a session holds it.
A live editing session over one MIDI clip. Owned by the model — obtain one with AppModel.openPianoRollSession and release it with AppModel.closePianoRollSession.
A MIDI clip parsed into notes, ready to load into a PianoRollSession.
Stable document identity of one plug-in node. A runtime instance id is not usable in history: removing and restoring a plug-in produces a new one.
Mirrors uapmd_plugin_instance_result_t.
Lifecycle manager for a single plugin's instantiation process. Created per (format, pluginId) pair via createPluginInstancing.
filepath is the path actually used for the save or load.
A project file made loadable. .uapmdz archives are unpacked to a temporary directory; a plain .uapmd resolves to itself. Close it after loading to remove any temporary files.
Translation between the persistent identities a history step carries and the runtime indexes the engine works with. Not thread safe; call on the model thread only.
The undoable edits a project supports. Use TimelineFacade for reading the document and for changes that are not user edits; use this for anything a user could undo.
What to render and when to stop.
Progress of a slow plug-in scan, mirroring AppModel::SlowScanProgressState.
Stem separation backends contributed by addins.
Whether one history step delivers its document events as a single batch.
A tempo change on the master track; uapmd_tempo_point_t.
changedTracks are the tracks that lost a clip.
One clip, by the identifiers the rest of this API takes.
A time-signature change on the master track; uapmd_time_signature_point_t.
Which parts of a captured track are applied when it is attached.
A track detached from the document. Unlike a clip, a track owns live plug-in instances, so both capturing and attaching one are asynchronous.
uapmd_app::TransportController. Owned by the AppModel.
The Emscripten-compiled uapmd-c-api module. Call initUapmdWasm to initialize before using any functions.
Borrows the timeline's own map: the handle is only valid until the project changes, so this is fetched fresh from TimelineFacade.masterTempoMap rather than cached.
Functions
A reader that yields silence, for clips with no source file.
A reader that yields silence, for clips with no source file.
A reader that yields silence, for clips with no source file.
A reader that yields silence, for clips with no source file.
A reader that yields silence, for clips with no source file.
A reader that yields silence, for clips with no source file.
Offers a file written into MEMFS to the user. Returns false when nothing was written there — a render that failed, say — so the caller can say so rather than trigger an empty download.
Extracts a .uapmdz archive into destDir (which must not already exist). Returns the path of the extracted .uapmd project file, or null on failure. Call removeExtractedArchive when the project has been loaded.
Installs remidy's event loop.
Initialize the uapmd JS module from an Emscripten factory function.
Initialize the uapmd Wasm module from an Emscripten factory Promise. Typically called once at app startup:
Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.
Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.
True when path is a packed project (.uapmdz) rather than a bare .uapmd.
Opens the browser's file picker through uapmd's Emscripten document provider, which creates a hidden <input type=file>, copies the chosen file into MEMFS and hands back a path the engine can open (DocumentProviderEmscripten.cpp:93).
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.
Saves the project the way uapmd-app does (MainWindow::handleSaveProject): ask the provider for a save handle, then hand it to the app model, which packs the project tree into a .uapmdz and writes it through the provider — a download, in a browser. Writing to a path cannot replace this: a saved project is a directory, so a single-file write would deliver only its manifest.
Remote scanning needs a launchable process; this platform has none.
Points remote plug-in scanning at a standalone scanner executable.
Remote scanning needs a launchable process; this platform has none.
Points remote plug-in scanning at a standalone scanner executable.
Remote scanning needs a launchable process; this platform has none.
Remote scanning needs a launchable process; this platform has none.
Drives pending picks; the provider completes them from its own tick.
Reports null on success, or the engine's message on failure.
The C callback takes uapmd_plugin_instance_result_t by value, which Emscripten passes as a pointer. Layout on wasm32: int32 id @0, char* name @4, char* err @8.
uapmd_plugin_state_result_t by value = a pointer. wasm32: i32 @0, bool @4, char* @8, char* @12.
uapmd_app_project_result_t by value = a pointer. wasm32: bool @0, char* @4.
Hands the first handle's address on, so the save can use it without copying.
The C callback takes uapmd_undo_result_t by value, i.e. as a pointer.