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.
Addressed through its engine: AudioWorkers has no C handle of its own.
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.
uapmd::AudioWorkers. A count of 0 processes tracks serially. configure and waitForWorkers are control-thread operations and may wait for outstanding workers.
uapmd_augene2::Integration: the Augene2 project service and everything its panel presents.
uapmd_augene2::IntegrationSource: an MML resource of the project.
uapmd_augene2::IntegrationTrackMapping: where one MML track's clips live.
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.
uapmd::DocumentHandle: an opaque reference to a user-selected document. Obtain one from a pick; never construct it.
uapmd::DocumentIOResult.
uapmd::DocumentPickResult. Cancelled: success with no handles.
uapmd::IDocumentProvider. Picks complete from tick, so a host ticks the provider on every UI update, as uapmd-app does. Callbacks are dispatched on the calling thread or the platform's main thread.
uapmd::FolderPickResult. On success exactly one of path (desktop) and documents (Android, iOS, web) is populated; both empty means the user cancelled. Each document's display name is its path relative to the folder. token names the folder again for DocumentProvider.listFolderDocuments, and is empty where a folder cannot be returned to (the web).
Minimal format manager – exposes available plugin formats by name.
Bits of FramebufferInput.buttons.
Cursor shapes in terms every toolkit has.
The pointer state as it is now, plus what else the plugin should know. Keys travel separately because a pointer only has a current position, while presses must not be dropped.
Keys with no character of their own; everything typable arrives as a character.
One key press or release. Either character carries what was typed, as a Unicode code point, or key names a key that has no code point — never both.
One entry of a menu the plugin asked for. The plugin's format builds the menu, so a host never has to know how that format spells one, nor how it numbers ids.
Bits of FramebufferInput.modifiers and FramebufferKeyEvent.modifiers.
A plugin editor that is a pixel buffer rather than a view.
Services a displayed plugin asks of whoever is showing it.
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.
Addressed through its engine: AudioWorkers has no C handle of its own.
uapmd_jsfx::JsfxDuplicateListing: which JSFX entries a plugin list presents.
uapmd_jsfx::JsfxImportResult.
uapmd_jsfx::JsfxPluginFormat, the format AppModel.jsfxPluginFormat registered. Owned by the model.
uapmd_jsfx::JsfxRegisteredFolder.
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.
Addressed through its engine: AudioWorkers has no C handle of its own.
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.
MidiAutomationLaneAddress. status is the MIDI channel status (default 0xB0).
MidiAutomationSelectionRegion: a half-open tick range on one automation lane. values is an inclusive normalized range, or null for the whole range.
Marker for a platform MIDI I/O device handle.
MidiNoteSelectionRegion: a half-open tick range of a clip's content. pitches includes both ends. A null constraint is absent.
uapmd::MidiRecorder — captures live MIDI input into a selected clip.
A tempo change inside a MIDI clip, positioned in the clip's own ticks.
Addressed through its engine: AudioWorkers has no C handle of its own.
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.
uapmd_addin::PanelRegistry: model-thread services with an optional panel.
Complete owned metadata; revision is monotonic within this subscription.
Listener of AudioGraphNode::ParameterUpdateEvent (EventBase<int32_t, double>). A primitive interface rather than a function type, so that a notification on a realtime thread does not box its arguments.
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.
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 authored track and clip indexes of the timeline. 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.
Object ids are the document's stable ProjectObjectId strings (tracks, clips, notes, ...).
ProjectSelection. The first object is primary.
ProjectSelectionListener. Notifications arrive synchronously on the model thread, except while a document batch is open or from inside another notification, when they are delivered afterwards.
ProjectSelectionProjection: a selection as consumers thinking in clips, tracks and time see it.
What to render and when to stop.
Identifies one selection context. Positive for a real context.
SelectionUpdateResult.
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.
TimelineSelectionRegion: a half-open range of seconds across tracks. trackIds null means all tracks; an empty list explicitly means none.
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.
Addressed through its engine: AudioWorkers has no C handle of its own.
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.
Properties
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Where uapmd keeps the plugin list cache, the blocklist and the search path settings. Android and iOS must set it before anything that writes exists; elsewhere it is worked out already. An empty path means nothing persists.
Functions
Snapshot/replay convenience over the existing native graph metadata event. Metadata is copied on the callback thread, before dispatching to the UI. No periodic reads. The dispatcher defaults to the native control thread; UI callers should supply their dispatcher. Close subscriptions before destroying the engine.
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.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
uapmd::midiApiSupportsDynamicUmpEndpoints(): whether virtual MIDI 2.0 devices can be created through apiName ("default" or a libremidi API name). Always false on Android.
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.
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
uapmd_app::registerVirtualMidiDevicesAddin(): makes the built-in Virtual MIDI Devices addin known to addin managers initialized afterwards. The addin also needs the model published (AddinManager.registerAppModel).
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.
The C callback takes uapmd_document_pick_result_t by value, i.e. as a pointer.
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.
Returns the module source as a wasm pointer, or 0 for "not found".
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.