{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-steel-11",
  "type": "registry:block",
  "title": "Jingles Steel 11",
  "author": "Kenney <https://kenney.nl>",
  "description": "A light, melodic steel jingle perfect for confirming a minor success or a new item acquisition within an application or game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-steel-11/jingles-steel-11.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSteel11Sound: SoundAsset = {\n  name: \"jingles-steel-11\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.825,\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.825,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "steel",
      "11"
    ],
    "keywords": [
      "jingle",
      "steel",
      "melodic",
      "chime",
      "success",
      "item get",
      "positive",
      "feedback",
      "reward",
      "notification",
      "confirmation",
      "achievement",
      "lighthearted",
      "bright",
      "short",
      "metallic",
      "game ui",
      "collect",
      "complete"
    ]
  },
  "categories": [
    "jingles"
  ]
}