Upgrade to Pro — share decks privately, control downloads, hide ads and more …

design and implementation of a next-gen. DAW se...

Avatar for Atsushi Eno Atsushi Eno
August 07, 2026
3

design and implementation of a next-gen. DAW sequencer engine for desktop, mobile and web

COSCUP 2026

Avatar for Atsushi Eno

Atsushi Eno

August 07, 2026

More Decks by Atsushi Eno

Transcript

  1. Rationale • • You would be interested in building a

    DAW, because it's doable now ◦ There are usable open source engines (Tracktion Engine, Carla host) ◦ You can resort to AI ◦ there are many emerging DAW projects on GitHub I want to share some experiences on building next-gen. DAW engine
  2. Agenda Too Much Too complicated topic for 30 min. Let

    me focus on "cross-platform" "plugin hosting" and "open extensibility" ...
  3. Agenda I don't have enough time to dive into code

    󰢛 My related work is at github atsushieno/uapmd
  4. Why "for desktop, mobile and Web" ...? I build AAP:

    Audio Plugins For Android, a plugin format, and I have many plugins. Now I need some plugin host (DAW) that supports my format. So here it is...
  5. Why "for desktop, mobile and Web" ...? - multiplatform including

    mobiles and Web - https://fl.studio/ for example (and they have FL Studio Mobile for years) Logic Pro for iPad (they have own goodness on continuous trackmaking on desktop and iPad)
  6. "next-gen." is not only about platforms... • AI integration ◦

    ◦ • • MCP integration: easy, just expose every feature via scripting host MIR integration (source separation etc.) - needs featureful OSS MIDI 2.0 native (VST3.8.0 etc.) document event model, for voice synthesizers (ARA2+ etc.) I need another 30+ min. slot to cover all 😅
  7. Process Isolation • • • Desktop (VST3/AU/LV2/CLAP) - all in

    one process (except for LV2 UI) Mobiles (AUv3, AAP) - host and plugin lives in different process Web Audio (WebCLAP) - AudioWorklet lives in its own process To cross process boundaries, we need IPC and shared memory. 🤖🍏 🐧🍎 🪟 🌐 Plugin Plugin Plugin DSP Plugin main Host Host Host DSP Host main
  8. Process Isolation Do WE have to care about process boundaries?

    -> unlikely SDKs would resolve it for us: • • • AUv3: AudioToolbox and platform handle it WebCLAP: wclap-host-cpp loads DSP on AudioWorklet, and Web UI on main AAP: use AAP hosting API, JUCE API, or (pseudo) CLAP hosting API ◦ hosting library deals with Binder IPC, ASharedMemory, SurfaceControlViewHost (Native UI) and WebKit API (Web UI)
  9. Audio Graph on Isolated Processes • Host's audio graph has

    to run on audio thread == realtime-safe(!) ◦ ◦ • even if you don't care, AudioWorklet forces it (by silencing it) create and connec on main thread, swap graphs RT-safely graph nodes include: gain, stereo pan, analyzers Tracktion Engine also has a dedicated Tracktion Graph module
  10. UI in host process vs. UI in plugin process •

    Their API requirement is similar ◦ • • desktop - easy (except for Linux...) AAP Native UI ◦ • • create UI, show UI, hide UI, resize UI, UI is resized (notification) ... create SurfaceView at host, use SurfaceControlViewHost to render plugin UI iOS: AudioUnit GUI WebCLAP, AAP Web UI ◦ create WebView, add JavaScript shim, and load plugin Web UI
  11. Parameter consistency among DAW, plugin, and plugin UI ◦ ◦

    ◦ ◦ DAW user changes the host-owned value: DAW notifies plugin, plugin notifies its UI DAW user loads state or select a preset: plugin DSP notifies DAW and UI plugin changes the value by itself: plugin notifies DAW and UI plugin UI: user changes the value: UI notifies DSP. DSP notifies DAW user changes params notify DAW changes user loads state/preset DAW notify params updates [parameters] Plugin DSP notify params changes [parameters] Plugin UI [parameters] notify param change notify param change notify param change user changes param
  12. Open extensibility is hard to achieve • • • •

    For x-plat / multi-format architecture, we have to commonize features a lot. We also need some features flexible and product-neutral enough. As we add more features, code gets complicated ◦ especially AI slop quickly goes unmaintainable. Features affect data format and its backward compatibility.
  13. Complexity: example historical dev. timeline... • • audio track for

    playback engine clip positioning constraints ◦ • is there any standard for timeline representation? audio warps (time-stretch points) ◦ can this be standard? • DAG (directional acyclic graph) ◦ ◦ • Volume slider = Gain node ◦ • is it part of graph API? latency compensation ◦ • do we make it an enhanced feature? can there be only one graph model? it depends on graph track freezing ◦ ◦ tail length should be reliable should Gain change unfreeze it?
  14. Flexibility: can everyone implement features they want? • case #1:

    custom audio graph nodes ◦ ◦ What kind of nodes should exist? ▪ gain (volume), channel splitter / merger?, analyzer? ... How is it implemented / what to extend? ▪ graph node API: audio processing, add/remove, disable/enable ▪ data extensibility : save/load them on the project
  15. Flexibility: can everyone implement features they want? • case #2:

    track freezer functionality ◦ ◦ How freezing of a track should happen? ▪ We cannot use one instance for both playback and offline processing. How is it implemented / what to extend? ▪ we implement it as in "freeze track only when playback is stopped" approach. ▪ audio processor extension : skip audio processing with pre-processed buffer ▪ playback event listener : start freezing when stopped or paused
  16. Requirements on song project data models What do we need

    beyond SMF? • audio tracks ◦ ◦ • audio files: filename, or file stream if we bundle it, with file/mime type? positional time stretches (audio warps) instrument tracks ◦ ◦ the most common structure is still MIDI MIDI 2.0 clip makes better sense (32-bit parameters, modern features e.g. note expressions)
  17. Requirements on song project data models SMF2 Container maybe? (zipped

    media contents) We also have to bundle instrument settings, audio graphs, audio warps, etc.
  18. Summary I have described what are needed / roadblocks for

    multi-platform DAW engines • • • • • • plugin formats on multiple platforms process isolation (host vs. plugin, audio vs. main) GUI model differences parameters consistency generalize things, yet keep open and extensible use common data format with additional extensions in compatible manner code: https://github.com/atsushieno/uapmd
  19. What is "next-gen" ... ? - We can easily connect

    AI agents with JS/MCP connectivity - Ableton Live Extension SDK, Waveform 14 AI connectivity, ... https://forums.steinberg.net/t/1026258
  20. What is "next-gen" ... ? - MIDI 2.0 native (UMP

    clips, SMF2 Container-like project data) - - upcoming JUCE AudioProcessor v2 VST 3.8.0: IMidiMapping2, IMidiLearn2 SMF2 Container (music file format) to be released in 2026 Q3 (according to MIDI Association) which is a "true" common standard If you want to build a DAW at that level, you cannot use JUCE (AP v1) - no JUCE means no Tracktion Engine you can use atsushieno/uapmd 😎 seealso: my slides at COSCUP 2025
  21. Plugin GUI support - desktop • Their API is similar

    ◦ • • create UI, show UI, hide UI, resize UI, UI is resized (notification) ... Windows, macOS (and iOS): easy Linux: each plugin format has to deal with event loop... ◦ ◦ X11 ▪ VST3, CLAP: you will have to deal with FD Wayland - not ready yet ▪ VST3.8.0: create surface but people don't like it... ▪ LV2: create subsurface instead? but that is ABI unstable #70 ▪ CLAP: in-between #474
  22. Plugin Parameters: needs more attention • • • Single source

    of truth (SSOT) differs by each plugin format (namely VST3)... ◦ BUT host should always behave as the SSOT for the best consistency. Parameter list and definitions can dynamically change (Kontakt, BYOD, ysfx...) Default values are unreliable; a value might already change after initialization.
  23. Dealing with data extensibility • • Built-in anchoring system Should

    it be part of standardized data model? -> NO... ◦ ◦ simple absolute timeline by default anchoring layout constraints to be stored somewhere else
  24. Requirements on song project data models audio plugin graphs •

    plugin: ◦ ◦ • format, id, states, potentially other properties (but you don't need it) MIDI mappings? graph: can we formalize? ◦ ◦ how are nodes connected? any graph nodes other than plugins? Gain? Pan? Are they serialized? Define them in separate resources so that we can standardize later.
  25. Editable Document Model interface between host and plugin, or between

    host and externals (Scripts, MCP) They need some editable document model. - ARA is likely the closest concept (fairly good abstraction). track/clip added, clip range changed, track/clip deleted, note added etc. We should probably design something like Language Server Protocol here. (to not demand "implement ARA C API" on Web Audio DAWs)