# Recording

Live recording captures the master output into a sample. One word to start, the same word to stop. The result is a first-class sample you can play, slice, and layer.

## rec

`rec` takes a name from the stack and toggles recording. Everything the engine outputs goes into a buffer until you call `rec` again:

```forth
"drums" rec     ;; start recording
```

Play something -- a pattern, a live input, anything that makes sound. When you're done:

```forth
"drums" rec     ;; stop recording, register sample
```

The recording is now available as a sample:

```forth
drums snd .
```

## Playback

Recorded samples are ordinary samples. Everything you can do with a loaded sample works here:

```forth
drums snd 0.5 speed .            ;; half speed
drums snd 0.25 begin 0.5 end .   ;; slice the middle quarter
drums snd 800 lpf 0.3 verb .     ;; filter and reverb
drums snd -1 speed .             ;; reverse
```

## Overdub

`overdub` (or `dub`) layers new audio on top of an existing recording. It wraps at the buffer boundary, so the loop length stays fixed:

```forth
"drums" overdub    ;; start layering onto drums
```

Play new material over the existing content. Stop with the same call:

```forth
"drums" overdub    ;; stop, register updated sample
```

If the target name doesn't exist yet, overdub falls back to a fresh recording.

## Building Layers

Record a foundation, then overdub to build up:

```forth
;; 1. record a kick pattern
"loop" rec
;; ... play kick pattern ...
"loop" rec

;; 2. overdub hats
"loop" dub
;; ... play hat pattern ...
"loop" dub

;; 3. overdub a melody
"loop" dub
;; ... play melody ...
"loop" dub

;; 4. play the result
loop snd .
```

Each overdub pass adds to what's already there. The buffer wraps, so longer passes layer cyclically over the original length.

## Slicing a Recording

Once you have a recording, carve it up:

```forth
loop snd 0.0 begin 0.25 end .    ;; first quarter
loop snd 0.25 begin 0.5 end .    ;; second quarter
loop snd 0.5 begin 0.75 end .    ;; third quarter
loop snd 0.75 begin 1.0 end .    ;; last quarter
```

Combine with randomness for variation:

```forth
loop snd
0.0 0.25 0.5 0.75 4 choose begin
0.5 speed
.
```

## Orbit Recording

`orec` records a single orbit instead of the master output. Useful for capturing one layer (e.g. drums on orbit 0) without bleeding other orbits in:

```forth
"drums" 0 orec     ;; start recording orbit 0
```

Play patterns routed to orbit 0. When done:

```forth
"drums" 0 orec     ;; stop, register sample
```

`odub` overdubs onto a single orbit:

```forth
"drums" 0 odub     ;; overdub orbit 0 onto "drums"
```

`rec` and `overdub` still record the master output as before.

## Constraints

Recordings have a 60-second maximum. Recording is native only -- not available in the WASM build.
