DUET docs: the grid and the two sides (summary)
Four user pages of duet (m64's own tracker, not yet published): the SID half (the-duet.md), the sid-wizard half (sid-wizard.md), the impulse-tracker half (impulse-tracker.md) and the shared pattern editor (pattern-editor.md). Together they describe how one grid carries IT channels, real SID voices, synth columns and a SID-Wizard module's tracks.
Key claims#
The SID setup (PROJECT page, F12)#
- The SETUP section holds up to four SID chips.
SHIFT+LEFT/RIGHTwalk a chip throughoff > 8580 > 6581 > off; switching the first chip on turns an[IT]session into a[DUET]and puts that chip's three SID columns on the grid (headers1:1 1:2 1:3, chip:voice); each further chip adds three more. Every chip has its own MODEL and PAN;[ MOVE SIDS HOME ]returns the SID columns to their fixed home at the end of the grid. - QUALITY is one knob for every chip — how reSID resamples the chip clock to the audio rate: FAST (cheapest, aliases), INTERP, RESAMPLE (band-limits, costliest). Model, pan and quality all change live, without stopping the song, and all are saved in the project (
.zon). - The DUST and DUSK rows under the chips arm the synth slots (see s-duet-docs-dust-dusk).
The SID columns' language#
- A SID column plays S## instruments — sid-wizard instruments held in the project's pool (load a
.swior import from a module). - The instrument field takes an S## number,
$3Ffor legato (L=, the next note slurs in without a restart), or a nibble effect$4x–$7F(waveform, sustain, release, chord);ENTERon an empty field lists them. - The effect field is two hex bytes (effect number + data) from SID-Wizard's own list: slides, portamento, vibrato, waveform and ADSR sets, table jumps, detune, pulse width, cutoff. The nibble families ride effect
$17— a volume translated from an IT block lands as17 5x, a sustain. - The note field carries no note-FX in an IT song — only a real
.swmhas them. Note off (===) gates the voice. - The cells live in the song's
.itas ordinary pattern bytes; only the project's SID setup makes them mean SID — which is why a duet is saved as a project.
Co-play, and mute/solo by voice#
- A co-play (
[CO]) pairs the.itwith a real.swminstead of armed chips: the module's tracks appear beside the channels, playing on the IT song's clock, with subtunes, tempo programs and the W## bank all present.+ CO-PLAY (SWM...)on the PROJECT page pairs (and, pressed again, unpairs);duet song.it tune.swmstarts paired. A session has one SID half or the other — armed chips must be switched off before pairing. Ctrl+M(orALT+F9) mutes the column under the cursor,ALT+F10solos it, and on the SID side the column is a voice. The receipts name where each mute is saved:1:1 MUTED (saved in the project)(one voice of one chip),SW01 MUTED (saved in the project)(one track of the co-play module),CH01 MUTED (saved in the song)(an IT channel, kept in the.itas other trackers keep it). Solo (SOLO 1:1 on (1 soloed)) leaves one voice ringing alone.
The project page#
- Top to bottom: SONG (name, author, GLOBAL VOL, MIX VOL, speed/tempo, IT CHANNELS, hop sizes) · FILE OPERATIONS (
OPEN,NEW,NEW IT,NEW SWM...,+ CO-PLAY,SAVE,SAVE AS,EXPORT WAV, and with chips onEXPORT SID -> .SWM) · SETUP (the SID setup) · FILES (what the open project holds). - Headless,
duet --sid-channels 4,5,6 song.it a.swi ...binds SID voices onto IT channels directly.
The SID-Wizard side ([SWM] sessions and co-plays)#
- A track column on the grid is a phrase — the header names both (
SW01:03↕28: track 1, phrase $03, 28 rows) and every column ends at its own length.+/-page through phrases on a track column;F6loops the phrases on screen as a combination. - The note column has effects of its own:
ENTERlists vibrato amplitudes$60–$6F(a placed one readsvb0–vbF,SHIFT+LEFT/RIGHTdial it), portamento, sync and ring on/off, gate on/off;===plays as SID-Wizard's gate-off. - SWM SONG face (
F11; in a co-playTABfrom the SONG page): the subtune strip, then one order list per track — tracks advance independently, "which is how SID-Wizard songs breathe". Keys:0–Fset the phrase,SHIFT+arrowscount it,nrepeats the row's entry below,Nplaces the first unused phrase,DELdrops the position. Entry kinds (Ctrl+Plists them): PHRASE (0–F), TRANSPOSE (t, semitones from the next pattern on), MAIN VOLUME (v), TRACK TEMPO (s), SEPARATOR RULE (+).ENTERon a phrase entry opens it in the pattern editor;SHIFT+ENTERopens the whole row (all tracks together);U##is a jump to another subtune. - Subtunes: a module holds several songs;
SHIFT+LEFT/RIGHTon the strip pick one,[+ SUBTUNE]adds one,F5plays the one shown. - Tempo: the strip's TEMPO is the subtune's default, shown as a pair (
6/4) when it is a funktempo. The TEMPO pane holds the module's tempo programs (◀ 01/3E ▶), each a looping list of tempos played row after row, sharing a 119-byte budget; values 0–127 per row; effects$12/$15(main and track tempo program) start one from the grid. - The SWI editor (a W## in a module's bank, an S## in a project's pool): parameters
ADSR(two bytes),HARD-RSTandHR(the hard-restart ADSR, frame count and type),VIB,OCTAVE, defaultCHORD,ARPspeed,MULTISPEEDrates for pulse and filter (see multispeed),WF1(first-frame waveform),TABLE-RESET;SIZE 46/120counts bytes against SID-Wizard's budget. Below, the three instrument-tables side by side —WF ARP DET,PULSE,FILTER— plus the CHORD pane, "SID-Wizard's own table programs, byte for byte"; table jumps are$09–$0Bin the effect list.SPACEjams the instrument while editing. - Chords: a bank of 32 (
◀ 01/20 ▶) shared by the whole module (in a duet, by the project); a chord is a list of semitone offsets ending in RETURN (hold the last note) or LOOP (cycle); played by arp$7F, FX$7x/ big-FX07(see chord-arpeggio). [ NEW SWM... ]asks for the size first:.swm1 SID, 3 tracks, ins cap 36 ·.sws2 SIDs, 6 tracks, cap 29 ·.swt3 SIDs, 9 tracks, cap 26 ·.swq4 SIDs, 12 tracks, cap 22. A duet's SID columns can leave as a real module:[ EXPORT SID -> .SWM ](the chip count picks the extension), or--export-swmheadless.
The Impulse Tracker side#
- Everything lives in the song's
.itand plays the same in other IT players. The SOUNDS switch on the PROJECT page picks SAMPLES mode (the grid's instrument column names P## slots directly) or INSTRUMENTS mode (I## instruments); a loaded song opens in the mode it was written in. - The I## instrument has five faces — GENERAL · MAP · VOL · PAN · PITCH. GENERAL: NNA (CUT / CONTINUE / NOTE-OFF / FADE — see new-note-actions), DUP + DCA (duplicate check and its action), FADEOUT, INS-VOL 0..128, PAN / P-PAN (pitch-pan spread around CENTRE), RANDOM vol/pan, CUTOFF / RESONANCE (the IT filter's start values,
--= untouched). MAP is one row per key (sample + note;aspreads the row under the cursor to every key). VOL/PAN/PITCH are the three instrument-envelopes: a switch row (on/off, SUS band, LOOP band, CARRY; on PITCH also FILTER, turning it into a filter envelope — togglese,c,f,s/S,l/L) over a node table (TICK and VAL;SHIFT+arrowsdrag a node,ENTERinserts at the midpoint,BKSPremoves). - The P## sample: C5 rate (
SHIFT+UP/DOWNa semitone,SHIFT+LEFT/RIGHTone hertz), VOL/SVOL (default note volume 0..64 and global level), PAN, LOOP/SUS (FORWARD, PINGPONG or off; SUS is a second loop used only while the note is held — see sample-looping), VIB auto-vibrato. Buttons:[LOAD],[SAVE](writes the sample as a.wavbeside the song at its own C5 rate, at once),[CLEAR]/[CLR+NOTES],[OSC],[EDIT]. EDIT SAMPLE works on a copy — CROP TO LOOP, REVERSE, NORMALIZE, dialed fades; an EDITS line stacks them,SPACEauditions, only its[ SAVE ]commits. - The order list (
F11, SONG page — see orderlist): each position names a pattern; the footer counts the song (233 orders · 179 patterns · 1 unused · total 41:07). Keys:0–Ftype the pattern (hex),SHIFT+arrowscount,nrepeats below,Nplaces a NEW section (first unused or fresh pattern),DEL/BKSPdrop,+/-place+++(skip) and---(end),ENTERopens the pattern,F7plays from the position. The CHANNELS table beside it holds per-channel VOL, PAN (L/M/Rhard left/centre/right,Ssurround) and a MUTE cell; with SID chips on, the same table places the chips' voices. - Song knobs (what the
.itheader holds): GLOBAL VOL 0..128 (the volumeVxxmoves), MIX VOL 0..128 (48 is Impulse Tracker's default, 128 is unity; both scale everything, SID and synth columns included), SPEED/TEMPO (asAxx/Txxset them), IT CHANNELS (lowering it parks columns — they keep playing; raising brings them back), CH-HOP / P-HOP (how farCtrl+LEFT/RIGHTandCtrl+"+"/"-"hop).
The pattern editor (the grid)#
F2from anywhere;TABflips to the instruments page. Rows numbered in hex. Fields per column kind: channelCH01= note · instrument · volume · effect (letter + value); SID column1:1and trackSW01:03↕28= note · instrument · effect (two hex bytes); synth columnDUST1/DUSK1= note · instrument · volume · effect. Where a shorter pattern ends, a rule (── 20 ──) closes the column and the longer ones continue. A│seam separates channels from the SID/synth blocks; SPLIT (Ctrl+T) pins those blocks to the right edge.- Cursor: arrows move field to field (a channel's effect field is two stops: letter, value);
PGUP/PGDNjump 16 rows;Ctrl+LEFT/RIGHThop CH-HOP columns;ALT+LEFT/RIGHTjump between zones (channels / synth block / SID block / co-play tracks) and wrap;ALT+UP/DOWNadd and remove IT channels from the grid. - EDIT and JAM:
SPACEtoggles. In JAM the letter rows play the current instrument without writing. - Typing: piano rows
Z S X D C V ...(lower octave),Q 2 W 3 E R ...(upper),[]octave;`note off===,1note cut^^^,~fade~~~,.clears. Instrument fields are shifting hex (type both digits); a channel's volume field is decimal 0–64;SHIFT+LEFT/RIGHTtranspose a note a semitone,SHIFT+UP/DOWNan octave. A typed note carries the current jam instrument (footerP01 S01, stepped with;and'). - Patterns:
+/-step,Ctrl+Ggoes to a number,Lsets pattern length (hex, up to$C8). Every pattern number exists from the start; the order list decides what plays. - Views:
Ctrl+Vcycles a co-play's grid view — IT (channels alone), UNITY (both on one row axis), POLY (a shorter pattern wraps and repeats until the longest ends), SWM (tracks alone).Ctrl+Wcycles channel width (FULL / NOTE+INS / NOTE);Ctrl+Ffollow;F3cycles the note pulse's seven looks. - Marks and blocks:
ALT+Bstarts a mark that follows the cursor over rows and fields;ENTER/ALT+Eholds it;ALT+Dgrows it a rung at a time (beat, bar, rest of column, channel, whole side);ALT+Lmarks the channel, twice the side. Verbs:ALT+C/ALT+Zcopy/cut,ALT+Ppaste,ALT+Mpaste into empty fields only,ALT+SHIFT+Ptranslate paste,ALT+Q/ALT+Atranspose ±1 semitone (+SHIFT±1 octave),ALT+Sset every note to the current instrument,DELclear.Ctrl+Popens the block command list (plus INTERPOLATE, REVERSE ROWS, ROLL UP/DOWN, BOUNCE TO AUDIO =Ctrl+B). - Cross-column paste: same kind → the block lands whole. Between the two kinds of SID column (a duet's SID channels and a module's tracks) notes and effects cross (one effect language); only the instrument stays behind (different banks) —
ALT+Sstamps the destination's. Onto a different kind altogether, plain paste carries notes alone;ALT+SHIFT+P(translate paste) carries the effects too, respelled: an ITH64vibrato lands on a track as0825(SID-Wizard vibrato, nearest depth/rate), a volume becomes a sustain nibble, an IT arpeggio becomes a chord (the report names the chord slots written). A TRANSLATE REPORT names every conversion and drop (2 FX ACROSS, 0 DROPPED); an effect crosses only as letter+value pair. - Sync markers:
ALT+Gopens the SYNC MARKER popup on the cursor's cell — an inaudible point with a decimal value 0–65535, saved in the.zon, delivered to a host program (demo, game) playing the song through libduet when the row plays. Markers sit only on IT-grid columns (channel, SID or synth column); a SID-Wizard track refuses, and so does a bare[IT]session (a marker lives in the.zon). A reused pattern fires its marker at every occurrence; a marked cell wears an amber wash. - The FX picker:
ENTERon a volume or effect field lists what that field can take — the IT lettersA–Z, the ten volume commands, the SID-Wizard effects by number, and DUET's send commandsa–d— with a teaching line per entry. On a track's or SID column's empty instrument field it opens the INS-FX list (legato + nibble effects); on a filled one it jumps to that instrument. - Undo:
Ctrl+Z/Ctrl+Yper target (the pattern being edited is its own undo target);Ctrl+Uopens the undo history,ENTERtravels to an entry.
Practical takeaways#
- The two SID column kinds speak one effect language, so material moves freely between a duet's SID channels and a module's tracks; the translate paste (
ALT+SHIFT+P) is the road for IT ↔ SID material and reports every conversion. - IT vibrato → SID-Wizard vibrato, IT volume → sustain nibble (
17 5x), IT arpeggio → chord: a concrete crosswalk between the impulse-tracker and sid-wizard effect worlds (compare effect-command-crosswalk). - MIX VOL 48 = Impulse Tracker's default, 128 = unity — useful when levelling an
.itfor other players. - SID-Wizard workflow survives intact inside DUET: independent per-track order lists, transpose/tempo entries, funktempo pairs, tempo programs on a 119-byte budget, 32 shared chords,
.swiinstruments with the standard three tables.
Notable quotes#
- "SID columns in an IT song carry no note-FX — only a real
.swmhas them." - "Each cell places a phrase at that position; the tracks advance independently, which is how SID-Wizard songs breathe."
- "TRANSLATE: an effect is its letter AND its value - the mark holds only one stop of the pair."
Relevance to the wiki#
First full description of duet's editing surface: the SID setup, both sides' vocabularies, the cross-column translate paste and the sync markers. Grounds the duet entity rewrite and cross-references the SID-Wizard concepts (hard-restart, instrument-tables, shuffle-funktempo, multispeed, chord-arpeggio) as they appear in a modern host.
Pages touched#
duet (rewritten by the maintainer from this and the sibling summaries s-duet-docs-formats, s-duet-docs-dust-dusk, s-duet-docs-clipboard, s-duet-docs-sounds-mixer-bounce).