Re-render any audio as chiptune — or through any SoundFont you choose. Drop in an MP3 or WAV, pick Chiptune Mode (built-in retro synths, zero setup) or any .sf2 (piano, brass, SC-55, anything), and get back a WAV in that style.
Tunerize does the full pipeline locally: audio → MIDI (via Spotify Basic Pitch) → cleaned MIDI → render. Two render paths:
- Chiptune engine (built-in) — three chip models: NES APU-style (2 pulse + triangle + noise), Game Boy DMG (2 pulse + 4-bit wave + noise), and SNES SPC700-style (8 voices with multi-harmonic waveforms, Gaussian warmth filter, and echo). No SoundFont needed.
- SoundFont engine (FluidSynth) — anything
.sf2you can find.
One window, one button, no cloud.
- Built-in chiptune engines — NES-style (2 pulse + triangle + noise) and Game Boy DMG-style (2 pulse + custom wave + noise) synths ship in the app. Zero install, instant retro.
- Online SoundFont browser — search and install SF2s from public libraries (musical-artifacts.com, GitHub
topic:soundfont, and Reddit r/soundfonts leads) without leaving the app. License + author shown for every result. - Bring-your-own SoundFonts — Drop
.sf2/.sf3intosoundfonts/; Tunerize scans, validates, lists them, and keeps your recent picks at the top. - Preset-aware SoundFont workflow — Tunerize reads bank/program names from
.sf2/.sf3files, lets you choose a preset, and can render a short preview before conversion. - Drag-and-drop input — Drop supported audio files directly on the window, or use the file picker.
- One-click conversion — Open audio, pick mode, hit Convert. WAV out.
- Stem separation (optional) — Pre-split mixed tracks with Demucs for cleaner transcription on full songs.
- MIDI export — Keep the intermediate
.midfor use elsewhere. - MIDI cleanup — Quantize, remove tiny artifacts, normalize velocity, transpose. All defaults sane; tweak in Advanced.
- Chiptune voice mixer — Pick the chip engine, then adjust, mute, or solo the built-in pulse, triangle/wave, and noise voices before rendering.
- Force-preset mode — For non-GM SoundFonts, force every note through one preset.
- Background worker — UI never freezes during long conversions.
- Dark by default — Catppuccin Mocha theme.
- Python 3.11 or 3.12 (3.13 may work but is not yet validated against
basic-pitchONNX) - FluidSynth — only required for SoundFont mode; Chiptune Mode works without it.
- Windows:
winget install FluidSynth.FluidSynthor download from fluidsynth.org and putfluidsynth.exeon PATH - macOS:
brew install fluid-synth - Linux:
sudo apt install fluidsynth(or distro equivalent)
- Windows:
- FFmpeg (MP3 decoding) — bundled via
imageio-ffmpeg; no separate install needed
git clone https://github.com/SysAdminDoc/Tunerize.git
cd Tunerize
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
pip install -r requirements.txt
python -m app.mainThree options:
- Use the built-in browser (easiest) — Open Tunerize, switch to SoundFont mode, click Browse Online…. Searches musical-artifacts.com, GitHub
topic:soundfont, and Reddit r/soundfonts leads. Direct.sf2/.sf3/ archive links download in one click; GitHub repositories are saved as ZIP bundles; Reddit discussion-only results open in your browser for review. - Drop your own into
soundfonts/(.sf2/.sf3). Restart or hit ↻ to re-scan. - Recommended grabs:
- FluidR3 GM (MIT, the FluidSynth default, ~140MB) — search the browser for "FluidR3"
- GeneralUser GS (CC BY-SA, full GM bank, ~30MB) — search "GeneralUser"
- 8-bit / NES — search "NES" or "chiptune"
- SC-55 / SC-88 — Roland synth recreations
- Open Audio — pick or drop an MP3, WAV, FLAC, OGG, M4A, AIFF, or AIF.
- Choose render mode:
- Chiptune Mode — uses the built-in NES-style synth. No SoundFont required.
- SoundFont Mode — pick a
.sf2from the dropdown, click Add… to import one from disk, or click Browse Online… to grab one from a public library. Recently installed or used SoundFonts appear first.
- (Optional) In Advanced, choose a SoundFont preset and click Preview to audition a five-second phrase. Enable Force all notes to selected preset for non-GM banks.
- (Optional) Toggle Stem separation if your input is a mixed song.
- (Optional) Open Advanced for transpose, quantize grid, chip engine, chiptune voice mix, force-preset mode, output folder.
- Convert. Watch the progress bar and log panel.
- Output lands at
<input_dir>/<song>__chiptune.wav(or__<soundfont>.wav), plus.midif you opted in.
- Basic Pitch is best on monophonic / lightly polyphonic audio. Single instruments, melodies, vocals: great. Full mixed songs: messy without stem separation.
- Stem separation adds 1–3 minutes per song (Demucs is heavy). It's opt-in for that reason.
- Chiptune Mode is 4-voice polyphonic (NES-style). Dense polyphonic input gets thinned via voice-stealing. That's the retro authenticity, not a bug.
- General MIDI assumption (SoundFont mode): Tunerize starts from the selected SoundFont preset. For GM-compatible SoundFonts this is usually bank 0, preset 0: "Acoustic Grand Piano." Use Force all notes to selected preset for non-GM banks.
- No realtime monitoring yet — preset preview and conversion are rendered offline to WAV.
See ROADMAP.md. Highlights:
- v0.2 (this release): Online SoundFont browser
- v0.3: Bundled FluidSynth, Windows binary, FluidR3 onboarding, SNES / Genesis chiptune engines
- v0.4: Polyphone integration (bundled SF2 editor — GPL, ships in installer)
- v0.5: Built-in SF2 creator (sample → SF2, native, no external tool)
- v0.6: MP3/OGG/FLAC export, batch mode, genre presets, CLI mode
pip install -r requirements-dev.txt
pytest # run tests
python -m app.main # run the app
ruff check . # lintBuild a Windows binary (after PyInstaller is installed):
python build/build_windows.pyMIT. Built on:
- Spotify Basic Pitch — Apache 2.0
- FluidSynth / pyfluidsynth — LGPL 2.1 / Public Domain bindings
- PySide6 — LGPL 3.0
- Demucs — MIT
- pretty_midi, mido, librosa, soundfile
