{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "impact-bell-heavy-002",
  "type": "registry:block",
  "title": "Impact Bell Heavy 002",
  "author": "Kenney <https://kenney.nl>",
  "description": "A clear, heavy bell strike with a moderate sustain, good for indicating a significant milestone, a successful mission, or a noticeable achievement.",
  "files": [
    {
      "path": "registry/soundcn/sounds/impact-bell-heavy-002/impact-bell-heavy-002.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const impactBellHeavy002Sound: SoundAsset = {\n  name: \"impact-bell-heavy-002\",\n  dataUri: \"data:audio/mpeg;base64,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sDAEAAtbr5JEAYJ3z2IWFKUAv+F4EwLwxcoCMCYAFUcQ08oDCDCFAElHETwivj0HoaFwegnxfCoifFP5ogXDRRgO0kj5IkkbfmkwQf/7UsTrA8vRGvYPcENBfaOewe4UaNBAmkkbE0vGx3+6CCamTUxkbHTIvLMi8n/01MnZPTcyLyZkXnSLzpF7/9N6b03pp000lGSSjJJSSVJKl//6af///9KoyUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxOoDytym9g9wYcGfk16CvIAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE6IATudkdObaAAAAANIOAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.697,\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.697,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "impact",
      "bell",
      "heavy",
      "002"
    ],
    "keywords": [
      "impact",
      "bell",
      "heavy",
      "clear",
      "strike",
      "milestone",
      "mission",
      "achievement",
      "success",
      "noticeable",
      "confirmation",
      "reward",
      "game",
      "important",
      "distinct",
      "resonating",
      "powerful",
      "medium",
      "final",
      "positive"
    ]
  },
  "categories": [
    "impact"
  ]
}