{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-pizzi-00",
  "type": "registry:block",
  "title": "Jingles Pizzi 00",
  "author": "Kenney <https://kenney.nl>",
  "description": "A short, light pizzicato jingle with a playful, bouncy feel, suitable for minor positive feedback such as collecting a small bonus or a quick correct input.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-pizzi-00/jingles-pizzi-00.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesPizzi00Sound: SoundAsset = {\n  name: \"jingles-pizzi-00\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.494,\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.494,
    "format": "mp3",
    "sizeKb": 4,
    "license": "CC0",
    "tags": [
      "jingles",
      "pizzi",
      "00"
    ],
    "keywords": [
      "pizzicato",
      "plucked",
      "strings",
      "playful",
      "bouncy",
      "light",
      "short",
      "positive feedback",
      "bonus",
      "collect",
      "correct",
      "subtle",
      "game ui",
      "button press",
      "confirmation",
      "tap",
      "quick",
      "cheerful",
      "whimsical",
      "notification"
    ]
  },
  "categories": [
    "jingles"
  ]
}