{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "scroll-003",
  "type": "registry:block",
  "title": "Scroll 003",
  "author": "Kenney <https://kenney.nl>",
  "description": "A smooth, continuous scrolling sound effect, ideal for indicating content navigation, a list moving, or a wheel spinning within a UI.",
  "files": [
    {
      "path": "registry/soundcn/sounds/scroll-003/scroll-003.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const scroll003Sound: SoundAsset = {\n  name: \"scroll-003\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 1.000,\n  format: \"mp3\",\n  license: \"CC0\",\n  author: \"Kenney\",\n};\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-types.ts",
      "content": "export interface SoundAsset {\r\n  /** Unique identifier for the sound */\r\n  name: string;\r\n  /** Base64-encoded data URI (data:audio/mpeg;base64,...) */\r\n  dataUri: string;\r\n  /** Duration in seconds */\r\n  duration: number;\r\n  /** Audio format */\r\n  format: \"mp3\" | \"wav\" | \"ogg\";\r\n  /** License identifier */\r\n  license: \"CC0\" | \"OGA-BY\" | \"MIT\";\r\n  /** Original author/creator */\r\n  author: string;\r\n}\r\n\r\nexport interface UseSoundOptions {\r\n  /** Volume level from 0 to 1. Default: 1 */\r\n  volume?: number;\r\n  /** Playback speed multiplier. Default: 1 */\r\n  playbackRate?: number;\r\n  /** If true, calling play() stops current playback first. Default: false */\r\n  interrupt?: boolean;\r\n  /** If false, play() does nothing. Useful for user preferences. Default: true */\r\n  soundEnabled?: boolean;\r\n  /** Called when playback starts */\r\n  onPlay?: () => void;\r\n  /** Called when playback ends naturally */\r\n  onEnd?: () => void;\r\n  /** Called when pause() is called */\r\n  onPause?: () => void;\r\n  /** Called when stop() is called */\r\n  onStop?: () => void;\r\n}\r\n\r\nexport type PlayFunction = (overrides?: {\r\n  volume?: number;\r\n  playbackRate?: number;\r\n}) => void;\r\n\r\nexport interface SoundControls {\r\n  stop: () => void;\r\n  pause: () => void;\r\n  isPlaying: boolean;\r\n  duration: number | null;\r\n  sound: SoundAsset;\r\n}\r\n\r\nexport type UseSoundReturn = readonly [PlayFunction, SoundControls];\r\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-engine.ts",
      "content": "let audioContext: AudioContext | null = null;\nconst bufferCache = new Map<string, AudioBuffer>();\n\nexport function getAudioContext(): AudioContext {\n  if (!audioContext) {\n    audioContext = new AudioContext();\n  }\n  return audioContext;\n}\n\nexport async function decodeAudioData(dataUri: string): Promise<AudioBuffer> {\n  const cached = bufferCache.get(dataUri);\n  if (cached) return cached;\n\n  const ctx = getAudioContext();\n  const base64 = dataUri.split(\",\")[1];\n  const binaryString = atob(base64);\n  const bytes = new Uint8Array(binaryString.length);\n  for (let i = 0; i < binaryString.length; i++) {\n    bytes[i] = binaryString.charCodeAt(i);\n  }\n\n  const audioBuffer = await ctx.decodeAudioData(bytes.buffer.slice(0));\n  bufferCache.set(dataUri, audioBuffer);\n  return audioBuffer;\n}\n\nexport interface PlaySoundOptions {\n  volume?: number;\n  playbackRate?: number;\n  onEnd?: () => void;\n}\n\nexport interface SoundPlayback {\n  stop: () => void;\n}\n\nexport async function playSound(\n  dataUri: string,\n  options: PlaySoundOptions = {}\n): Promise<SoundPlayback> {\n  const { volume = 1, playbackRate = 1, onEnd } = options;\n  const ctx = getAudioContext();\n  if (ctx.state === \"suspended\") {\n    await ctx.resume();\n  }\n\n  const buffer = await decodeAudioData(dataUri);\n  const source = ctx.createBufferSource();\n  const gain = ctx.createGain();\n\n  source.buffer = buffer;\n  source.playbackRate.value = playbackRate;\n  gain.gain.value = volume;\n\n  source.connect(gain);\n  gain.connect(ctx.destination);\n\n  source.onended = () => {\n    onEnd?.();\n  };\n\n  source.start(0);\n\n  return {\n    stop: () => {\n      try {\n        source.stop();\n      } catch {\n        // No-op if already stopped.\n      }\n    },\n  };\n}\n",
      "type": "registry:lib"
    }
  ],
  "meta": {
    "duration": 1,
    "format": "mp3",
    "sizeKb": 8,
    "license": "CC0",
    "tags": [
      "scroll",
      "003"
    ],
    "keywords": [
      "scroll",
      "navigation",
      "list",
      "wheel",
      "continuous",
      "smooth",
      "ui element",
      "feedback",
      "browsing",
      "menu",
      "selection",
      "content",
      "movement",
      "background",
      "subtle",
      "long",
      "interactive",
      "game ui",
      "transition"
    ]
  },
  "categories": [
    "scroll"
  ]
}