Package-level declarations

Types

Link copied to clipboard
data class AapUiHostDetails(val pluginPackageName: String, val pluginLocalName: String, val instanceId: Int)
Link copied to clipboard
data class AddinCommandInfo(val id: String, val title: String, val order: Int, val enabled: Boolean)

One command an addin contributed.

Link copied to clipboard
data class AddinInfo(val packageId: String, val addinId: String, val name: String, val path: String, val libraryPath: String, val builtIn: Boolean, val state: AddinState, val message: String)
Link copied to clipboard

Which call publishes which extension point, since they are split between the engine and the registries here:

Link copied to clipboard
Link copied to clipboard

uapmd_anchor_origin_t: which end of the anchor the offset is measured from.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Addressed through its engine: AudioWorkers has no C handle of its own.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

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.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
interface AppModel

Host side of uapmd_app::AppModel (tools/uapmd-app-model) — the façade uapmd-app itself renders against, wrapped by c-api/uapmd-c-app.h.

Link copied to clipboard
data class AppProjectResult(val success: Boolean, val error: String?)

Mirrors uapmd_app_project_result_t.

Link copied to clipboard

Mirrors remidy::AudioBusRole.

Link copied to clipboard
data class AudioDeviceInfo(val directions: AudioIoDirection, val id: Int, val name: String, val sampleRate: UInt, val channels: UInt)
Link copied to clipboard
Link copied to clipboard
data class AudioFileProperties(val numFrames: Long, val numChannels: UInt, val sampleRate: UInt)
Link copied to clipboard
Link copied to clipboard
data class AudioImportResult(val success: Boolean, val canceled: Boolean, val error: String?, val warnings: List<String>, val stems: List<AudioStemImport>)
Link copied to clipboard
interface AudioIODevice
Link copied to clipboard
Link copied to clipboard
data class AudioStemImport(val stemName: String, val filepath: String, val clipDisplayName: String)

One separated stem, ready to become a clip.

Link copied to clipboard
data class AudioWarpPointData(val clipPositionOffset: Double, val speedRatio: Double, val referenceType: WarpReferenceType = WarpReferenceType.Manual, val referenceClipId: String = "", val referenceMarkerId: String = "")
Link copied to clipboard
Link copied to clipboard
interface AudioWorkers

uapmd::AudioWorkers. A count of 0 processes tracks serially. configure and waitForWorkers are control-thread operations and may wait for outstanding workers.

Link copied to clipboard
object Augene2

The free functions of uapmd-augene2/uapmd-augene2.hpp.

Link copied to clipboard

uapmd_augene2::Integration: the Augene2 project service and everything its panel presents.

Link copied to clipboard
data class Augene2IntegrationSource(val path: String, val externalPath: String, val compile: Boolean)

uapmd_augene2::IntegrationSource: an MML resource of the project.

Link copied to clipboard
data class Augene2TrackMapping(val key: String, val trackIndex: Int)

uapmd_augene2::IntegrationTrackMapping: where one MML track's clips live.

Link copied to clipboard
data class BlocklistEntry(val id: String, val format: String, val pluginId: String, val reason: String)
Link copied to clipboard
data class CatalogEntry(val format: String, val pluginId: String, val displayName: String, val vendor: String = "", val productUrl: String = "", val bundlePath: String = "")
Link copied to clipboard
data class ClipAddress(val trackReferenceId: String, val clipReferenceId: String)

Stable document identity of one clip.

Link copied to clipboard
data class ClipAddResult(val clipId: Int, val sourceNodeId: Int, val success: Boolean, val error: String?)
Link copied to clipboard
data class ClipAudioEventsResult(val success: Boolean, val error: String?, val markers: List<ClipMarkerData>, val warps: List<AudioWarpPointData>)

Mirrors uapmd_clip_audio_events_result_t.

Link copied to clipboard

Commands scoped to one clip. Offer them wherever a clip is presented, asking appliesTo first: false hides the command for that clip entirely, while true with isEnabled false means show it greyed out.

Link copied to clipboard
data class ClipCommandTarget(val trackIndex: Int, val clipId: Int, val isMidiClip: Boolean = false, val isMasterTrack: Boolean = false)

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.

Link copied to clipboard
data class ClipData(val clipId: Int, val positionSamples: Long, val positionLegacyBeats: Double, val durationSamples: Long, val gain: Double, val muted: Boolean, val name: String, val filepath: String, val clipType: ClipType, val referenceId: String = "", val anchorReferenceId: String = "", val anchorOrigin: AnchorOrigin = AnchorOrigin.Start, val anchorOffsetSamples: Long = 0, val sourceOffsetSamples: Long = 0)
Link copied to clipboard
data class ClipEditorInfo(val id: String, val name: String)
Link copied to clipboard

Timeline clip editors contributed by addins.

Link copied to clipboard

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.

Link copied to clipboard
data class ClipMarkerData(val markerId: String, val clipPositionOffset: Double, val referenceType: WarpReferenceType = WarpReferenceType.Manual, val referenceClipId: String = "", val referenceMarkerId: String = "", val name: String = "")
Link copied to clipboard
Link copied to clipboard
interface CommandManager

The project's history: thread-affine and asynchronous. Its methods are called on the model thread; completions may arrive on any thread.

Link copied to clipboard

Application-wide commands contributed by addins.

Link copied to clipboard
data class ContentBounds(val hasContent: Boolean, val firstSample: Long, val lastSample: Long, val firstSeconds: Double, val lastSeconds: Double)
Link copied to clipboard
data class DeviceEntry(val id: Int, val label: String, val apiName: String, val statusMessage: String, val running: Boolean, val instantiating: Boolean, val hasError: Boolean)

One UMP device the model has instantiated.

Link copied to clipboard
Link copied to clipboard
data class DocumentFilter(val label: String, val mimeTypes: List<String>, val extensions: List<String>)

uapmd::DocumentFilter. Android and the web use mimeTypes; desktop uses extensions (*.wav).

Link copied to clipboard
data class DocumentHandle(val id: String, val displayName: String, val mimeType: String)

uapmd::DocumentHandle: an opaque reference to a user-selected document. Obtain one from a pick; never construct it.

Link copied to clipboard
data class DocumentIOResult(val success: Boolean, val error: String?)

uapmd::DocumentIOResult.

Link copied to clipboard
data class DocumentPickResult(val success: Boolean, val handles: List<DocumentHandle>, val error: String?)

uapmd::DocumentPickResult. Cancelled: success with no handles.

Link copied to clipboard

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.

Link copied to clipboard
data class EffectiveSignature(val startBeat: Double, val endBeat: Double, val numerator: Int, val denominator: Int)

One meter region of a TempoMap. endBeat is infinite for the last one.

Link copied to clipboard
data class FolderPickResult(val success: Boolean, val path: String, val documents: List<DocumentHandle>, val token: String, val displayName: String, val error: String?)

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).

Link copied to clipboard

Minimal format manager – exposes available plugin formats by name.

Link copied to clipboard
Link copied to clipboard

Cursor shapes in terms every toolkit has.

Link copied to clipboard
data class FramebufferFrameInfo(val width: Int, val height: Int, val strideBytes: Int, val format: FramebufferPixelFormat, val serial: Long)
Link copied to clipboard
data class FramebufferInput(val pointerX: Int = 0, val pointerY: Int = 0, val buttons: Int = 0, val modifiers: Int = 0, val wheel: Double = 0.0, val horizontalWheel: Double = 0.0, val hasFocus: Boolean = false, val visible: Boolean = true, val pointerOver: Boolean = false)

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.

Link copied to clipboard

Keys with no character of their own; everything typable arrives as a character.

Link copied to clipboard
data class FramebufferKeyEvent(val modifiers: Int = 0, val character: Int = 0, val key: FramebufferKey = FramebufferKey.NONE, val pressed: Boolean = true)

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.

Link copied to clipboard
data class FramebufferMenuItem(val label: String = "", val id: Int = 0, val disabled: Boolean = false, val checked: Boolean = false, val separator: Boolean = false, val children: List<FramebufferMenuItem> = emptyList())

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.

Link copied to clipboard
data class FramebufferSize(val width: Int, val height: Int)
Link copied to clipboard
interface FramebufferUi

A plugin editor that is a pixel buffer rather than a view.

Link copied to clipboard

Services a displayed plugin asks of whoever is showing it.

Link copied to clipboard
Link copied to clipboard
interface FunctionBlock
Link copied to clipboard
Link copied to clipboard
interface FunctionDevice

Marker for a MIDI 2.0 function device (no public C API beyond retrieval).

Link copied to clipboard
data class GraphAudioBus(val name: String, val role: AudioBusRole, val enabled: Boolean, val channelLayoutName: String, val channelCount: UInt)

One audio bus of a graph node — remidy::AudioBusConfiguration.

Link copied to clipboard
Link copied to clipboard
data class GraphConnection(val id: Long, val busType: GraphBusType, val source: GraphEndpoint, val target: GraphEndpoint)
Link copied to clipboard
data class GraphConnectionsResult(val success: Boolean, val error: String?, val connections: List<GraphConnection>)
Link copied to clipboard
data class GraphEndpoint(val type: GraphEndpointType, val nodeId: String, val instanceId: Int, val busIndex: UInt)

One end of a graph connection.

Link copied to clipboard
Link copied to clipboard
data class GraphNode(val nodeId: String, val nodeType: String, val displayName: String, val instanceId: Int, val bypassed: Boolean, val latencyInSamples: UInt, val tailLengthInSeconds: Double, val hasAudioBuses: Boolean, val hasEventInputs: Boolean, val hasEventOutputs: Boolean, val audioInputBuses: List<GraphAudioBus>, val audioOutputBuses: List<GraphAudioBus>, val mainInputBusIndex: Int, val mainOutputBusIndex: Int)

One node of a track graph: uapmd_graph::AudioGraphNode plus the remidy::PluginAudioBuses facade it exposes.

Link copied to clipboard
data class GraphNodesResult(val success: Boolean, val error: String?, val nodes: List<GraphNode>, val graphAudioInputBusCount: UInt, val graphAudioOutputBusCount: UInt, val graphEventInputBusCount: UInt, val graphEventOutputBusCount: UInt)
Link copied to clipboard
Link copied to clipboard
object JniBridge

JNI bridge object — every method corresponds to a C function in uapmd_jni.cpp. Handles are jlong (opaque C pointer cast to uintptr_t). Callback objects are plain Kotlin lambdas / SAM interfaces.

Link copied to clipboard
class JsAddinManager : AddinManager
Link copied to clipboard
class JsAppModel : AppModel
Link copied to clipboard
class JsAudioDeviceManager : AudioDeviceManager
Link copied to clipboard
class JsAudioFileReader : AudioFileReader
Link copied to clipboard
class JsAudioIODevice : AudioIODevice
Link copied to clipboard
class JsAudioWorkers : AudioWorkers

Addressed through its engine: AudioWorkers has no C handle of its own.

Link copied to clipboard
class JsAugene2Integration : Augene2Integration
Link copied to clipboard
class JsClipCommandRegistry : ClipCommandRegistry
Link copied to clipboard
class JsClipEditorRegistry : ClipEditorRegistry
Link copied to clipboard
class JsClipFragment : ClipFragment
Link copied to clipboard
class JsCommandManager : CommandManager
Link copied to clipboard
class JsCommandRegistry : CommandRegistry
Link copied to clipboard
class JsDeviceIODispatcher : DeviceIODispatcher
Link copied to clipboard
class JsDocumentProvider : DocumentProvider
Link copied to clipboard
class JsFormatManager : FormatManager
Link copied to clipboard
class JsFunctionBlock : FunctionBlock
Link copied to clipboard
class JsFunctionBlockManager : FunctionBlockManager
Link copied to clipboard
class JsFunctionDevice : FunctionDevice
Link copied to clipboard
object Jsfx

The free functions of uapmd-format-jsfx/uapmd-format-jsfx.hpp.

Link copied to clipboard

uapmd_jsfx::JsfxDuplicateListing: which JSFX entries a plugin list presents.

Link copied to clipboard
data class JsfxImportResult(val success: Boolean, val filesWritten: UInt, val destination: String, val error: String)

uapmd_jsfx::JsfxImportResult.

Link copied to clipboard

uapmd_jsfx::JsfxPluginFormat, the format AppModel.jsfxPluginFormat registered. Owned by the model.

Link copied to clipboard
data class JsfxRegisteredFolder(val token: String, val name: String)

uapmd_jsfx::JsfxRegisteredFolder.

Link copied to clipboard
class JsJsfxPluginFormat : JsfxPluginFormat
Link copied to clipboard
class JsJsRuntime : JsRuntime
Link copied to clipboard
class JsMcpServer : McpServer
Link copied to clipboard
class JsMidiIO : MidiIO
Link copied to clipboard
class JsMidiIODevice : MidiIODevice
Link copied to clipboard
class JsMidiRecorder : MidiRecorder
Link copied to clipboard
class JsPanelRegistry : PanelRegistry
Link copied to clipboard
class JsPianoRollSession : PianoRollSession
Link copied to clipboard
class JsPianoRollSnapshot : PianoRollSnapshot
Link copied to clipboard
class JsPluginGraph : PluginGraph
Link copied to clipboard
class JsPluginHost : PluginHost
Link copied to clipboard
class JsPluginInstance : PluginInstance
Link copied to clipboard
class JsPluginInstancing : PluginInstancing
Link copied to clipboard
class JsPluginNode : PluginNode
Link copied to clipboard
class JsProjectAddressBook : ProjectAddressBook
Link copied to clipboard
class JsProjectCommands : ProjectCommands
Link copied to clipboard
class JsRealtimeSequencer : RealtimeSequencer
Link copied to clipboard
data class JsResult(val success: Boolean, val json: String?, val error: String?)

What JsRuntime.evaluate produced: JSON on success, a message on failure.

Link copied to clipboard
Link copied to clipboard
class JsScanTool : ScanTool
Link copied to clipboard
class JsSequencerEngine : SequencerEngine
Link copied to clipboard
class JsSequencerTrack : SequencerTrack
Link copied to clipboard
class JsStemSeparatorRegistry : StemSeparatorRegistry
Link copied to clipboard
class JsTempoMap : TempoMap

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.

Link copied to clipboard
class JsTimelineFacade : TimelineFacade
Link copied to clipboard
class JsTimelineTrack : TimelineTrack
Link copied to clipboard
class JsTrackFragment : TrackFragment
Link copied to clipboard
class JsTransportController : TransportController
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Addressed through its engine: AudioWorkers has no C handle of its own.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

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.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
data class LatencyCompensationSettings(val implementationId: String = "default", val playbackCompensationMode: PlaybackCompensationMode = PlaybackCompensationMode.Compensated, val inputMonitoringPolicy: InputMonitoringPolicy = InputMonitoringPolicy.Auto, val monitoredTrackIndexes: List<Int> = emptyList(), val recordArmedTrackIndexes: List<Int> = emptyList(), val implementationProperties: Map<String, String> = emptyMap())
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
data class MidiAutomationLane(val clipId: ProjectObjectId, val noteId: ProjectObjectId? = null, val group: Int = 0, val channel: Int = 0, val status: Int = 176, val parameter: Int = 0)

MidiAutomationLaneAddress. status is the MIDI channel status (default 0xB0).

Link copied to clipboard
data class MidiAutomationSelectionRegion(val lane: MidiAutomationLane, val startTick: Long, val endTick: Long, val values: ClosedFloatingPointRange<Double>? = null) : SelectionRegion

MidiAutomationSelectionRegion: a half-open tick range on one automation lane. values is an inclusive normalized range, or null for the whole range.

Link copied to clipboard
interface MidiIO
Link copied to clipboard
interface MidiIODevice

Marker for a platform MIDI I/O device handle.

Link copied to clipboard
data class MidiNoteData(val startSeconds: Double, val durationSeconds: Double, val note: Int, val velocity: Float)
Link copied to clipboard
data class MidiNoteSelectionRegion(val clipId: ProjectObjectId, val startTick: Long, val endTick: Long, val pitches: IntRange? = null, val group: Int? = null, val channel: Int? = null) : SelectionRegion

MidiNoteSelectionRegion: a half-open tick range of a clip's content. pitches includes both ends. A null constraint is absent.

Link copied to clipboard
data class MidiPortInfo(val id: String, val displayName: String)
Link copied to clipboard
interface MidiRecorder

uapmd::MidiRecorder — captures live MIDI input into a selected clip.

Link copied to clipboard
data class MidiTempoChange(val tickPosition: ULong, val bpm: Double)

A tempo change inside a MIDI clip, positioned in the clip's own ticks.

Link copied to clipboard
data class MidiTimeSignatureChange(val tickPosition: ULong, val numerator: UByte, val denominator: UByte, val clocksPerClick: UByte, val thirtySecondsPerQuarter: UByte)

A meter change inside a MIDI clip, positioned in the clip's own ticks.

Link copied to clipboard

Who is making a change. User and Remote edits enter the undo history; Load, UndoRedo and Internal changes are applied without being recorded.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Addressed through its engine: AudioWorkers has no C handle of its own.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

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.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Whether an object being attached to the document keeps the identifiers it already carries (Restore, which is what undoing a delete requires) or is given fresh ones (Mint, which is what paste and duplicate require).

Link copied to clipboard
data class OfflineRenderProgress(val progress: Double, val renderedSeconds: Double, val totalSeconds: Double, val renderedFrames: Long, val totalFrames: Long)
Link copied to clipboard
data class OfflineRenderResult(val success: Boolean, val canceled: Boolean, val renderedSeconds: Double, val errorMessage: String?)
Link copied to clipboard
data class OfflineRenderSettings(val outputPath: String, val startSeconds: Double, val endSeconds: Double? = null, val useContentFallback: Boolean = true, val contentBoundsValid: Boolean = false, val contentStartSeconds: Double = 0.0, val contentEndSeconds: Double = 0.0, val tailSeconds: Double = 0.0, val enableSilenceStop: Boolean = false, val silenceDurationSeconds: Double = 3.0, val silenceThresholdDb: Double = -60.0, val sampleRate: Int = 44100, val bufferSize: UInt, val outputChannels: UInt, val umpBufferSize: UInt)
Link copied to clipboard
data class OpResult(val success: Boolean, val error: String?)

Mirrors uapmd_op_result_t.

Link copied to clipboard

uapmd_addin::PanelRegistry: model-thread services with an optional panel.

Link copied to clipboard
data class ParameterMetadata(val index: UInt, val stableId: String, val name: String, val path: String, val defaultPlainValue: Double, val minPlainValue: Double, val maxPlainValue: Double, val automatable: Boolean, val hidden: Boolean, val discrete: Boolean, val namedValues: List<ParameterNamedValue>)
Link copied to clipboard
data class ParameterMetadataSnapshot(val revision: Long, val parameters: List<ParameterMetadata>)

Complete owned metadata; revision is monotonic within this subscription.

Link copied to clipboard
data class ParameterNamedValue(val value: Double, val name: String)
Link copied to clipboard

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.

Link copied to clipboard

The clipboard actions a session performs on its selection.

Link copied to clipboard
data class PianoRollNote(val startSeconds: Double, val durationSeconds: Double, val velocity: Float, val note: Int, val channel: Int, val deleted: Boolean, val editId: Long, val umpGroup: Int, val releaseVelocity: Int, val attributeType: Int, val attributeValue: Int, val automationEventCount: Int)

One note as a session holds it.

Link copied to clipboard

A live editing session over one MIDI clip. Owned by the model — obtain one with AppModel.openPianoRollSession and release it with AppModel.closePianoRollSession.

Link copied to clipboard

A MIDI clip parsed into notes, ready to load into a PianoRollSession.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
interface PluginInstance
Link copied to clipboard
data class PluginInstanceConfig(val apiName: String = "default", val deviceName: String = "", val manufacturer: String = "UAPMD Project", val version: String = "0.1", val stateFile: String = "")

Mirrors uapmd_plugin_instance_config_t; empty strings take the C defaults.

Link copied to clipboard
data class PluginInstanceResult(val instanceId: Int, val pluginName: String, val error: String?)

Mirrors uapmd_plugin_instance_result_t.

Link copied to clipboard

Lifecycle manager for a single plugin's instantiation process. Created per (format, pluginId) pair via createPluginInstancing.

Link copied to clipboard
interface PluginNode
Link copied to clipboard
data class PluginStateResult(val instanceId: Int, val success: Boolean, val error: String, val filepath: String)

filepath is the path actually used for the save or load.

Link copied to clipboard
data class PluginUiCapabilities(val hasUiSupport: Boolean, val supportsEmbeddedPresentations: Boolean = hasUiSupport, val supportsFloatingPresentations: Boolean = hasUiSupport, val supportsMultiplePresentations: Boolean = false)
Link copied to clipboard
sealed interface PluginUiHost
Link copied to clipboard
Link copied to clipboard
data class PluginUiPresentationRequest(val host: PluginUiHost = PluginUiHost.FloatingWindow, val role: PluginUiPresentationRole = PluginUiPresentationRole.FULL, val resizeHandler: (UInt, UInt) -> Boolean? = null)
Link copied to clipboard

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.

Link copied to clipboard
data class PresetMetadata(val bank: UByte, val index: UInt, val stableId: String, val name: String, val path: String)
Link copied to clipboard

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.

Link copied to clipboard
interface ProjectCommands

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.

Link copied to clipboard

Object ids are the document's stable ProjectObjectId strings (tracks, clips, notes, ...).

Link copied to clipboard
data class ProjectResult(val success: Boolean, val error: String?)
Link copied to clipboard
data class ProjectSelection(val objects: List<ProjectObjectId> = emptyList(), val regions: List<SelectionRegion> = emptyList())

ProjectSelection. The first object is primary.

Link copied to clipboard

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.

Link copied to clipboard
data class ProjectSelectionProjection(val clipIds: List<ProjectObjectId>, val trackIds: List<ProjectObjectId>, val timeRange: ClosedFloatingPointRange<Double>?)

ProjectSelectionProjection: a selection as consumers thinking in clips, tracks and time see it.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
data class RenderToFileSettings(val outputPath: String, val startSeconds: Double = 0.0, val endSeconds: Double = 0.0, val hasEndSeconds: Boolean = false, val useContentFallback: Boolean = true, val contentBoundsValid: Boolean = false, val contentStartSeconds: Double = 0.0, val contentEndSeconds: Double = 0.0, val tailSeconds: Double = 0.0, val enableSilenceStop: Boolean = false, val silenceDurationSeconds: Double = 2.0, val silenceThresholdDb: Double = -60.0)

What to render and when to stop.

Link copied to clipboard
data class RenderToFileStatus(val running: Boolean, val completed: Boolean, val success: Boolean, val progress: Double, val renderedSeconds: Double, val message: String, val outputPath: String)
Link copied to clipboard
Link copied to clipboard
interface ScanObserver
Link copied to clipboard
Link copied to clipboard

Identifies one selection context. Positive for a real context.

Link copied to clipboard
sealed interface SelectionRegion
Link copied to clipboard
data class SelectionUpdateResult(val success: Boolean, val error: String = "")

SelectionUpdateResult.

Link copied to clipboard
interface SequencerEngine
Link copied to clipboard
interface SequencerTrack
Link copied to clipboard
data class SlowScanProgress(val running: Boolean = false, val processedBundles: UInt, val totalBundles: UInt, val currentBundle: String = "")

Progress of a slow plug-in scan, mirroring AppModel::SlowScanProgressState.

Link copied to clipboard
Link copied to clipboard
data class StemSeparatorInfo(val id: String, val name: String, val modelFileLabel: String, val modelFileExtensions: List<String>)

A stem separation backend contributed by an addin.

Link copied to clipboard

Stem separation backends contributed by addins.

Link copied to clipboard

Whether one history step delivers its document events as a single batch.

Link copied to clipboard
interface TempoMap

A project's tempo curve: conversion between real-world seconds and quarter-note beats, plus the time signature in force over each beat range. "Beat" always means a quarter note, matching BPM and MIDI tick-resolution conventions.

Link copied to clipboard
data class TempoPoint(val timeSeconds: Double, val tickPosition: Long, val bpm: Double)

A tempo change on the master track; uapmd_tempo_point_t.

Link copied to clipboard
data class TimelineClipDeleteResult(val success: Boolean, val changedTracks: List<Int>, val error: String?)

changedTracks are the tracks that lost a clip.

Link copied to clipboard
data class TimelineClipTarget(val trackIndex: Int, val clipId: Int)

One clip, by the identifiers the rest of this API takes.

Link copied to clipboard
data class TimelineContentBounds(val hasContent: Boolean, val startSeconds: Double, val endSeconds: Double, val durationSeconds: Double)
Link copied to clipboard
interface TimelineFacade
Link copied to clipboard
data class TimelinePasteResult(val success: Boolean, val pasted: List<TimelineClipTarget>, val error: String?)
Link copied to clipboard
data class TimelinePosition(val samples: Long, val legacyBeats: Double)
Link copied to clipboard
data class TimelineSelectionRegion(val startSeconds: Double, val endSeconds: Double, val trackIds: List<ProjectObjectId>? = null) : SelectionRegion

TimelineSelectionRegion: a half-open range of seconds across tracks. trackIds null means all tracks; an empty list explicitly means none.

Link copied to clipboard
data class TimelineState(val playheadPosition: TimelinePosition, val isPlaying: Boolean, val loopEnabled: Boolean, val loopStart: TimelinePosition, val loopEnd: TimelinePosition, val tempo: Double, val timeSignatureNumerator: Int, val timeSignatureDenominator: Int, val sampleRate: Int)
Link copied to clipboard
interface TimelineTrack
Link copied to clipboard
data class TimeReference(val type: TimeReferenceType = TimeReferenceType.ContainerStart, val referenceId: String = "", val offset: Double = 0.0)
Link copied to clipboard
Link copied to clipboard
data class TimeSignaturePoint(val timeSeconds: Double, val tickPosition: Long, val numerator: Int, val denominator: Int)

A time-signature change on the master track; uapmd_time_signature_point_t.

Link copied to clipboard
data class TrackAttachOptions(val idPolicy: ObjectIdPolicy = ObjectIdPolicy.Mint, val insertionIndex: Int = -1, val includePlugins: Boolean = true, val includePluginState: Boolean = true, val includeClips: Boolean = true)

Which parts of a captured track are applied when it is attached.

Link copied to clipboard

A track detached from the document. Unlike a clip, a track owns live plug-in instances, so both capturing and attaching one are asynchronous.

Link copied to clipboard
data class TrackPluginFragment(val nodeId: String, val pluginId: String, val format: String, val displayName: String, val groupIndex: Int, val state: ByteArray)
Link copied to clipboard

uapmd_app::TransportController. Owned by the AppModel.

Link copied to clipboard
external interface UapmdCApiModule : JsAny

The Emscripten-compiled uapmd-c-api module. Call initUapmdWasm to initialize before using any functions.

Link copied to clipboard
data class UiSize(val width: UInt, val height: UInt)
Link copied to clipboard
data class UmpEvent(val tick: Long, val words: UIntArray)

One UMP event in a MIDI clip: a tick plus the 1-4 words of the message.

Link copied to clipboard
data class UmpEventsResult(val success: Boolean, val error: String?, val events: List<UmpEvent>, val tickResolution: UInt, val clipTempo: Double = 0.0)

Mirrors uapmd_ump_events_result_t.

Link copied to clipboard
interface UmpInputMapper
Link copied to clipboard
interface UmpOutputMapper
Link copied to clipboard
data class UndoResult(val status: UndoStatus, val error: String?)
Link copied to clipboard
data class UndoState(val busy: Boolean, val compoundOpen: Boolean, val gestureOpen: Boolean, val canUndo: Boolean, val canRedo: Boolean, val dirty: Boolean, val compoundDescription: String, val undoDescription: String, val redoDescription: String, val historySizeInBytes: Long, val maximumHistorySizeInBytes: Long, val currentStateId: Long, val savedStateId: Long)
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
class WasmJsAddinManager : AddinManager
Link copied to clipboard
class WasmJsAppModel : AppModel
Link copied to clipboard
class WasmJsAudioDeviceManager : AudioDeviceManager
Link copied to clipboard
class WasmJsAudioFileReader : AudioFileReader
Link copied to clipboard
class WasmJsAudioIODevice : AudioIODevice
Link copied to clipboard
class WasmJsAudioWorkers : AudioWorkers

Addressed through its engine: AudioWorkers has no C handle of its own.

Link copied to clipboard
class WasmJsAugene2Integration : Augene2Integration
Link copied to clipboard
class WasmJsClipCommandRegistry : ClipCommandRegistry
Link copied to clipboard
class WasmJsClipEditorRegistry : ClipEditorRegistry
Link copied to clipboard
class WasmJsClipFragment : ClipFragment
Link copied to clipboard
class WasmJsCommandManager : CommandManager
Link copied to clipboard
class WasmJsCommandRegistry : CommandRegistry
Link copied to clipboard
class WasmJsDeviceIODispatcher : DeviceIODispatcher
Link copied to clipboard
class WasmJsDocumentProvider : DocumentProvider
Link copied to clipboard
class WasmJsFormatManager : FormatManager
Link copied to clipboard
class WasmJsFunctionBlock : FunctionBlock
Link copied to clipboard
class WasmJsFunctionBlockManager : FunctionBlockManager
Link copied to clipboard
class WasmJsFunctionDevice : FunctionDevice
Link copied to clipboard
class WasmJsJsfxPluginFormat : JsfxPluginFormat
Link copied to clipboard
class WasmJsJsRuntime : JsRuntime
Link copied to clipboard
class WasmJsMcpServer : McpServer
Link copied to clipboard
class WasmJsMidiIO : MidiIO
Link copied to clipboard
class WasmJsMidiIODevice : MidiIODevice
Link copied to clipboard
class WasmJsMidiRecorder : MidiRecorder
Link copied to clipboard
class WasmJsPanelRegistry : PanelRegistry
Link copied to clipboard
class WasmJsPianoRollSession : PianoRollSession
Link copied to clipboard
class WasmJsPianoRollSnapshot : PianoRollSnapshot
Link copied to clipboard
class WasmJsPluginGraph : PluginGraph
Link copied to clipboard
class WasmJsPluginHost : PluginHost
Link copied to clipboard
class WasmJsPluginInstance : PluginInstance
Link copied to clipboard
class WasmJsPluginInstancing : PluginInstancing
Link copied to clipboard
class WasmJsPluginNode : PluginNode
Link copied to clipboard
class WasmJsProjectAddressBook : ProjectAddressBook
Link copied to clipboard
class WasmJsProjectCommands : ProjectCommands
Link copied to clipboard
class WasmJsRealtimeSequencer : RealtimeSequencer
Link copied to clipboard
class WasmJsScanTool : ScanTool
Link copied to clipboard
class WasmJsSequencerEngine : SequencerEngine
Link copied to clipboard
class WasmJsSequencerTrack : SequencerTrack
Link copied to clipboard
class WasmJsStemSeparatorRegistry : StemSeparatorRegistry
Link copied to clipboard
class WasmJsTempoMap : TempoMap

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.

Link copied to clipboard
class WasmJsTimelineFacade : TimelineFacade
Link copied to clipboard
class WasmJsTimelineTrack : TimelineTrack
Link copied to clipboard
class WasmJsTrackFragment : TrackFragment
Link copied to clipboard
class WasmJsTransportController : TransportController

Properties

Link copied to clipboard

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

Link copied to clipboard
fun SequencerEngine.addParameterMetadataChangedListener(instanceId: Int, dispatch: (() -> Unit) -> Unit = { it() }, replayCurrent: Boolean = true, onError: (Throwable) -> Unit = { println("Parameter metadata listener failed: $it") }, listener: (ParameterMetadataSnapshot) -> Unit): AutoCloseable

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.

Link copied to clipboard
actual fun cleanupAppModel()
expect fun cleanupAppModel()
actual fun cleanupAppModel()
actual fun cleanupAppModel()
actual fun cleanupAppModel()
actual fun cleanupAppModel()
Link copied to clipboard
actual fun createAddinManager(): AddinManager
actual fun createAddinManager(): AddinManager
Link copied to clipboard
actual fun createAudioFileReader(filepath: String): AudioFileReader
actual fun createAudioFileReader(filepath: String): AudioFileReader
Link copied to clipboard
actual fun createFormatManager(): FormatManager
actual fun createFormatManager(): FormatManager
Link copied to clipboard
actual fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
expect fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
actual fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
actual fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
actual fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
actual fun createPluginGraph(eventBufferSizeInBytes: Long): PluginGraph
Link copied to clipboard
actual fun createPluginHost(): PluginHost
actual fun createPluginHost(): PluginHost
Link copied to clipboard
actual fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
expect fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
actual fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
actual fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
actual fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
actual fun createPluginInstancing(scanTool: ScanTool, format: String, pluginId: String): PluginInstancing
Link copied to clipboard
actual fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
expect fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
actual fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
actual fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
actual fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
actual fun createRealtimeSequencer(bufferSize: UInt, umpBufferSize: UInt, sampleRate: Int, dispatcher: DeviceIODispatcher): RealtimeSequencer
Link copied to clipboard
Link copied to clipboard
actual fun createScanTool(): ScanTool
expect fun createScanTool(): ScanTool
actual fun createScanTool(): ScanTool
actual fun createScanTool(): ScanTool
actual fun createScanTool(): ScanTool
actual fun createScanTool(): ScanTool
Link copied to clipboard
actual fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
expect fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
actual fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
actual fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
actual fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
actual fun createSequencerEngine(sampleRate: Int, audioBufferSize: UInt, umpBufferSize: UInt): SequencerEngine
Link copied to clipboard
actual fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

expect fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

actual fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

actual fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

actual fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

actual fun createSilentAudioFileReader(numFrames: Long, numChannels: Int, sampleRate: Int): AudioFileReader

A reader that yields silence, for clips with no source file.

Link copied to clipboard
Link copied to clipboard

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.

Link copied to clipboard
fun extractProjectArchive(archivePath: String, destDir: String): String?

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.

Link copied to clipboard
actual fun getAppModel(): AppModel
expect fun getAppModel(): AppModel
actual fun getAppModel(): AppModel
actual fun getAppModel(): AppModel
actual fun getAppModel(): AppModel
actual fun getAppModel(): AppModel
Link copied to clipboard
expect fun getAudioDeviceManager(driverName: String = ""): AudioDeviceManager
actual fun getAudioDeviceManager(driverName: String): AudioDeviceManager
actual fun getAudioDeviceManager(driverName: String): AudioDeviceManager
Link copied to clipboard
Link copied to clipboard
actual fun getMidiIODevice(driverName: String): MidiIODevice
expect fun getMidiIODevice(driverName: String = ""): MidiIODevice
actual fun getMidiIODevice(driverName: String): MidiIODevice
actual fun getMidiIODevice(driverName: String): MidiIODevice
actual fun getMidiIODevice(driverName: String): MidiIODevice
actual fun getMidiIODevice(driverName: String): MidiIODevice
Link copied to clipboard
Link copied to clipboard

Installs remidy's event loop.

Link copied to clipboard
suspend fun initUapmdJs(factory: dynamic)

Initialize the uapmd JS module from an Emscripten factory function.

Link copied to clipboard
suspend fun initUapmdWasm(factory: JsAny, wasmUrl: String = "uapmd-c-api.wasm")

Initialize the uapmd Wasm module from an Emscripten factory Promise. Typically called once at app startup:

Link copied to clipboard
actual fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

expect fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

actual fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

actual fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

actual fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

actual fun instantiateAppModel()

Creates the process-wide AppModel. Install an event loop first (see the note on AppModel). Calling it twice replaces the previous instance.

Link copied to clipboard

True when path is a packed project (.uapmdz) rather than a bare .uapmd.

Link copied to clipboard

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.

Link copied to clipboard
fun pickDocumentToOpen(app: AppModel, label: String, extensions: List<String>, callback: (String?) -> Unit)

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).

Link copied to clipboard

Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.

Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.

actual fun prepareProjectLoad(filePath: String): PreparedProject

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.

actual fun prepareProjectLoad(filePath: String): PreparedProject

Unpacks a .uapmdz archive (or passes a .uapmd through) before loading.

Link copied to clipboard

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).

Link copied to clipboard
Link copied to clipboard
fun saveProjectAsDocument(app: AppModel, defaultName: String, onDone: (String?) -> Unit)

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.

Link copied to clipboard

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.

Link copied to clipboard

Drives pending picks; the provider completes them from its own tick.

Link copied to clipboard
fun uapmdDispatchAddPlugin(cbId: Int, instanceId: Int, trackIndex: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchCreateInstance(cbId: Int, instanceId: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchDocumentPath(cbId: Int, resultPtr: Int, pathPtr: Int)
Link copied to clipboard
fun uapmdDispatchDocumentPick(cbId: Int, resultPtr: Int)
Link copied to clipboard
fun uapmdDispatchDocumentPickResult(cbId: Int, resultPtr: Int)

The C callback takes uapmd_document_pick_result_t by value, i.e. as a pointer.

Link copied to clipboard
fun uapmdDispatchDocumentRead(cbId: Int, resultPtr: Int, dataPtr: Int, size: Int)
Link copied to clipboard
fun uapmdDispatchDocumentWrite(cbId: Int, resultPtr: Int)

Reports null on success, or the engine's message on failure.

Link copied to clipboard
fun uapmdDispatchErrorOnly(cbId: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchEventOutput(cbId: Int, instanceId: Int, dataPtr: Int, size: Int)
Link copied to clipboard
fun uapmdDispatchFolderPick(cbId: Int, resultPtr: Int)
Link copied to clipboard
fun uapmdDispatchImportMidiTracks(cbId: Int, success: Int, errorPtr: Int, importedTrackCount: Int)
Link copied to clipboard
fun uapmdDispatchImportProgress(cbId: Int, progress: Float, messagePtr: Int, userData: Int): Int
Link copied to clipboard
fun uapmdDispatchInstanceCreated(cbId: Int, resultPtr: Int)

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.

Link copied to clipboard
fun uapmdDispatchJsfxFolderSync(cbId: Int, filesWritten: Int, errorPtr: Int)
Link copied to clipboard

Returns the module source as a wasm pointer, or 0 for "not found".

Link copied to clipboard
fun uapmdDispatchLoadState(cbId: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchMakeAlive(cbId: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchMidiInput(cbId: Int, messagesPtr: Int, count: Int, timestamp: Double)
Link copied to clipboard
fun uapmdDispatchParameterUpdate(cbId: Int, parameterIndex: Int, value: Double)
Link copied to clipboard
fun uapmdDispatchPluginState(cbId: Int, resultPtr: Int)

uapmd_plugin_state_result_t by value = a pointer. wasm32: i32 @0, bool @4, char* @8, char* @12.

Link copied to clipboard
fun uapmdDispatchProjectLoad(cbId: Int, success: Int, errorPtr: Int, userData: Int)

uapmd_app_project_result_t by value = a pointer. wasm32: bool @0, char* @4.

Link copied to clipboard
fun uapmdDispatchProjectSave(cbId: Int, resultPtr: Int)
Link copied to clipboard
Link copied to clipboard
fun uapmdDispatchRenderProgress(cbId: Int, progress: Double, renderedSec: Double, totalSec: Double, renderedFrames: Double, totalFrames: Double)
Link copied to clipboard
fun uapmdDispatchRequestState(cbId: Int, dataPtr: Int, size: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchSavePick(cbId: Int, resultPtr: Int)

Hands the first handle's address on, so the save can use it without copying.

Link copied to clipboard
Link copied to clipboard
fun uapmdDispatchScanBundleStart(cbId: Int, pathPtr: Int)
Link copied to clipboard
Link copied to clipboard
fun uapmdDispatchScanError(cbId: Int, msgPtr: Int)
Link copied to clipboard
Link copied to clipboard
fun uapmdDispatchSelectionActiveContextChanged(cbId: Int, previous: String, current: String, userData: Int)
Link copied to clipboard
fun uapmdDispatchSelectionChanged(cbId: Int, context: String, previous: Int, current: Int, userData: Int)
Link copied to clipboard
fun uapmdDispatchSelectionContextRemoved(cbId: Int, context: String, userData: Int)
Link copied to clipboard
Link copied to clipboard
fun uapmdDispatchTrackFragment(cbId: Int, fragmentPtr: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchTrackMutation(cbId: Int, trackIndex: Int, errorPtr: Int)
Link copied to clipboard
fun uapmdDispatchUndoCompletion(cbId: Int, resultPtr: Int)

The C callback takes uapmd_undo_result_t by value, i.e. as a pointer.