# PO-33 behavior contract — first local build

Evidence checked 22 October 2026. **M** = official manual; **C** = corroborated community observation; **A** = implementation approximation. No firmware or device artwork is included. No existing clone's code is copied. At the user's subsequent request, four community PO-33 melodic recordings were added to the local build; [sound provenance and limits](SOUND-SOURCES.md).

## Control map

| Gesture | Behavior / evidence |
|---|---|
| SOUND + 1–16 | Select one of eight melodic / eight drum banks. M |
| Pads in perform mode | Melodic pitch or drum slice. M |
| Tap WRITE; pads | Toggle step editing; place/remove the last played note/slice. M |
| PLAY | Start/stop the active pattern/chain. M |
| Hold WRITE + pads while playing | Quantized live note entry. M |
| PATTERN + pads, in order | Select/chain patterns; repeated numbers allowed, max 128. M |
| WRITE + PATTERN + pad | Copy active pattern. RECORD + PATTERN clears it. M |
| Tap FX | Cycle Tone (A pitch/B volume), Filter (A LP/HP/B resonance), Trim (A start/B length). M |
| BPM + knobs | A swing; B tempo, 60–240. Tap BPM: 80/120/140. M |
| BPM + pad | Master volume 1–16. M |
| RECORD + pad | Record into that bank while RECORD remains held; release ends capture. M; continuing after pad release is C |
| RECORD + SOUND | Delete selected sound. M |
| WRITE + SOUND + pad | Copy sound; melodic → drum splits the trimmed region equally. M/C |
| WRITE + SOUND + drum bank, then pad | Copy source region into a destination slice. M/C |
| Hold lit step + A/B | Change note/slice and melodic gate length. Hold about 1 second to adopt its settings. C |
| Hold drum step + tap BPM | Step retrigger counts 1,2,3,4,6,8. C |
| Hold WRITE + knobs during play | Record Tone/Filter parameter motion; Trim isn't automated. M |
| FX + pad while playing | Momentary global punch-in effect. With write active, save it to the steps traversed. M |
| FX + 16 with write active | Write bypass over traversed steps; keep held for a complete bar to erase all FX. M; selective clearing corroborated by tutorial summary |

Mouse: hold a modifier and use keyboard pads, or hold its keyboard shortcut and click pads. Right-click a modifier to latch for one-mouse operation (browser convenience). Keyboard pad rows: `1234 / QWER / ASDF / ZXCV`; modifiers: Shift SOUND, Alt PATTERN, Control WRITE, G FX, B BPM, R is already pad 8 so RECORD is Backquote. Space PLAY; Tab toggles WRITE. Escape releases holds/stops. Knobs support drag, wheel, and arrow keys.

## Constraints and implementation decisions

- M: 16 banks, 16×16 patterns, 40 seconds shared sample memory. Imported files replace line input in this browser version.
- C: four voices total; every bank is monophonic, including all slices in a drum bank. A: steal oldest voice on overflow; exact hardware priority unresolved.
- C: melodic pad offsets in physical row order: `7,8,10,11 / 0,2,3,5 / -5,-4,-2,-1 / -12,-10,-9,-7`. Original sample is pad 5. Independently matched clone's mapping and scale calculator; no physical frequency measurements yet.
- C: sample rate 23,437.5 Hz, eight-bit μ-law. A: signed-order G.711 expansion/nearest code, bandlimited mono resampling, browser output resampling. The backup decoder explicitly labels its codec inference unverified. This is not bit-perfect emulation.
- C: copies share source storage; changing trim doesn't free memory. Unreferenced sources are collected.
- C: drum recording uses transients; melodic-to-drum copying uses equal divisions. A: energy-onset detection with a refractory interval; hardware thresholds/padding unresolved. Unused slices are silent, not duplicated hits.
- A: tone pitch range ±12 semitones, volume/gain and resonant filter curves need hardware calibration. Knob controls are normalized browser values, not proven hardware numeric units.

## Punch-in assignments

| Pad | Assignment | Initial implementation contract |
|---|---|---|
| 1–4 | Loop 16 / Loop 12 / Loop short / Loop shorter | Frozen recent audio, repeat at 1/16, 1/12, 1/32, 1/48 note. Capture phase/window is A. |
| 5–6 | Unison / Unison low | Detuned sample taps; lower version includes octave-down tap. A. |
| 7–8 | Octave up / down | Sample-rate change ±12 semitones; duration changes with pitch. A for transition behavior. |
| 9–10 | Stutter 4 / 3 | Tempo-synced gating; exact duty/phase A. |
| 11–12 | Scratch / fast | Forward/back traversal of frozen audio with varying speed. A. |
| 13 | 6/8 quantize | Reposition sixteenth-note onsets onto a triplet grid; exact hardware algorithm unresolved. A. |
| 14 | Retrigger pattern | Read from the start of the pattern while master steps continue; held/recorded regions repeat its first beat. A; hardware retrigger cycle unresolved. |
| 15 | Reverse | Reverse trimmed sample playback, including active voices. C; transition phase A. |
| 16 | No effect | Bypass; quantized overwrite of recorded FX while writing. M. |

Assignments are M. Audible algorithms are expressly approximations until A/B hardware captures exist. Never substitute a filter for one of these temporal effects.

## Targeted source review

- [Official online guide](https://teenage.engineering/guides/po-33/en) and [official PDF](https://assets.teenage.engineering/_img/5a8583907d05480004ecaf33_original.pdf): control authority and physical layout. Product photo viewed as reference; redrawn with HTML/CSS/canvas.
- [jjbenson85/po-33](https://github.com/jjbenson85/po-33): README/source inspected. Tone.js/jQuery clone; latched SOUND and pattern-copy workflow differ from manual. Useful interval corroboration, not behavioral authority. No code reused. Four melodic audio assets were subsequently incorporated for the requested local build; no separate redistribution license established. See the sound provenance ledger.
- [rileyjshaw/po-33](https://github.com/rileyjshaw/po-33): GPL-3.0 sample loader, not emulator. Documentation warns gaps affect hardware slicing. No code reused.
- [smaudd/PO-33](https://github.com/smaudd/PO-33): interactive explanatory guide, not audio engine; README/entry point reviewed. No code/assets reused.
- [danielpradilla/po-backup-decode](https://github.com/danielpradilla/po-backup-decode/blob/main/docs/FORMAT.md): source aliases and 8 melodic + 128 drum objects; codec/rate explicitly inferred; pattern interpretation unmapped. Not proof of DSP fidelity.
- [cspotcode/PO-33-KO-backup-re](https://github.com/cspotcode/PO-33-KO-backup-re): early transfer reverse engineering; README reports TE sample format. No backup interchange implemented here.
- [Browser Operator](https://po33-and-me.onrender.com/): HTML and shipped JS inspected; Tone.js/Vue web sampler, not firmware evidence. No image or samples reused.
- [Cubeleco hardware observations](https://cubeleco.blogspot.com/2019/05/po-33-ko-hidden-features.html), [Brock Wilcox's own-device notes](https://thelackthereof.org/pocket-operator-po-33), [Reddit original-note discussion](https://www.reddit.com/r/pocketoperators/comments/jeqvpx/po33_cheat_sheet_and_resources/), [scale calculator](https://github.com/nikitabogdan/pocket-scale-calculator/blob/main/src/main/kotlin/types/POScales.kt): community corroboration, not manufacturer specifications.
- [XNB complete tutorial](https://www.youtube.com/watch?v=PcBQY2jZ7sg): direct video fetch unavailable. [Indexed chapter summary](https://videohighlight.com/v/PcBQY2jZ7sg?language=en&view=defaultSummary) located sampling, editing (17–44 min), FX (45–50 min) and copy sections. It contains obvious transcription/summary errors, so disputed controls were resolved in favor of the official guide. **Video/audio demonstrations have not been directly reviewed; do not call this hardware verification.**

## Prioritized next verification

1. Direct XNB/hardware A/B recordings: exact FX capture phase, stutter duty, unison voices, retrigger cycling, 6/8 timing.
2. Measure sample codec, pitch/filter curves, gate/voice stealing and live quantization boundaries.
3. Calibrate transient slicing against identical hardware recordings; slice-copy edge cases.
4. Real Mac Safari/Chrome audible test, microphone capture, long-session/background timing; then real iPhone touch/audio recovery.
5. Hardware sync/data-transfer interoperability is deferred; local session files are a separate format.

## MD-33 LCD and finishes (2026-10-22)

The device LCD now keeps the edit page and both A/B knob labels and values visible: Tone (pitch/volume), Filter (bipolar LPF/HPF and resonance), Trim (start/length with a region bar). It also displays bank/sample name, pattern, BPM, transport/write/record state, current step, voices, punch-in FX name, and contextual hold-button instructions. Holding BPM switches the readouts to swing/tempo; holding a step shows its note/slice and gate length. Drum retriggers use BPM, not knob B. Source context: the official guide documents the edit cycle, and [Brock Wilcox's own-device notes](https://thelackthereof.org/pocket-operator-po-33) describe ton/FLt/tri, Ptc/UoL, punctuation bubbles and trim bars. This is a more explicit MD-33 presentation of those controls, not an exact segment-for-segment LCD replica.

Boxing is original MD-33 choreography, not verified hardware animation mapping. Pads trigger jabs, crosses, uppercuts, combos, ducks, weaves, hops or flexes. Effects drive looping combos, unison shadow boxing, octave hops/ducks, stutter weaving, scratch swaying, a triplet two-step, reverse moonwalking and bypass guarding. Playback follows steps; bank, edit-page, write and recording actions have their own moments. System reduced-motion preference keeps poses and functional readouts while removing continuous movement.

Seven hardware finishes are Groove Purple, Studio Cobalt, Midnight Graphite, Alpine Ivory, Burnt Copper, Deep Sea and Black Cherry. The eighth is Banana Disco. The picker beneath the device stores the preference in this browser separately from musical sessions; it does not modify samples, patterns or backup files.
