{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-nes-08",
  "type": "registry:block",
  "title": "Jingles Nes 08",
  "author": "Kenney <https://kenney.nl>",
  "description": "A short, energetic 8-bit jingle, designed for quick, positive acknowledgments like selecting an option or a fast power-up pickup.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-nes-08/jingles-nes-08.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesNes08Sound: SoundAsset = {\n  name: \"jingles-nes-08\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.621,\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.621,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "jingles",
      "nes",
      "08"
    ],
    "keywords": [
      "jingle",
      "nes",
      "short",
      "energetic",
      "8-bit",
      "quick",
      "positive",
      "acknowledge",
      "select",
      "option",
      "power-up",
      "pickup",
      "retro",
      "game",
      "ui",
      "notification",
      "alert",
      "ding",
      "chime",
      "pop",
      "playful",
      "feedback",
      "pixel",
      "fast",
      "tap"
    ]
  },
  "categories": [
    "jingles"
  ]
}