> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sampler.meiji.industries/llms.txt
> Use this file to discover all available pages before exploring further.

# Uzi

> Uzi Turntablism technique, defaults, and preview examples.

export const TurntablismPlayer = ({diagramUrl, diagramAlt, ahhUrl, freshUrl, ahhLabel, freshLabel, plotBounds, diagramDurationSeconds, techniqueDurationSeconds}) => {
  const cycleProgress = currentTime => {
    if (currentTime >= techniqueDurationSeconds) return 1;
    return currentTime % diagramDurationSeconds / diagramDurationSeconds;
  };
  const createTurntablismPlayerController = ({requestFrame, cancelFrame, updateProgress, setActiveSource}) => {
    let activeAudio = null;
    let animationFrame = null;
    const stopAnimation = () => {
      if (animationFrame !== null) {
        cancelFrame(animationFrame);
        animationFrame = null;
      }
    };
    const animate = audio => {
      if (audio !== activeAudio) return;
      updateProgress(audio);
      if (!audio.paused && !audio.ended) {
        animationFrame = requestFrame(() => animate(audio));
      }
    };
    return {
      handlePlay(source, audio, otherAudio) {
        activeAudio = audio;
        if (otherAudio && !otherAudio.paused) otherAudio.pause();
        stopAnimation();
        setActiveSource(source);
        animationFrame = requestFrame(() => animate(audio));
      },
      handlePause(audio) {
        if (audio !== activeAudio) return;
        stopAnimation();
        updateProgress(audio);
        activeAudio = null;
        setActiveSource(null);
      },
      handleProgress(audio) {
        if (activeAudio === null || audio === activeAudio) updateProgress(audio);
      },
      stopAnimation
    };
  };
  const ahhRef = useRef(null);
  const freshRef = useRef(null);
  const playerRef = useRef(null);
  const [progress, setProgress] = useState(0);
  const [activeSource, setActiveSource] = useState(null);
  const updateProgress = audio => {
    if (!audio || !Number.isFinite(diagramDurationSeconds) || diagramDurationSeconds <= 0 || !Number.isFinite(techniqueDurationSeconds) || techniqueDurationSeconds <= 0) {
      return;
    }
    setProgress(Math.min(1, Math.max(0, cycleProgress(audio.currentTime))));
  };
  if (!playerRef.current) {
    playerRef.current = createTurntablismPlayerController({
      requestFrame: callback => requestAnimationFrame(callback),
      cancelFrame: frame => cancelAnimationFrame(frame),
      updateProgress,
      setActiveSource
    });
  }
  const handlePlay = (source, audio) => {
    const other = source === "ahh" ? freshRef.current : ahhRef.current;
    playerRef.current.handlePlay(source, audio, other);
  };
  const handlePause = audio => {
    playerRef.current.handlePause(audio);
  };
  useEffect(() => () => playerRef.current.stopAnimation(), []);
  const playheadPercent = (plotBounds.left + progress * (plotBounds.right - plotBounds.left)) * 100;
  return <div className="not-prose my-6 overflow-hidden rounded-xl border border-gray-200 dark:border-white/15">
      <div className="relative bg-[#101820]">
        <img src={diagramUrl} alt={diagramAlt} className="block h-auto w-full" />
        <div aria-hidden="true" className="pointer-events-none absolute top-[16%] bottom-[19%] w-0.5 bg-fuchsia-300 shadow-[0_0_8px_rgba(244,114,182,0.9)]" style={{
    left: `${playheadPercent}%`
  }} />
      </div>
      <p className="px-4 pt-3 text-sm text-gray-600 dark:text-gray-300" aria-live="polite">
        {activeSource ? `Playing ${activeSource}. The playhead restarts with each scratch cycle and holds at the end during release.` : "Choose either source to audition the notation."}
      </p>
      <div className="grid gap-4 p-4 sm:grid-cols-2">
        <div>
          <label className="mb-1 block text-sm font-medium" htmlFor={`${ahhUrl}-audio`}>
            ahh.wav
          </label>
          <audio id={`${ahhUrl}-audio`} ref={ahhRef} controls preload="none" aria-label={ahhLabel} className="w-full" onPlay={event => handlePlay("ahh", event.currentTarget)} onPause={event => handlePause(event.currentTarget)} onEnded={event => handlePause(event.currentTarget)} onTimeUpdate={event => playerRef.current.handleProgress(event.currentTarget)} onSeeking={event => playerRef.current.handleProgress(event.currentTarget)} onSeeked={event => playerRef.current.handleProgress(event.currentTarget)} onLoadedMetadata={event => playerRef.current.handleProgress(event.currentTarget)}>
            <source src={ahhUrl} type="audio/wav" />
            Your browser cannot play this audio inline. <a href={ahhUrl}>Open ahh.wav</a>.
          </audio>
        </div>
        <div>
          <label className="mb-1 block text-sm font-medium" htmlFor={`${freshUrl}-audio`}>
            fresh.wav
          </label>
          <audio id={`${freshUrl}-audio`} ref={freshRef} controls preload="none" aria-label={freshLabel} className="w-full" onPlay={event => handlePlay("fresh", event.currentTarget)} onPause={event => handlePause(event.currentTarget)} onEnded={event => handlePause(event.currentTarget)} onTimeUpdate={event => playerRef.current.handleProgress(event.currentTarget)} onSeeking={event => playerRef.current.handleProgress(event.currentTarget)} onSeeked={event => playerRef.current.handleProgress(event.currentTarget)} onLoadedMetadata={event => playerRef.current.handleProgress(event.currentTarget)}>
            <source src={freshUrl} type="audio/wav" />
            Your browser cannot play this audio inline. <a href={freshUrl}>Open fresh.wav</a>.
          </audio>
        </div>
      </div>
    </div>;
};

# Uzi

A rapid, small-travel forearm vibration with a shallow vinyl-hand amplitude buzz.

Default division 1/8, Pattern Uzi, Rate 8th, Gate Straight, Swing 0, Humanize 15%.

Use it for a high-frequency tremolo-like accent that feels tense and physical.

## Preview presets

### 1 — Uzi

**Effective controls:** Pattern `Uzi` · Motion `Forward` · Division `1/8` · Rate `8th` · Gate `Straight` · Swing `0%` · Humanize `20%`

This is the catalog default preview.

<TurntablismPlayer diagramUrl="/assets/turntablism/scratch_uzi/1-uzi/diagram.svg" diagramAlt="TTM diagram for Uzi preview Uzi: blue audible record motion, dark gray muted record motion, light gray intentional holds, white fader clicks, open hold markers, and timing guides." ahhUrl="/assets/turntablism/scratch_uzi/1-uzi/ahh.wav" freshUrl="/assets/turntablism/scratch_uzi/1-uzi/fresh.wav" ahhLabel="ahh.wav playable example for Uzi preview Uzi" freshLabel="fresh.wav playable example for Uzi preview Uzi" plotBounds={{ left: 0.066667, right: 0.966667 }} diagramDurationSeconds={0.3333333333333333} techniqueDurationSeconds={2.6666666666666665} />

### 2 — 1/4 Cycle

**Effective controls:** Pattern `Uzi` · Motion `Forward` · Division `1/4` · Rate `8th` · Gate `Straight` · Swing `0%` · Humanize `20%`

**Overrides:** Division → 1/4

<TurntablismPlayer diagramUrl="/assets/turntablism/scratch_uzi/2-1-4-cycle/diagram.svg" diagramAlt="TTM diagram for Uzi preview 1/4 Cycle: blue audible record motion, dark gray muted record motion, light gray intentional holds, white fader clicks, open hold markers, and timing guides." ahhUrl="/assets/turntablism/scratch_uzi/2-1-4-cycle/ahh.wav" freshUrl="/assets/turntablism/scratch_uzi/2-1-4-cycle/fresh.wav" ahhLabel="ahh.wav playable example for Uzi preview 1/4 Cycle" freshLabel="fresh.wav playable example for Uzi preview 1/4 Cycle" plotBounds={{ left: 0.066667, right: 0.966667 }} diagramDurationSeconds={0.6666666666666666} techniqueDurationSeconds={2.6666666666666665} />

### 3 — 1/16 Cycle

**Effective controls:** Pattern `Uzi` · Motion `Forward` · Division `1/16` · Rate `8th` · Gate `Straight` · Swing `0%` · Humanize `20%`

**Overrides:** Division → 1/16

<TurntablismPlayer diagramUrl="/assets/turntablism/scratch_uzi/3-1-16-cycle/diagram.svg" diagramAlt="TTM diagram for Uzi preview 1/16 Cycle: blue audible record motion, dark gray muted record motion, light gray intentional holds, white fader clicks, open hold markers, and timing guides." ahhUrl="/assets/turntablism/scratch_uzi/3-1-16-cycle/ahh.wav" freshUrl="/assets/turntablism/scratch_uzi/3-1-16-cycle/fresh.wav" ahhLabel="ahh.wav playable example for Uzi preview 1/16 Cycle" freshLabel="fresh.wav playable example for Uzi preview 1/16 Cycle" plotBounds={{ left: 0.066667, right: 0.966667 }} diagramDurationSeconds={0.16666666666666666} techniqueDurationSeconds={2.6666666666666665} />

### 4 — Scribble

**Effective controls:** Pattern `Scribble` · Motion `Forward` · Division `1/8` · Rate `8th` · Gate `Straight` · Swing `0%` · Humanize `20%`

**Overrides:** Pattern → Scribble

<TurntablismPlayer diagramUrl="/assets/turntablism/scratch_uzi/4-scribble/diagram.svg" diagramAlt="TTM diagram for Uzi preview Scribble: blue audible record motion, dark gray muted record motion, light gray intentional holds, white fader clicks, open hold markers, and timing guides." ahhUrl="/assets/turntablism/scratch_uzi/4-scribble/ahh.wav" freshUrl="/assets/turntablism/scratch_uzi/4-scribble/fresh.wav" ahhLabel="ahh.wav playable example for Uzi preview Scribble" freshLabel="fresh.wav playable example for Uzi preview Scribble" plotBounds={{ left: 0.066667, right: 0.966667 }} diagramDurationSeconds={0.6666666666666666} techniqueDurationSeconds={2.6666666666666665} />
