{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jump-8bit",
  "type": "registry:block",
  "title": "Jump 8-Bit",
  "author": "Kenney <https://kenney.nl>",
  "description": "A classic 8-bit upward 'boing' sound effect, ideal for character jumps or upward movements in a retro-style game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jump-8bit/jump-8bit.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jump8bitSound: SoundAsset = {\n  name: \"jump-8bit\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.467,\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": 0.467,
    "format": "mp3",
    "sizeKb": 4,
    "license": "CC0",
    "tags": [
      "jump",
      "8-bit",
      "retro",
      "game",
      "digital"
    ],
    "keywords": [
      "jump",
      "leap",
      "hop",
      "8-bit",
      "retro",
      "game",
      "arcade",
      "pixel",
      "platformer",
      "action",
      "upward",
      "boing",
      "digital",
      "playful",
      "character",
      "movement",
      "success",
      "chiptune",
      "classic"
    ]
  },
  "categories": [
    "game-8bit"
  ]
}