Projects Pariki

BuildIn progress2026

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 Pariki synth page, dark themed: two oscillator rows with tune knobs and octave switches, a drone section, a mixer column, a ladder filter and a drone filter in teal and violet, and a row of six large yellow envelope knobs across the middle.

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

Module dependency diagram. DfamClone, the plugin, sits at the top and links its factory preset data, six composite harness modules (ui, sequencer, voice, modmatrix, dsp_fx and preset), five foundation modules (core, clock, dsp_osc, dsp_env and dsp_filter) and JUCE. Every arrow points downward; nothing in harness points back up at the plugin.

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

Pariki’s SYNTH page with the FM Toms preset loaded: two oscillator rows, a drone section, a mixer column, a ladder filter and a drone filter, six large envelope knobs, an LFO and FM panel, and the eight-slot patch bay along the bottom.

Pariki’s SEQ page with the FM Toms pattern loaded: eight tall step columns, a cyan gate lane above and a pink pitch lane below, articulation buttons down the left for gate, velocity, mute, nudge, roll and ring, and pattern slots A to H with a song chain across the top right.

Pariki’s MIX page: five channel strips for VCO 1, VCO 2, noise, external input and drone, each with a fader, an ON pad and a send knob, beside two FX chain columns of drive, delay and reverb stages.

Thirty seconds of the fm-toms factory preset, recorded from the macOS Standalone build:

The long version

This section is being written.