{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-nes-12",
  "type": "registry:block",
  "title": "Jingles Nes 12",
  "author": "Kenney <https://kenney.nl>",
  "description": "A distinct, classic 8-bit jingle featuring a simple, rising melody, perfect for indicating a successful item pickup or positive confirmation in an old-school interface.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-nes-12/jingles-nes-12.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesNes12Sound: SoundAsset = {\n  name: \"jingles-nes-12\",\n  dataUri: \"data:audio/mpeg;base64,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/I7Pp1Za8jgJYl0F//tSxC0ACnkdYeecWIFOIav09pV6FEoHDOMTZMSG6HWJn10L78aA5hrm5igj47n1qE9NV1LCKpsxWilUmTiSEzb1Heg//0X1AaksBf/l+7erf+MH+MP1nvns7v+SyOz6croVW3C3JCoVaCAAIvV52F/CUhk0Lec6GCrAao/zRRAtvSO36xisjmIhhuSdZwHoX1IvehgES3mjHoLv/Qbeo78e/+j+aW1u9R7PZ37c9kvoyOj69WpRHJI1N5EgAa8rVKFIWGx6nHYjIPyLv9cnFv//+1LENwAKYOFR57TvATgV6fT0nwK0bcb/WDsd43AjEuSm650O6FYKoVTNoSSiUSBnRSgpznUh/8d+OPhz6dH+vX/r7//t/+kFAncDGSGgYBA164qNIN+NFeK8XgpNOzjsE4R1mTpV43N1DSDlc6eRCbCQN0qn2NnIhfQG9Amy/8BHtiXzt/9/R/m/+MfxVvGP9b6+/53ObPt06AAKCji6SgQR7B/gWj5cLCxdCNzZqBPjktqX+OGb+70xEtbL2CJGYtP9xN5w+Ln8Jn/1MJ/Kt//7UsREgAphGz/ntK2BRagmtQeeiI7/8x9Y4Sesfb/5vyX3/+VfoVZim/EWGf9GjWoIYATICAQPQE3Aqk0FRZwWtH2rKIn52/0BCfNUEJTZpUACXb90Jgoi3lR3zxt/8WvgXwL/4b4brB//BMvO/qb/6dIJ9Kf/T4J14N0eRzaKAAdhLgIAA1NGOBjJ5kGkCDGKSCyoRg8/+sSnuoKiilUoJkba96HBGO9Q3xpm/6hnqC+od/+Nbzt9//R/Ud6jv/lrxv1/+leM5P6csusARpQa//tSxFAACel9K0ioUYEzLiRo05cAPobK9VsCeFclIuLQ+myIgyzW3kv/1hU1H6VCwGzOX3+gCgVtjOnKVv+reYPOW6B5//WbiIrln+o9Khv/Pb8Nf4iwW/TKukSKIIREdQGzIqIRoZGQ8XJDZkmISw0HyhGw3mrTk404DEgR5BNSUhQWFqhUVMuWKs//mhUUFjQ9nULs////5kJCwqRM/WLVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEYAIJWOEYp6StARaLFtiQmkBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.852,\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.852,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "nes",
      "12"
    ],
    "keywords": [
      "8-bit",
      "retro",
      "chiptune",
      "pickup",
      "item get",
      "success",
      "confirmation",
      "positive",
      "reward",
      "game ui",
      "playful",
      "short",
      "melodic",
      "classic",
      "retro game",
      "pixel",
      "unlock",
      "achievement",
      "progress",
      "approval"
    ]
  },
  "categories": [
    "jingles"
  ]
}