AndroidAppModel

Properties

Link copied to clipboard
open override var autoBufferSizeEnabled: Boolean
Link copied to clipboard
open override val blocklist: List<BlocklistEntry>

AppModel's own blocklist — the list the Plugin Selector shows. A standalone ScanTool keeps a separate one. BlocklistEntry.timestamp in uapmd has no counterpart in uapmd_blocklist_entry_t, so it is not carried across.

Link copied to clipboard
open override val historyState: UndoState

Also reports busy while an asynchronous plug-in mutation is still capturing state, so shortcuts cannot race the capture.

Link copied to clipboard
open override val isAudioEngineEnabled: Boolean

Turning this off is not a plain stopAudio(): the model stops the transport, mutes the output, lets release/reverb tails drain inaudibly, then deactivates plugins on the main thread and resets processing state, so a restart cannot resume stale voices.

Link copied to clipboard
open override val isScanning: Boolean
Link copied to clipboard
open override val lastPluginScanError: String?

The last scanning error, or null.

Link copied to clipboard
open override val masterTempoPoints: List<TempoPoint>
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
open override val sampleRate: Int
Link copied to clipboard
open override val sequencer: RealtimeSequencer

Owned by the model; do not close.

Link copied to clipboard

Progress of the slow scan. isScanning alone cannot tell a long scan from a stuck one, which is why uapmd-app's selector shows these.

Link copied to clipboard
open override val timelineTrackCount: UInt
Link copied to clipboard
open override val trackCount: UInt
Link copied to clipboard
open override val transport: TransportController

Functions

Link copied to clipboard
open override fun addTrack(callback: (Int, String?) -> Unit)

Asynchronous since uapmd 0.5.6: track mutations are undo engine operations.

Link copied to clipboard
open override fun addUmpEventToClip(trackIndex: Int, clipId: Int, tick: Long, words: UIntArray): Boolean
Link copied to clipboard
open override fun cancelPluginScanning()
Link copied to clipboard
open override fun clearPluginBlocklist()
Link copied to clipboard
open override fun connectTrackGraph(trackIndex: Int, connection: GraphConnection): OpResult
Link copied to clipboard
open override fun createEmptyMidiClip(trackIndex: Int, positionSamples: Long, tickResolution: UInt, bpm: Double = 120.0): ClipAddResult

Creates an empty MIDI 2.0 clip; tickResolution is ticks per quarter.

Link copied to clipboard
open override fun createPluginInstance(format: String, pluginId: String, trackIndex: Int, config: PluginInstanceConfig = PluginInstanceConfig(), callback: (PluginInstanceResult) -> Unit)

Instantiates pluginId and attaches it to trackIndex; a negative index creates a new track. The callback runs once, on the thread that finishes instantiation.

Link copied to clipboard
open override fun disableUmpDevice(instanceId: Int)
Link copied to clipboard
open override fun disconnectTrackGraphConnection(trackIndex: Int, connectionId: Long): OpResult
Link copied to clipboard
open override fun enableUmpDevice(instanceId: Int, deviceName: String)

Registers the instance as a virtual MIDI 2.0 device where the platform supports it.

Link copied to clipboard
open override fun ensureTrackUsesEditorGraph(trackIndex: Int): Boolean

Switches the track from the simple linear chain to the editable graph.

Link copied to clipboard
open override fun generateScanReport(): String
Link copied to clipboard
open override fun getClipAudioEvents(trackIndex: Int, clipId: Int): ClipAudioEventsResult

Reading counterpart to ProjectCommands.setClipMarkers/setClipAudioWarps.

Link copied to clipboard
open override fun getInstanceGroup(instanceId: Int): UByte
Link copied to clipboard
open override fun getMidiClipUmpEvents(trackIndex: Int, clipId: Int): UmpEventsResult
Link copied to clipboard
open override fun getTimelineState(): TimelineState?
Link copied to clipboard
open override fun getTimelineTrack(index: UInt): TimelineTrack
Link copied to clipboard
open override fun getTrackGraphConnections(trackIndex: Int): GraphConnectionsResult
Link copied to clipboard
open override fun getTrackGraphNodes(trackIndex: Int): GraphNodesResult
Link copied to clipboard
open override fun hidePluginUi(instanceId: Int)
Link copied to clipboard
open override fun importMidiTracksFromFile(filepath: String, callback: (Boolean, String?, Int) -> Unit)

Imports a possibly multi-track SMF, one new track per SMF track. callback receives success, an error when it failed, and how many tracks were created.

Link copied to clipboard
open override fun loadProject(filePath: String): AppProjectResult
Link copied to clipboard

Android's document-picker path: resolves a content:// handle token.

Link copied to clipboard
open override fun notifyPersistentStorageReady()
Link copied to clipboard
open override fun notifyUiReady()

Startup lifecycle; uapmd-app calls both once the UI exists.

Link copied to clipboard
open override fun performPluginScanning(forceRescan: Boolean = false, mode: ScanMode = ScanMode.InProcess, remoteTimeoutSeconds: Double = 20.0, requireFastScanning: Boolean = false)

Runs asynchronously; watch isScanning. ScanMode.Remote launches a separate scanner process on desktop and is unavailable on WebAssembly.

Link copied to clipboard
open override fun redo(callback: (String?) -> Unit? = null)
Link copied to clipboard
open override fun refreshMasterTempoMap(): Double

Master-track tempo map. getTimelineState().tempo is a single value and cannot describe a project whose tempo changes; a beats view needs these. Rebuild once with refreshMasterTempoMap, then read the lists — they stay valid until the next refresh.

Link copied to clipboard
open override fun removeAllTracks(callback: (String?) -> Unit)
Link copied to clipboard
open override fun removeClipFromTrack(trackIndex: Int, clipId: Int): Boolean
Link copied to clipboard
open override fun removePluginInstance(instanceId: Int)
Link copied to clipboard
open override fun removeTrack(trackIndex: Int, callback: (Int, String?) -> Unit)
Link copied to clipboard
open override fun removeUmpEventFromClip(trackIndex: Int, clipId: Int, eventIndex: Int): Boolean
Link copied to clipboard
open override fun requestShowInstanceDetails(instanceId: Int)
Link copied to clipboard
open override fun requestShowPluginUi(instanceId: Int)
Link copied to clipboard
open override fun revertTrackToSimpleGraph(trackIndex: Int): Boolean
Link copied to clipboard
open override fun saveProject(filePath: String, callback: (AppProjectResult) -> Unit)
Link copied to clipboard
open override fun saveProjectSync(filePath: String): AppProjectResult
Link copied to clipboard
open override fun setAudioEngineEnabled(enabled: Boolean)
Link copied to clipboard
open override fun setClipAudioEvents(trackIndex: Int, clipId: Int, markers: List<ClipMarkerData>, warps: List<AudioWarpPointData>): OpResult
Link copied to clipboard
open override fun setInstanceGroup(instanceId: Int, group: UByte): Boolean
Link copied to clipboard
open override fun toggleAudioEngine()
Link copied to clipboard
open override fun unblockPlugin(entryId: String): Boolean
Link copied to clipboard
open override fun undo(callback: (String?) -> Unit? = null)
Link copied to clipboard
open override fun updateAudioDeviceSettings(sampleRate: Int, bufferSize: UInt)