About the
Project
Project Overview
This project is a desktop Digital Audio Workstation (DAW) built in C++20, designed to bridge the gap between low-level audio processing and high-level UI responsiveness. By combining the JUCE framework for audio/MIDI I/O with Dear ImGui for a high-performance immediate-mode interface, the application provides a fluid, real-time environment for musical composition.
MVP Goals
The core experience focuses on precise MIDI sequencing and multi-track arrangement:
- Interactive Piano Roll: A high-resolution editor featuring note drawing, stretching, scaling, moving, and box selection.
- Multi-Track Arranger: A timeline view for placing, moving, and resizing Pattern Clips across multiple tracks.
- Real-Time Playback: Dual-stream output via an internal 8-voice polyphonic sine-synth, supports importing & sampling any audio files
- MIDI Integration: Full support for importing Standard MIDI Files (Format 0 and 1) with automatic PPQ scaling.
Technical Architecture
The application follows a State-Driven Singleton pattern, ensuring the UI remains a stateless representation of the underlying data model. This architecture enables seamless synchronization between the visual playhead and the audio engine.
Core Subsystems
- Manager Singletons: Centralized managers (Pattern, Arranger, Playback, ViewState) handle all state mutations, allowing UI components to remain "pure" and reactive.
- Immediate-Mode GUI (ImGui): All interface elements, from the piano roll grid to custom track gradients, are re-rendered every frame using low-level
ImDrawListcalls. - High-Resolution Timing: A 960 PPQ (Parts Per Quarter-note) internal resolution ensures micro-timing accuracy and artifact-free snapping.
Data Model & MIDI Logic
Unlike standard MIDI implementations, this project utilizes a custom ID-based event system to ensure stability during complex editing operations.
- Note Persistence: Every MIDI event is assigned a unique 32-bit ID, making the system robust to insertions and deletions that would typically break index-based arrays.
- Ghost Note System: A specialized rendering layer that handles "ghost" previews during move/stretch operations, providing instant visual feedback without mutating the primary data until a gesture is committed.
- Precision Playback: A 1ms polling
juce::Timerdrives theMidiPlayer, converting tick-based data to high-resolution system timestamps for jitter-free performance.
UX & Design Process
Design is treated as a first-class citizen. The workflow includes wireframing in Figma and user testing to ensure the tool-based interaction (Edit, Select, Snip, Move) feels intuitive to veterans of industry-standard DAWs like FL Studio or Ableton Live.
Motivation & Goals
The motivation comes from a genuine interest in MIDI processing and DAWs. Building creative software tools is a distinct UX challenge — the user is both a technical operator and an artist — and that tension is what makes the problem interesting. The project will significantly deepen skills in C++, low-level MIDI protocol knowledge, and practical interface design.
Research
The project is grounded in existing literature on MIDI systems and music production tooling: