SIDin #13 — JITT64 Tracker: Tognon's Java Ice Team Tracker from the user's side (2010)
stefano-tognon documents his own jitt64 (Java Ice Team Tracker), "my C64 cross-platform music tracker … written in Java for being portable", from the user's side: screen layout, the track commands, the 16 pattern commands, the instrument window with its hard-restart fields and per-instrument tables, and a gallery of example instruments. The companion article (s-sidin13-inside-jitt64) reads the player code.
Key claims#
- Design: "a very freedom instrument implementation, using full features tables. Essentially you can have an instrument that use up to 2KB of data for its definition as the tables are not shared between instruments (only the packer will apply optimization in tables if possible …). Due to this, the player is very rastertime consuming, but maybe you could be able to write even up to 4X tune with the editor." Sound comes from the JSidPlay library; the program has hypertext help (instrument-tables, multispeed, sid-player-routine).
- The editorial: the two-year gap since issue 12 went into "the programming of my personal music editor: JITT64. This number, in fact, shows you all about JITT64."
- Main screen: song panel (name, author, copyright, speed — "all tunes and voices have the same speed", number of tunes, SID chip type), track panel (three rows, playback buttons, a "semaphore" showing whether the tune is ready), pattern panel (three voice columns; "the tempo and dimension of the pattern can be selected independent"), instrument panel (name, note, hard-restart settings, the big value table, a piano roll for testing).
- Track commands (right-click in a cell):
0..222= pattern number;REP= repeat the sequence of following commands ("dimension is 16, while the number of repeat is from 2 to 17");TR= transpose −15..+15 for all following patterns;RST= restart index, always last, or let the voice end. Example: voice 1 plays patterns 0, 1, 2 and stops; voice 2 plays pattern 0 at pitch, a half step up, a half step down, forever; voice 3 plays 0, 1, 2 twice and ends (orderlist). - Pattern: each pattern has its own tempo and length (defaults in the options; "the tempo is usually set by command"); spinners for pattern and octave, a mute checkbox; columns Notes · Instruments · Commands (with parameters); note entry by right-click menu or keyboard "using Protracker or DMC mode"; cut/copy/paste/clear between patterns; patterns load/save to files.
- 16 pattern commands (
$00–$10):00Stop — a bit field: bit 0 arpeggio, 1 portamento up, 2 portamento down, 3 tone portamento, 4 vibrato, 5 pulse up, 6 pulse down;01Set Tempo (0 = the pattern's own);02Attack/Decay;03Sustain/Release;04Volume ("starts at 15");05Arpeggio — "a speed to choose for the arpeggio and two tone to add to base note and second note" (chord-arpeggio);06/07Portamento up/down — "the amount (*2) of frequency";08Tone Portamento, same units (pitch-slide-and-portamento);09Vibrato — "the speed and the amount (*16)" (vibrato);0A/0BPulse slide up/down (pulse-width-modulation);0CAuto fade out with a delay;0DFilter type (high/band/low and voices),0Eresonance,0Fcut-off (filter-programming);10Gate Sustain/Release — a new SR "with gate release (you can go up in volume level)" (adsr-envelope). - Planned: a hard-restart command "in next note even if instrument did not have it", a pointer command into an instrument, "hifi" (note-independent) portamento and vibrato, a vibrato slider.
- Restart of note, per instrument: none ("all is left to you for preventing ADSR bugs"); Gate off N ticks before the end of the note; Hard Restart with four values applied N ticks before the end — Attack/Decay HR, Sustain/Release HR, First Control HR (written when the HR starts) and Second Control HR (written "the last tick before the new note comes"). N is capped by the pattern tempo: "Pattern Timing 5, Number of ticks 2: effective ticks are 2 … Pattern Timing 3, Number of ticks 4: effective ticks are 3". A per-instrument write order — Wave–ADSR or ADSR–Wave — exists "for letting you obtain good hardrestart (some one need accurate write timing …)". Two test-bit recipes: (a) HR AD/SR, first control with gate off, second control
$09(test + gate), at least 2 ticks, order ADSR–Wave; (b) both HR controls with gate off, one tick, and the instrument table's first row sets ADSR and wave$09before the real waveform, order ADSR–Wave (hard-restart). - The instrument table: 127 rows; column pairs in alternating colours;
Ins/Cancadd and remove cells. Every pair has a D/N (delay | number of repeats) field:0|0"the most used: no delay and no repeat";2|0= the next command starts after 3 ticks;2|3= repeated 3 more times, "so the next command starts after (2+1)(3+1)=12 completed ticks". Columns: AD and SR ($00–$FF), Wave ($00–$FF), Frequency — *absolute note (8 octaves, hard-coded, with four tuning tables differing in A4: 424, 434, 440, 442 Hz), relative note (0–31 up or down, "about +/- 2,5 octave" from the pattern note; Note+0 keeps it), relative frequency (0–32768, editable — "can be used for creating vibrato or portamento at the instrument level") and absolute frequency (0 = silence); Pulse — fixed (0–2048, editable) or relative; Filter cut-off — relative or absolute; Resonance — fixed, add or subtract, 0–15 hard-coded; Filter type — checkboxes high/band/low pass and filter on voice 1/2/3. A right-click "Set step to here" marks the row a column loops back to (rows shown coloured), "Set no step" ends it; the repeat count for the loop is 1–255 orinf. - Table of Values: one screen per instrument listing every value table; red = used, black = unused; "filling this tables of values are the most tedious work"; tables load/save to files "so you can create one table library"; a wizard is planned.
- Instrument examples (described, values in screenshots): SEA effect — noise with "very long Attack/Decay without a Sustain level", no restart; Emil's String — "a sort of arpeggio" plus "a big 'vibrato' to the pulse", slow release compensated by a one-tick hard restart; Oriental flute — a high pitch at the start and "a incremental vibrato", hard restart; Bass Drum — fixed notes, much noise; a second with lower notes and less noise; Filtered bass drum — follows the pattern note except for the fixed drum start, with "a 'portamento' onto the pulse" and a dynamically changing cut-off; Matt Gray's bass — "a vibrato in pulse width"; two Dane's lead sounds — hard restart with a pulse "portamento" or a pulse "vibrato"; two Matt Gray's snare drum sounds — fixed notes and noise, the second "less hard" (instrument-design, wavetable-programming, matt-gray).
- Conclusion: the current version adds conditional compilation "that remove the code that in not used in player, for saving raster time", MIDI keyboard input, a GoatTracker 2 instrument import; a digi track is a long-term plan. Project page: sourceforge.net/projects/jitt64/ (goattracker).
Practical takeaways#
- JITT64's answer to shared tables is the opposite extreme: every instrument owns eight command columns plus its own value tables, at the price of rastertime and of filling the tables by hand.
- Its D/N field is a compact way to write "hold for n ticks, repeat m times" per table row — compare SID-Wizard's
$00–$0Frepeat entries and GoatTracker's delay rows. - The hard-restart fields make explicit what other trackers hide: HR ADSR, a first and a second control byte, tick count, and the order in which waveform and ADSR are written.
Notable quotes#
"Filling this tables of values are the most tedious work for you … but this is what we have to pay for having freedom in implementing one instrument."
Relevance to the wiki#
Creates jitt64 and stefano-tognon; a third table model for instrument-tables; per-instrument hard-restart settings and recipes for hard-restart; command semantics for chord-arpeggio, vibrato, pitch-slide-and-portamento, pulse-width-modulation, filter-programming; tuning tables (424/434/440/442 Hz) worth noting next to sid-wizard's tunings.
To verify#
- (unverified) "Emil" is the SID composer Emil (Sami Ollikainen?) — the article gives only the first name.
Pages touched#
jitt64 · stefano-tognon · instrument-tables · hard-restart · chord-arpeggio · vibrato · pitch-slide-and-portamento · pulse-width-modulation · filter-programming · instrument-design · wavetable-programming · orderlist · multispeed · goattracker · matt-gray · sidin