AMEN AUDIO
AMEN AUDIO / MANUALDownload Markdown ↓

TIME GRAB — punch-in timestretch

Hold a button to pull the incoming track into slow motion at approximately its original pitch. Release to return to the current live track in 5 ms. There is no capture step, transport, clock or menu.

Play

  • Button 1, hold: engage stretch. Release for live dry audio.
  • Knob 1 — Stretch: 1–8× duration, with approximately 2.72× at the midpoint.
  • Knob 2 — Texture: 16–120 ms grains, from short flutter to smoother chunks.
  • Button 2, while Button 1 is held: freeze progression through the source. Grains keep sounding. Release Button 2 to resume slow progression. Button 2 alone does not engage or latch the effect.
  • Encoder, hold one second: quiet 220 Hz output diagnostic while held.

The initial settings are approximately 2.72× stretch and 42 ms grains. Knobs take control when moved. Physical and USB MIDI button states are combined.

LED 1 meters the input (green, red near clipping). LED 2 is blue for dry, orange for stretch, violet for freeze, pink for exhausted history, and white for the diagnostic tone.

Feed stereo audio into the Pod audio input; USB is MIDI/control, not audio. Dry passes through with no extra software buffering. The lowest 3.5% of the Stretch knob is a 1× detent: pressing Button 1 leaves live timing unchanged. Stretch starts from the current input sample and accumulates delay afterward; there is no fixed pre-roll. Entry and exit use 5 ms fades. Returning the knob to 1× also fades back to current live input. No onset detection or beat quantization is performed.

What it does to time

At 4× stretch, one second held traverses 250 ms of input. The live source keeps running; release discards the accumulated lag and returns to the present. Stereo channels use the same timing but remain separate.

This is a characterful granular effect: pitch is approximately preserved, while drums can flutter, sustained tones can phase, and large ratios smear. It is not a transparent full-mix stretching algorithm. Grain duration changes apply gradually at new grain births. Rapid re-presses during an exit fade finish that fade (at most 5 ms), then catch fresh history.

Two minutes of stereo history use 46,080,000 bytes of the 64 MiB SDRAM, leaving approximately 20 MiB free. At 8× stretch this supports about 137 seconds of continuous holding before history needs refreshing. At that limit the effect fades to live over 5 ms and starts a fresh stretch, rather than latching a grain. Recording continues throughout ordinary stretching. Only an explicitly held Button 2 can suspend the writer when frozen history reaches its limit; releasing Button 2 then fades into fresh audio and resumes stretching automatically.

Build and install

make -C pod/TimeGrab/tests test demo
make -C pod/TimeGrab -j4

The output is build/TimeGrab.bin, a BOOT_QSPI application for 0x90040000. It requires the Daisy bootloader already used by the other recent Pod effects. With the Daisy updater in DFU mode:

make -C pod/TimeGrab program-dfu

This replaces the QSPI application, retaining the bootloader and SD contents. For the existing bootloader, tap RESET and press BOOT during its grace period. Do not flash this QSPI binary to internal flash. Time Grab is installed on the connected Pod. A passive post-flash check showed advancing audio frames, input/output activity and zero reported overruns or reader/window faults. Listening checks remain; see RELEASE_CHECK.md.

USB MIDI and diagnostics

CC 1/2 set Stretch/Texture, 0–127. CC 20/21 set Button 1/2, where values ≥64 mean held. CC 116 controls the diagnostic tone. CC 117 ≥64 resets CPU stats and the callback overrun counter. CC 120/123 releases remote controls; physical buttons can still keep the effect active. CC 119=127 enters the Daisy updater.

One-second heartbeat: F0 7D 54 47 02 <frames:5x7> <input> <output> <flags> <CPU mean> <CPU peak> <overruns:2x7> <faults:2x7> F7. Multibyte integers are little-endian 7-bit groups. Flags: grab=1, freeze button=2, tone=4, exhausted=8, wet path active=16. Levels are 0–127; CPU percentages are capped at 127. Faults count invalid reader bounds, empty windows or omitted grain births. Overruns measure callback wall time against the four-frame budget, not all possible DMA/audio failures. USB handling stays outside the audio IRQ.