Replies: 2 comments 4 replies
|
Hey welcome Just fyi, as I see you're using the tinyusb branch of the firmware - that branch is significantly out of date and not in line with the current main branch |
3 replies
|
A bare metal deluge emulator using qemu running firmware images is already available here. |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Porting the Deluge to Modern Java emulator & Auditing the C++ Firmware
Hi everyone,
I’m a Java developer with 30 years of experience and a lifelong passion for computer music. When I first encountered the Synthstrom Deluge, I was immediately struck by its UI/UX masterclass—the grid-centric, clip-based workflow is infinitely more cohesive and intuitive than many traditional alternatives.
Over the last three months, I have been working on two software passion projects to explore Deluge's architecture: a Java emulation of the engine and a deep-dive audit of the C++ firmware.
I want to be transparent about my development process: both projects were created in close collaboration with AI agents, including Gemini, Claude, DeepSeek, GitHub Copilot, and the Google Antigravity CLI. As a veteran developer, I have adopted this agentic workflow to rapidly analyze complex real-time audio code, implement assembly fixes, and build a custom Java audio engine. While highly efficient, this process requires careful oversight; I treat these agents like junior programmers, constantly cross-verifying their work to mitigate hallucinations. I am continuing to refine this process, using these tools to audit development history, correct errors, and steadily advance the Java emulation toward achieving perfect sound parity with the original Deluge hardware.
I’d like to share these projects with you and open a discussion on Deluge's software architecture, memory safety, and future possibilities.
Project 1: The Java Deluge Engine emulator
As a Java engineer, I’ve long heard the industry dogma that Java is "too slow" or "too unpredictable" for real-time, low-latency audio DSP. With modern Java features (Virtual Threads, Vector API, and ZGC), I wanted to challenge this. I set out to write Java Deluge—a line-for-line object model emulation of the Deluge engine.
You can explore the project codebase on GitHub, which includes nearly 1,500 commits—almost entirely AI-generated. The project’s User Guide was also developed using AI.
This project is pure java, no native deps and using rtmidijava pure java MIDI library and runs anywhere a JDK is running.
Project Technical Overview
This project is pure Java, requiring no native dependencies. It utilizes the rtmidijava pure Java MIDI library and is designed to run on any platform supporting a JDK.
Project 2: Auditing the C++ Firmware (14 Fix Proposals, 4 Feature Proposals)
While building the Java emulation, my system programming background kicked in. I audited via AI tools the official open-source C++ firmware for memory safety, concurrency, and DSP stability. I have compiled and pushed 14 separate bug-fix branches to my fork that I would like to propose to the community. These fixes address several long-standing issues, including:
You can view these proposed fixes here: DelugeFirmware GitHub Repository
All these fixes have been written via Claude Code and reviewed by Antigravity CLI.
Community-Requested Features
All these feature branches have been written by Antigravity CLI and reviewed by Claude code.
Branch: feat/iteration-skip-condition
Discussion Reference: Discussion #4449 (Iteration Skip / Play Only N of M conditions)
Description: Implements the inverse condition (!N of M) for every iterance preset. When selected, it prints dynamically as "!N of M" on the OLED screen and skips the note event on cycle N, playing on all other cycles.
Branch: feat/midi-track-delay-offset
Discussion Reference: Discussion #1516 (MIDI Track Delay/Latency Offset)
Description: Adds a track-level offset parameter (ranging from -100ms to +100ms) to calibrate timing on external hardware relative to the internal Deluge sequencer clock.
Branch: feat/song-snapshots
Discussion Reference: Discussion #3382 (Performance Song Snapshots)
Description: Captures and instantly recalls track mute and clip launch states during live sets without dynamic memory allocation.
Branch: feat/latching-stutter
Discussion Reference: Discussion #4196 (Latching Stutter Mode)
Description: Adds a latching mode to the stutter effect.
I am aware that many open-source projects have policies against accepting AI-driven pull requests, and I completely respect those community guidelines.
Live Hardware DSP-Tap Connection
To use the live DSP-tap feature, build and flash the feat/dsp-buffer-dump firmware branch from this repository. This provides a low-level debug tap for raw audio analysis.
For setup instructions in the Java application, refer to the usage documentation.
The Firmware Branch: feat/dsp-buffer-dump
This branch introduces a custom developer-only SysEx debugging protocol inside the Deluge firmware, allowing the desktop workstation to capture raw audio samples directly from the physical hardware's output rendering loop:
How to Fetch, Build, and Flash the Firmware
1. Fetch the Branch
In your local C++ firmware repository directory, fetch and checkout the remote branch:
2. Build the Firmware
Compile the firmware binary using the Deluge build tools:
3. Flash the Deluge
USB Integration Status Report: Deluge Firmware & Workstation Client
We have successfully designed, built, and tested the core layers for Phase 1 (Non-blocking file browsing & reading) and Phase 2 (Real-time synthesizer parameter editing) over a single composite USB MIDI + CDC Virtual Serial interface.
Technical Roadmap: usb_integration_roadmap.md
1 C++ Firmware (Deluge Device Side)
Codebase Links
2 Java Workstation (Host/Desktop Side)
Codebase Links
3 Local Verification & Diagnostic Utilities
We added two Java test utilities to verify the integration, runnable with a physical Deluge connected:
Diagnostic 1: SD Card File List & Download
Diagnostic 2: Real-time Parameter Edit
Discussion Points
The Java Deluge application has only been tested by me and AI agents. It is WIP and we are still closing DSP parity gaps. Feel free to try it, file bugs, send feedback, and propose PRs.
For the Deluge fixes and new features, I can create PRs if needed, and of course happy to discuss/improve all of them.
All reactions