Projects Pariki
Pariki
A drum synth in the Moog DFAM tradition, in C++ with JUCE. It addresses the hardware's best-known complaints, and FFT tests measure its aliasing suppressed by about 23 dB against a naive oscillator.
- Links
- Code
- Stack
- C++20 · JUCE 8.0.15 · CMake · AUv3 · AU · Standalone · macOS · iOS

The short version
Pariki is a drum synth in the tradition of the Moog DFAM, written in C++20 with JUCE. It runs as an AU plugin and as a Standalone app on macOS, and it builds AUv3 for iOS.
The DFAM has a well-known list of complaints against it, and the plan file for this project keeps them in a table. Seven rows, five of them answered here: pattern slots and song chaining past the eight-step limit, MIDI in a native AUv3, big touch targets in place of the tiny step knobs, an onboard LFO with a mod matrix behind it, and a routing table instead of the 24-point patchbay. The other two rows stay as they are on purpose.
Underneath the synth sits a reusable JUCE harness of eleven header-only modules, and that harness is the part of this I care about most. The plugin is the only target that knows a DFAM exists, so the next instrument can start from the same eleven modules.
The one claim I can measure is the aliasing. Rendering a saw at 2793.83 Hz and taking a 65,536-point FFT, a naive oscillator leaves alias energy at −10.55 dB and the polyBLEP oscillator leaves it at −34.05 dB. That is 23.5 dB of suppression at a fundamental picked to be brutal.
The caveat is inside that number. −34 dB is not silence, and it is the measured ceiling of the four-point B-spline kernel rather than a figure I can push further without changing the kernel. The aliasing is suppressed, not gone.
C++20 and JUCE 8.0.15, built with CMake, shipping as an AU plugin, an AUv3 and a Standalone app. It is not released and it is not on the App Store. The code is at Patrick-RK/Pariki.
How it works
The synth exists to prove the reusable JUCE plugin harness underneath it.
DFAM-clone-plan.md keeps a table of the hardware’s best-known complaints.
Seven rows, five answered.
The first is the eight-step sequencer with no song mode. Phase 5 (SONG-1 to
SONG-3) adds pattern slots, song chaining and a per-pattern step count, so a
pattern is no longer stuck at eight.
The DFAM has no MIDI. Pariki is a native AUv3 with a MIDI-out mode from Phase 8, so it can sit in a host or drive other gear.
The hardware’s step knobs are tiny. Phase 4’s UI-1 work sets a design rule of
big touch targets and lays the interface out mobile-first.
A DFAM has no LFO and limited modulation. Phase 3’s PATCH-4 adds an onboard
LFO, with a mod matrix behind it.
Its 24-point patchbay is smaller than a Mother-32’s. Phase 3 replaces the physical patchbay with a routing table: no cables, and no fixed ceiling on the number of routings.
Two rows stay unanswered on purpose. The analogue attack inconsistency is character rather than a defect, and the price row is a joke. One design rule holds the rest together: DFAM behaviour ships as default presets, never as hardcoded limits. Load a preset and you get the hardware, and you can go past it from there.
The claim I can actually measure is the aliasing.
harness/dsp-osc/tests/RenderTests.cpp renders each waveform at 2793.83 Hz
(F7, picked because it aliases hard), takes a 65,536-point FFT with a
Blackman-Harris window, and measures the energy that does not land on a harmonic
of f0. A naive saw runs as a control, which is what makes the number mean
anything; the metric is shown to catch the problem before polyBLEP is asked to
fix it.
The control saw reads −10.55 dB of alias energy. The polyBLEP saw reads
−34.05 dB, suppressed by 23.5 dB at a deliberately brutal fundamental, not
gone. The comment at RenderTests.cpp:120-124 puts −34 dB at the measured
ceiling of the four-point B-spline kernel, and notes that suppression improves
by roughly 24 dB per octave below F7. Square lands at −40.17 dB and triangle at
−53.64 dB. The suite passes with zero failures.
Status, plainly: phases 4 to 8 are marked shipped, with their deferrals recorded in the same rows. It runs as an AU and a Standalone app on macOS and builds AUv3 for iOS. It is not released and not on the App Store.
The modules

The harness is eleven header-only libraries and the plugin is the only target
that knows a DFAM exists. core, clock, dsp_osc, dsp_env and dsp_filter
link nothing at all, which is why the FFT test runs as a plain console binary.
The interface



Thirty seconds of the fm-toms factory preset, recorded from the macOS
Standalone build:
The long version
This section is being written.