{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-pizzi-13",
  "type": "registry:block",
  "title": "Jingles Pizzi 13",
  "author": "Kenney <https://kenney.nl>",
  "description": "A flowing and slightly longer pizzicato jingle with a reassuring tone, ideal for confirming important operations, successful saves, or data synchronization.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-pizzi-13/jingles-pizzi-13.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesPizzi13Sound: SoundAsset = {\n  name: \"jingles-pizzi-13\",\n  dataUri: \"data:audio/mpeg;base64,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MjG4NpE8aLd4Th/G//tSxLSACcBnIM5hhYFFDyLF3aC4lGKizjvi7r5GrdEP+Vr9LF/pz0B01b7KP3/9H9oBOIlBFlAZlzygEKHilqVi9cMDp6NkpckPDPRJi3MNLJlz3JSJMLSVl0EbbH0deb02ULXmGJFI3/Vts/b+3/Tu/q/9fV+hNQ4L1qiH46BgauaIRguAVIJ1MCVODrBerhFgQBuWYQBvg6YNEBUcjMqUeLzkwzfemsWYnf+A4P//lrlhQKrxdj0BdnseO4w2hegPXsnsb2S6tXJq14x+yav/+1LEwoJJeJcWTuVFwSOSotndKLgd69R/XZnkl8cgWCKnX21a2iXmBUcKWzwokRr09seDkEqzChDO2dkKg1sUy5xPH7yhwvEoXJq7gEVZ3tOVStr9CS4JdDH0t5e5gU15XVlNTrQ9ZVW/5MzxbWtyw5qZ5Or6KF/2dn0iqeLnhZQAQwIVJ4hATAAWhgAITGAWB4Mg6qA4YmRAb+OmSigWmFkQG6AoGmEg8DVYwMCa38JnSi1n/C4N4p3ODc2QLsylPWkznL1exVNFTt1a1Ovf5v/7UsTWAgoceRIO6OXBGgvjqcw04HUz0Wz1rpdtdVMeqJWTlUSCFRLxm6YQ4dajIkypAEQ4NbEQBAUQzoP8TC4JUHq4weCq1rxi2auIuLDVMy8BlSKZfN1SgKxKIPRVnM/D5qO4MbDbNVnOf5z0ixo+smp4tknB40b2xqVuU2NSOeWSYICxbH6TDDLi7F2Em7Wiy72RW5ceYXUAAEAKXaskAFrgURMeEM45MEyOOUMEFQFDAFv30huGS3K3EGmi5ZZWZWkiVa8xqwmRlnAeZSl6//tSxOgCDjEnCg9sp8FJjOMlzDSwMkuRoltKI2TMLuWwuZkF7QZNTKLiW43TuPk7EQKwwJxweEoaFIpEQyHl1F2G2zLSFZVZNKgcNGgZBYWEgeNmQWFhYiRMmQVFRWk09Yqyg1i2lOLf/rABGgQVDoGGLwrjxQo5UUmA2OkyskJEMjJAjY0MgIKioqKihp4FCosHqBwtULM1C7OK4qKcVFv6uoXZ+sU4qLfxbqF2frZxUWVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE5AMNlScML2zlwZ8NIYXcpLhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsTXgBGQpSGtPS2BIAXfSYekGFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.881,\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.881,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "pizzi",
      "13"
    ],
    "keywords": [
      "pizzicato",
      "plucked",
      "strings",
      "flowing",
      "reassuring",
      "important operation",
      "successful save",
      "data sync",
      "confirmation",
      "positive",
      "ui feedback",
      "progress",
      "approval",
      "calm",
      "pleasant",
      "melodic",
      "app ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}