{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-nes-16",
  "type": "registry:block",
  "title": "Jingles Nes 16",
  "author": "Kenney <https://kenney.nl>",
  "description": "A moderate-length 8-bit jingle with a clear, satisfying resolution, useful for confirming a successful save, a medium-tier reward, or navigating important menus.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-nes-16/jingles-nes-16.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesNes16Sound: SoundAsset = {\n  name: \"jingles-nes-16\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.515,\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.515,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "jingles",
      "nes",
      "16"
    ],
    "keywords": [
      "8-bit",
      "retro",
      "chiptune",
      "satisfying",
      "resolution",
      "save game",
      "menu select",
      "confirmation",
      "reward",
      "positive",
      "game ui",
      "moderate",
      "melodic",
      "feedback",
      "success",
      "complete",
      "pixel",
      "vintage",
      "approval",
      "navigate"
    ]
  },
  "categories": [
    "jingles"
  ]
}