Homeentitytool

Ninjatracker

A native commodore-64 music editor by lasse-oorni (Cadaver), written so that his games could have music with low rastertime and memory usage; version 2 (2.0–2.03, dated August–September 2006 by the SIDin news; the #11 editorial of 2007-02-14 says it and laxity's SID Factory "were released in the same week" — sources: s-sidin-news-digest, s-sidin11-sid-factory-vs-ninjatracker), is the one sidin #11 documents. It is a duration-based editor (note, command, duration per row) that can be used "in a manner very similar to a tracker" with a fixed duration and key on/off; the command shown by name on every row is what Tognon liked best (source: s-sidin11-sid-factory-vs-ninjatracker). Only the SIDin article is recorded here.

Facts#

  • V1.x, "years ago", "was quite hard to use", but a utility converted goattracker songs into Ninjatracker format, so one could compose in GT and only fix the instruments afterwards (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Up to 16 subtunes of 3 tracks; up to 127 commands (a command on a note row is an instrument); grey-scale colours by default, configurable; one screen for patterns, commands and tables; online help inside the editor plus offline docs; ProTracker or DMC note entry; fast forward; the rastertime is displayed during playback (not the notes) (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Tools: a pattern packer/optimiser; a relocator with a "Gamemusic" option that saves the song without the player, for sound effects in a game (sid-player-routine); example tunes; file names typed by hand; a border animation while loading; source code available (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Limits (2007): no multispeed; instruments cannot be saved for reuse; the many v2.x releases differ in hard-restart type, note durations and minor effects, so a tune is tied to the version it was made with — Tognon wished for loadable players in one editor "like in SIDFactory or JCH" (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Tognon's tally against SID Factory: 15 plus and 4 minus, versus 10 and 9 (source: s-sidin11-sid-factory-vs-ninjatracker).

Why it exists, in his own words (2002)#

Asked in November 2002 why he had written so many players — "Music driver, SadoTracker, Goattrk and Ninjatrk" — lasse-oorni gave the reason each time as "memory or speed (rastertime) gain", and NinjaTracker's specifically: "I thought Goattracker would be the ultimate for my personal use, because it was fast & easy to compose on, but finally I had to realize that music made with it takes too much memory (because of the patterns, they're like in Amiga/PC tracker programs). So I started the quest for the extremely optimized playroutine/musicdata combination (Ninjatracker)". By then he considered it to have reached its own peak "in speed & size", as goattracker had in ease of use (sid-player-routine, orderlist; source: s-sidin02-cadaver-interview).

One design decision outlived the program: iLKke's defMON guide credits NinjaTracker as the precedent for no discrimination between instruments and effects — one table serving both — which is the principle defmon took to its conclusion (source: s-defmon-wiki-defmoning-101).

Cheat sheet#

All from s-sidin11-sid-factory-vs-ninjatracker (Ninjatracker V2.x, February 2007).

Track (one per voice, per subtune; orderlist)

valuemeaning
00loop
01–7Fplay pattern 01–7F
80–BFtranspose downwards
C0–FFtranspose upwards

Pattern row: note C1–B7, +++ (key on) or --- (key off) · command 01–7F (instrument if a note is given, effect otherwise) or 81–FF (legato) · note duration · the command's name (display only). Empty fields keep the previous values.

Command = ADSR · wave-table pointer · pulse-table pointer · filter-table pointer. ADSR is not used in legato mode; a pointer of 00 keeps the table already running (instrument-tables).

Wave table (left byte / right byte; wavetable-programming)

leftrighteffect
00–8Farpeggio: 00–7F relative, 8C–DF absolute noteset waveform (chord-arpeggio)
90–BFno waveform; delay the arpeggio by 00–2F frames
C0–DFdepthvibrato with speed 00–1F
E0–FEspeed low byteslide with speed high byte 00–1E (pitch-slide-and-portamento)
FFdestinationjump — not to be entered directly from a command

Pulse table (pulse-width-modulation)

leftrighteffect
01–7Fsigned speedmodulate the pulse width for that many frames
80–FEvalueset the pulse width
FFdestinationjump (can be entered from a command)

Filter table (filter-programming)

leftrighteffect
01–7Fsigned speedmodulate the cutoff for that many frames
80–FEcutoffset passband (left nybble − 8) and the channels to filter (right nybble)
FFdestinationjump (can be entered from a command)

Release history (from the SIDin news, 2002–2006)#

  • 1.0, 2002-11-01: "a new tracker by Lasse Öörni (Cadaver)" at "only 10 rasterline" for demos short of memory and raster time; 1.01 two weeks later, 1.02 days after that — "only 8 rasterlines even during badlines" (source: s-sidin-news-digest).
  • 1.04, 2003-03-05: the filter command returns; a gamemusic version that keeps the playroutine separate as source and "doesn't lie about the rastertime anymore"; GoatTracker→NinjaTracker converter 1.1. 1.05, 2004-01-06: a slide-duration calculator. 1.1, 2004-01-25: "Hardrestart is more solid (set both AD,SR to $00)", INS inserts 00,00 in the pulse/filter tables (hard-restart; source: s-sidin-news-digest).
  • 2.0–2.03, August–September 2006: commands double as instruments, two-column tables, a slide that stops at the target pitch; 2.02 a two-frame hard restart with only 2 zero-page bytes; 2.03 a "hifi" hard restart and note durations 3–65 — released "in the same week" as SID Factory 0.05, hence sidin #11's comparison (source: s-sidin-news-digest).

lasse-oorni · goattracker · sid-factory-ii · laxity · sid-player-routine · instrument-tables · wavetable-programming · hard-restart · multispeed · sidin · tracker

Sources#

s-sidin11-sid-factory-vs-ninjatracker · s-sidin-news-digest · s-sidin02-cadaver-interview · s-defmon-wiki-defmoning-101

source file wiki/entities/ninjatracker.md · graph