{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-nes-11",
  "type": "registry:block",
  "title": "Jingles Nes 11",
  "author": "Kenney <https://kenney.nl>",
  "description": "A short, retro 8-bit jingle with a clear, ascending melody, ideal for a successful action or quest completion in a pixel-art game or app.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-nes-11/jingles-nes-11.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesNes11Sound: SoundAsset = {\n  name: \"jingles-nes-11\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.835,\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.835,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "nes",
      "11"
    ],
    "keywords": [
      "8-bit",
      "retro",
      "chiptune",
      "success",
      "completion",
      "achievement",
      "quest",
      "level up",
      "game ui",
      "positive",
      "reward",
      "short",
      "melodic",
      "playful",
      "vintage",
      "pixel art",
      "win",
      "celebration",
      "feedback"
    ]
  },
  "categories": [
    "jingles"
  ]
}