{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-nes-06",
  "type": "registry:block",
  "title": "Jingles Nes 06",
  "author": "Kenney <https://kenney.nl>",
  "description": "A celebratory 8-bit jingle, perfect for indicating a major victory, a high score, or a triumphant moment in a retro-inspired game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-nes-06/jingles-nes-06.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesNes06Sound: SoundAsset = {\n  name: \"jingles-nes-06\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.799,\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.799,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "nes",
      "06"
    ],
    "keywords": [
      "jingle",
      "nes",
      "celebratory",
      "8-bit",
      "major",
      "victory",
      "high score",
      "triumphant",
      "retro",
      "game",
      "ui",
      "notification",
      "alert",
      "ding",
      "chime",
      "pop",
      "playful",
      "feedback",
      "success",
      "achievement",
      "win",
      "pixel",
      "reward"
    ]
  },
  "categories": [
    "jingles"
  ]
}