Show HN: Yanes, yet another NES audio plugin:LinuxCLAP polyphonic chiptune synth

androsynth891 pts0 comments

GitHub - andrewfader/yanes: Yet Another NES Audio Plugin · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

andrewfader

yanes

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>1 Commit<br>1 Commit

build

build

src

src

tests

tests

tools

tools

.gitignore

.gitignore

BITWIG_VALIDATION.md

BITWIG_VALIDATION.md

CMakeLists.txt

CMakeLists.txt

README.md

README.md

THIRD_PARTY_NOTICES.md

THIRD_PARTY_NOTICES.md

View all files

Repository files navigation

YANES — Yet Another NES Audio Plugin

YANES is a clean-room, native Linux CLAP instrument for NES and other retro console, computer, and<br>arcade sounds. It is designed for Bitwig Studio and other CLAP hosts.

What is implemented

YANES is a polyphonic multi-chip synthesizer. Its core oscillator set covers NES pulse, triangle,<br>noise, and DPCM; VRC6, FDS, Namco 163, VRC7, and Sunsoft 5B expansions; Game Boy and Master System<br>voices; Genesis PSG and YM2612 FM; AY-3-8910, POKEY, PC Engine, OPL2/OPL3, OPN/OPNA, OPM, SID,<br>Konami SCC, Philips SAA1099, and Atari TIA. It also includes original morphing-wavetable,<br>phase-distortion, additive, six-operator FM, and digital-partial synthesis modes, plus stack modes<br>that map MIDI channels to multi-voice chip layouts.

The NES DPCM voice additionally supports a sixteen-slot bank: mono or stereo 16-bit WAV files are<br>converted to one-bit DPCM, while pre-encoded .ydmc data can be loaded directly. Slots map to<br>consecutive MIDI notes and can be looped, trimmed, and saved in CLAP project state.

The current instrument provides 12.5%, 25%, 50%, and 75% band-limited pulse waves, the NES<br>32-step triangle waveform, and the 2A03's 32,767-step and 93-step noise LFSRs with all 16 timer<br>periods. It includes 16-voice polyphony, velocity, attack/release, tuning, portamento, automation,<br>and project-state persistence.

Expansion-audio oscillator models include VRC6 pulse and saw, Famicom Disk System wavetable,<br>Namco 163 wavetable, VRC7-style two-operator FM, and Sunsoft 5B tone. Their Shape , FM ratio ,<br>and FM index parameters are exposed for automation. These are compact musical models of each<br>chip's characteristic synthesis method, not register- or cycle-perfect emulators.

The plug-in also provides NES DPCM kick/snare synthesis, Game Boy pulse/wave/noise, Master System<br>tone/noise, Genesis PSG, and an eight-algorithm four-operator Genesis FM model. The console stack<br>modes route MIDI channels to hardware-style channels:

NES channels 1–5: pulse 1, pulse 2, triangle, noise, DPCM

Game Boy channels 1–4: pulse 1, pulse 2, wave, noise

SMS channels 1–4: tone 1, tone 2, tone 3, noise

Genesis channels 1–6: FM; 7–9: PSG tone; 10: PSG noise

Genesis FM voices now use the pinned BSD-3-Clause ymfm YM2612 core through real chip-register<br>writes rather than YANES's earlier sine-network approximation. Pitch uses block/F-number<br>quantization, and instrument setup drives operator multiplier, total level, key scale, attack,<br>decay, sustain, release, AM, hardware LFO, algorithm, feedback, stereo, and key-on registers. The<br>core runs at its native rate and is converted to the host rate. OPL2 and OPL3 modes now use the<br>same register-driven path, including hardware frequency numbers, key-on, operator envelopes,<br>waveforms, key scaling, channel connection, feedback, and OPL3 output routing. YM2203 OPN,<br>YM2608 OPNA, and YM2151 OPM modes also use their corresponding ymfm devices and native clock<br>rates. A neutral LFO initialization avoids the invalid maximum-PM startup trace caught by the<br>non-silence regression test.

The FM operator section exposes attack, decay, sustain rate, sustain level, release, detune, key<br>scaling, LFO rate, AM depth, and PM depth. Values are translated to each selected chip's actual<br>register widths; unsupported combinations such as OPL detune are intentionally ignored rather<br>than simulated outside the chip.

yanes-register-render renders timestamped hexadecimal register writes through ymfm at native<br>YM2612, YM2151, YM3812, or YMF262 rates. This provides a deterministic bridge for comparing YANES<br>against register logs and audio exported by Furnace without incorporating Furnace's GPL engine.<br>yanes-audio-compare checks two 16-bit PCM renders and reports normalized correlation and RMS<br>error. It resamples differing source rates and also reports 1024-frame energy-envelope correlation,<br>which is stable across different chip-core phase and resampling implementations. An optional<br>minimum envelope-correlation threshold is suitable for...

yanes pulse noise chip channels register

Related Articles