{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-steel-04",
  "type": "registry:block",
  "title": "Jingles Steel 04",
  "author": "Kenney <https://kenney.nl>",
  "description": "A clear, moderate-length steelpan jingle with a bright, positive chime, excellent for confirming successful data entries or minor progress updates.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-steel-04/jingles-steel-04.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSteel04Sound: SoundAsset = {\n  name: \"jingles-steel-04\",\n  dataUri: \"data:audio/mpeg;base64,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50qTMPpFaB5dTaB7StMIkAIFg4BBYmMFjIJiFLmIWxDbxbZcz1UMgABhYWCo8KnXYy9tIHEAHBcIgkMlExpKrjUalnvKky1EjSyCakjWuMqWvKk4qzISQ8WJAUKkgKKmQmwyMFiIyBRRD/gIXT/Z/+tv9VVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsTsAgu0fRhO6MVBag+jnbwNIFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxO2CFQztJa28z8EzDiJJhJjQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=\",\n  duration: 0.909,\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.909,
    "format": "mp3",
    "sizeKb": 8,
    "license": "CC0",
    "tags": [
      "jingles",
      "steel",
      "04"
    ],
    "keywords": [
      "steelpan",
      "metallic",
      "clear",
      "moderate",
      "bright",
      "positive chime",
      "successful data entry",
      "minor progress",
      "success",
      "ui feedback",
      "notification",
      "cheerful",
      "light",
      "crisp",
      "ding",
      "approval",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}