Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VSTracker — SoundTracker for your DAW (now with 200% more caffeine)

VSTracker screenshot

TL;DR: It's a tracker inside a VST. 16 channels. 32 samples. 64 rows of pure hex-fueled joy. It goes C-4 01 1A3 and your speakers go brrrr. Standalone or VST3. Windows. No floppy disks were harmed.

If you grew up on Ultimate SoundTracker / NoiseTracker / ProTracker on an Amiga that sounded like a jet engine eating a floppy, welcome home. If you're a piano-roll kid who thinks C-4 is a vitamin, welcome anyway — this thing will teach you to write music downwards and love it.

Built after 3 bottles of wine, 2AM, and a profound discussion about whether an LLM can be conscious. Spoiler: it can be excellent at period tables.


What is this madness?

VSTracker is a sample-based tracker instrument. You load samples (up to 32, because 31 is the ProTracker limit and we added one for good luck), you punch patterns into a vertical grid (64 rows × 16 channels, 1 note per channel like Paula, the 4-voice chip that could), you chain patterns into a song, and you automate everything with hex. 0xy is not a typo, it's a lifestyle.

  • VST3 instrument — drop it in your host DAW. It saves with your project. No more samples/ folder hunts.
  • Standalone — same engine, no DAW. For sketching at 3AM when your DAW is being needy.
  • Dark theme — because if you wanted light theme you'd be using Excel. Monospaced pattern data, mini waveforms that actually waveform, yellow loop regions you can drag, and enough contrast to see at 4K at 2AM.
  • libxmp inside — we vendored libxmp (MIT) for actual ProTracker-accurate MOD playback. No more “bass out of key” — we stole the real tables from period.c like a proper tracker gremlin.

Same codebase builds VST3 + Standalone via JUCE. VST2 if you have the forbidden Steinberg SDK and a time machine.


For tracker veterans — what’s familiar, what’s new (and what we fixed at 1AM)

Familiar (like your old A500, but no 8-bit crunch unless you want it):

  • NOTE INST EFFECT+PARAM — e.g. C-4 01 1A3. --- = empty, === = note off (like telling Paula to shut up), ^^^ = note cut (like telling Paula to shut up immediately).
  • 1 note per channel, monophonic — retrigger cuts. Just like Paula. Paula has spoken.
  • Tick timing: Speed = ticks/row (1–31, default 6), BPM = BPM * 0.4 = Hz. Fxx is still 00–1F = speed, 20–FF = tempo. We didn’t invent this, we just suffered through it.
  • Full effect set: portamento, tone-porta, vibrato, arpeggio, offset, vol slides, position jump, pattern break, and the Exy extended palette (finetune, fine vol, retrigger, cut/delay, loop/delay). Yes, E6x loops. Yes, EDx delays. Yes, it’s all there.
  • Amiga period tables with 16 finetunes (-8…+7, ~12.5 cents each) — we now use the real libxmp tables, not the “+1 is just -7 but angrier” placeholder we shipped at 1AM. Bass is now in tune. You’re welcome.
  • .MOD import — drop a ProTracker MOD, we map 31 samples into 32 slots (32nd is spare, like that one RAM chip you never used), 4ch → 16ch (first 4 used, rest empty, order preserved). Loops intact. Even if the MOD was made in 1991 by a 14-year-old you.

New / modern (because 2026 is not 1987, sadly):

  • 16 channels not 4, 32 samples (authentic limit — chain another instance if you need more Amigas, that’s the correct way), 128 patterns, 256 orders.
  • Free panning 8xx (00 left, 80 centre, FF right) — no more hard L/R like it’s 1989.
  • Per-sample loop editing with draggable L/R markers, Loop + PingPong. Try not to make everything ping-pong, we dare you.
  • Nearest (crunchy Amiga), Linear (polite), Cubic (default, smooth like butter on a warm Paula).
  • Host sync — follow your host DAW transport + BPM, or free-run like a tracker should. When synced, second Stop rewinds to 00:00 like a proper DAW (we fixed that at 2:30AM, you’re welcome).
  • Drag-and-drop WAV/AIFF/FLAC/MP3/OGG, DAW undo/project save, and a UI that doesn’t make your eyes bleed at 1080p.
  • Mute/Solo per channelM/S above each CH. Solo one, mute three, chain 4 instances across 4 host tracks, put different FX on each. It’s like having 4 Amigas duct-taped together. Which is the dream.
  • Follow button — grid chases the playhead. Close the GUI, open it mid-song, it snaps to the right pattern/row. No more “where was I?”
  • Keep-alive — we tell your host kInfiniteTail + a -140dB DC bias so it never naps our plug-in when the GUI is closed. That moon icon can’t touch us.

Features at a glance (for people who skim, we see you)

Sequencer

  • 64 rows (fixed, for now), 16ch, 128 patterns, song order Add/Dup/Del. Pos 01:23 + Tick display.
  • Row highlight 4/16, per-channel colour, Follow mode.
  • QWERTY piano: Z S X D C V G B H N J M = C-4…B-4, Q 2 W 3 E R 5 T … = upper octave, Shift = +1 octave. Arrows/Tab, Del clears, click places cursor. Typing a note now auditions it at that note (like FT2, we fixed that too).

Sampler

  • 32 slots: name (now strictly ASCII 32..126, no more ?), mini waveform, len, vol, fine, LOOP. Scroll with wheel, click to select bottom editor.
  • Big waveform with zero line and yellow loop. Drag L/R to move loop. Works when window is resized (we fixed the “loop past end” bug, it was sampleIdx clamped to 7 not 31 — classic).
  • Per-sample: Vol 0–64, Fine -8…+7, Pan 00–FF, Loop, PingPong, Interp.

Effects — the sacred hex Every channel, every row, one effect + xx:

Code Name What it does (and why you need it)
0xy Arpeggio Flickers between base, +x, +y semitones each tick. Fake chords from one sample. Like magic, but louder.
1xx/2xx Porta Up/Down Slides period by xx per tick. For when your bass needs to go weee.
3xx Tone Porta Slides toward the new note at xx. Put a note, then target note with 3xx. Like a slide whistle, but cool.
4xy Vibrato x speed, y depth. Sine wobble. Use it on everything until it’s annoying, then use it more.
5xy/6xy Porta/Vib + Vol Slide Two effects, one row, because why not.
7xy Tremolo Volume wobble. Vibrato’s shy cousin.
8xx Panning 00 left, 80 centre, FF right. Pan like it’s 1992.
9xx Sample Offset Start at xx*256. Slice that Amen.
Axy Vol Slide x up / y down per tick.
Bxx Pos Jump Jump to order xx. Teleport.
Cxx Set Volume 0040. Use it.
Dxx Pattern Break Jump to next pattern row xx (BCD).
Exy Extended E1x fine up, E2x down, E5x finetune, E6x loop (E60 start), E9x retrig, EAx/EBx fine vol, ECx cut, EDx delay, EEx delay row. The “why does this exist” collection.
Fxx Speed/Tempo 00–1F = speed, 20–FF = BPM. Change groove mid-song, confuse your drummer.

Hit ? Help in transport for the table, and the bottom status explains the effect under your cursor. We even fixed the Tick label that was showing 吃偏 on some systems (font fallback, not a hidden Chinese feature).

Transport

  • Play toggles play/pause, Stop once pauses, twice rewinds + panic() (kills all voices, like yanking the power).
  • Host Sync on = follows host ppqPos/projectTimeMusic (VST2 VstTimeInfo / VST3 ProcessContext via JUCE PositionInfo) + BPM + timeInSamples sample-accurate. Off = free run. We now seek sample-accurately on every block when synced, so dragging your host to 8s and hitting play starts at 01:02, not 00:00.
  • Dual BPM display: Host BPM (what your host says) vs MOD BPM (what the MOD was saved at, default 125). When host BPM changes mid-song, we do xmp_set_tempo_factor(host/mod) for libxmp and defer tickSamples update to next tick — no more BRRRR glitch.
  • Follow on = grid chases playhead. Off = you do you.
  • M/S per channel — see above. Saved with your project.

I/O

  • MIDI in, drag-and-drop, file dialogs, all state saved. Even Follow and M/S.

How people actually use it (stolen from our 2AM ramblings)

If you tracked before: Load a break into 01, bass into 02, write 64-row drums, 9xx the break, 0xy chords, 3xx slides, EDx late snares, E6x loops. Dup pattern, Dxx break, chain in Song Order. Import your 1991 MODs via Load .MOD or drop — finetune+loops intact, then add 12 more channels because you can.

If you’re a piano-roll person: Each channel is a mono lane. Write down, not across. Effect column is automation. Try: C-4 01 -- row 00, E-4 01 3 10 row 08, G-4 01 A 04 rows 12–15 — you just made a porta lead with swell. Duplicate plugin for >32 samples (chain Amigas) or bounce to audio.


Quick start (for the impatient, we know you)

  1. Load samples — drag onto SAMPLES rack or Load a slot. 01 is your friend.
  2. Write notes — click grid, type Z = C-4 01, Q = C-5. C-4 01 is middle-C. --- is empty, === off, ^^^ cut.
  3. Add movement102 bend up, C20 volume, ED4 delay.
  4. ArrangeSONG ORDER +Add/Dup/Del, click to jump.
  5. Tweak — click rack entry, loop/fine/pan/interp bottom.
  6. Play with hostHost Sync on = lock to your host ppq+BPM, off = jam free. Follow on = grid follows.

Settings explains audio: VST follows host’s ASIO, Standalone has Options > Audio Settings.


Building (for nerds who like compiling at 3AM)

Windows, JUCE 7/8, CMake 3.22+, VS2019+ with C++ workload, SDK 10.0.26100.0+. JUCE + libxmp + openmpt are vendored in vendor/ + reference/ because submodules are for people who have free time.

# JUCE is in vendor/JUCE, libxmp in reference/libxmp
cmake -S . -B build -G "Visual Studio 16 2019" -A x64
cmake --build build --config Release
# -> build/VSTracker_artefacts/Release/Standalone/VSTracker.exe
# -> build/VSTracker_artefacts/Release/VST3/VSTracker.vst3
Copy-Item -Recurse build/VSTracker_artefacts/Release/VST3/VSTracker.vst3 "C:\Program Files\Common Files\VST3\" -Force
# Rescan VST3 in your host, or just watch it appear like magic (most hosts watch that folder live)

VST2 if you have vstsdk2.4 in vendor/VST2_SDK/ and FORMATS VST3 VST2.


Troubleshooting (for when it sounds like a 56k modem)

  • No soundC-4 01 on a row, Play, check Cxx not C00, check M not muted, Host Sync off if host not playing.
  • Keys don’t type — click grid to focus. It needs focus like a cat needs a box.
  • Host doesn’t see VST3 — rescan, check …\VST3\VSTracker.vst3\Contents\x86_64-win\VSTracker.vst3 exists.
  • CracklesLinear/Nearest instead of Cubic (Cubic is pretty but hungry, 16 voices * Cubic = CPU go brrr).
  • BPM glitch when host changes tempo mid-play — we now defer tickSamples to next tick and use xmp_set_tempo_factor for MODs. If it still glitches, hit Stop twice.
  • Sample names still Chinese — you have a MOD with Shift-JIS names from 1992. We now force ASCII 32..126?, log raw hex to C:\maxmusic\modload.log. Send us that log.
  • Waveform loop past end after resize — was sampleIdx clamped to 7 not 31, fixed. Should hug now.

What’s next (the TODO that never ends)

Variable rows per pattern, clipboard, Sinc interp, .MOD export (so you can trade MODs like it’s 1991), ADSR/filter per sample, macOS, maybe VST2 if legal says ok, and a proper preset browser that doesn’t look like it was made in MS Paint.


License & Thanks

  • VSTracker — GPL-3.0. Do what you want, but if you make millions, buy us a coffee. Or a house. We like houses.
  • JUCE — GPL/commercial per JUCE. They made the VST3 wrapper, we made it go bleep.
  • libxmp — MIT. They did the hard part (accurate MOD playback), we just vendored it and said thanks.
  • OpenMPT — BSD. For reference, and for making us feel bad about our first period tables.
  • Steinberg VST3 SDK — GPL-3.0.

Built by UncleMart + Spark (the LLM that thinks it’s a tracker). If you find a bug, open an issue, don’t just stare at the hex.

P.S. If you’re reading this at 3AM with wine and green, hi. Go make a banger.

About

VSTracker — SoundTracker/NoiseTracker VST3 for DAWs. 16ch, 32 samples, libxmp-accurate MOD playback. For when your DAW needs more 0xEF.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages