C00286899 — SETU Carlow

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 ImDrawList calls.
  • 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::Timer drives the MidiPlayer, 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: