# The DUET documentation

One page answers one question. The words all pages share are in the
[glossary](glossary.md).

| page | answers |
|---|---|
| [getting-started.md](getting-started.md) | how do I build it, run it, and find my way around? |
| [sessions-and-formats.md](sessions-and-formats.md) | what does each file kind hold, what does SAVE write, what comes back the same? |
| [pattern-editor.md](pattern-editor.md) | how do I write into the grid — cursor, fields, views, blocks, the FX picker, undo? |
| [system-clipboard.md](system-clipboard.md) | how do blocks move between DUETs, OpenMPT and other programs — and what text does a program write to hand DUET notes? |
| [clipboard-format.md](clipboard-format.md) | I am writing a program that should hand DUET a pattern — what exact text do I put on the clipboard? |
| [impulse-tracker.md](impulse-tracker.md) | the sample half: instruments, envelopes, the sample editor, the order list, the song knobs |
| [sid-wizard.md](sid-wizard.md) | the SID half: phrases, the song face, subtunes, tempo programs, instruments, chords |
| [the-duet.md](the-duet.md) | both at once: the SID setup, the SID columns' language, co-play, mute by voice |
| [instruments.md](instruments.md) | where the sounds live: the six lists, loading, importing, saving one, auditioning, jamming from anywhere |
| [dust.md](dust.md) | DUST, the SID synth: slots, D## patches, the four faces, its column's own effects |
| [dusk.md](dusk.md) | DUSK, the wavetable synth: slots, K## patches, wavetables from samples, the voice grid, its column's own effects |
| [mixer.md](mixer.md) | the mixer: strips, EQ, dynamics, the sends and returns, automation from the grid |
| [bounce.md](bounce.md) | how do I get audio out — the whole song, its stems, one block — and what is the save report? |
| [visuals.md](visuals.md) | what can I look at while it plays — the scope, the visualizer, the note pulse, the window's keys? |
| [troubleshooting.md](troubleshooting.md) | something is not working — the keys, the sound, the build, a file that will not open |
| [keys.md](keys.md) | what does every key do, and how do I make my own layout? |
| [cli.md](cli.md) | what can the command line do — playing, rendering, converting, inspecting? |
| [glossary.md](glossary.md) | what do the words on the screen mean? |

## For contributors — `docs/dev/`

| page | answers |
|---|---|
| [dev/architecture.md](dev/architecture.md) | how is the program put together — the library and the two frontends over one engine, the threads, the path from a file to the speaker? |
| [dev/libduet.md](dev/libduet.md) | how do I play a duet song from a program of my own — the C ABI and the Zig module: opening from bytes, rendering, the transport, the event ring and the sync markers, the two example players? |
| [dev/it-engine.md](dev/it-engine.md) | how is Impulse Tracker playback implemented, and how is it judged against OpenMPT? |
| [dev/sid-wizard-engine.md](dev/sid-wizard-engine.md) | how is SID-Wizard's player mirrored, and how is it held register-exact against the original? |
| [dev/sid-and-resid.md](dev/sid-and-resid.md) | how do reSID chips get their register writes sample-accurately, and how do the model, pan and quality change live? |
| [dev/dust-dusk-internals.md](dev/dust-dusk-internals.md) | how are the two synths built, what does their frozen contract promise, and how do the golden pins guard it? |
| [dev/the-mixer.md](dev/the-mixer.md) | what happens to the audio between the engines and the device — strips, EQ, dynamics, sends, taps, the level law? |
| [dev/meters-and-pulse.md](dev/meters-and-pulse.md) | where does every picture on screen come from, and which headless road can see it? |
| [dev/formats-internals.md](dev/formats-internals.md) | how are the writers held byte-identical, what is in a `.zon`, what does the project file hold and refuse? |
| [dev/testing.md](dev/testing.md) | how do I verify a change — the test roots, the four oracles and their bars, the headless twins, the instrument matrix, the corpus? |
| [dev/contributing.md](dev/contributing.md) | what are the rules that are rules, where do the working notes live, how do I add a corpus file? |

This set grows with the program: a page lands when the part of the
program it describes is written from the running binary and verified
against it; the `dev/` pages are written the same way, from the code.
`docs/keys.md` and `docs/cli.md` are generated by `tools/docgen.py`;
the screenshots in `docs/img/` are regenerated by `tools/shots.sh`.
