{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "impact-plate-heavy-001",
  "type": "registry:block",
  "title": "Impact Plate Heavy 001",
  "author": "Kenney <https://kenney.nl>",
  "description": "This sound features a weighty, metallic plate crash, best suited for indicating major failures, game over screens, or significant, irreversible user actions.",
  "files": [
    {
      "path": "registry/soundcn/sounds/impact-plate-heavy-001/impact-plate-heavy-001.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const impactPlateHeavy001Sound: SoundAsset = {\n  name: \"impact-plate-heavy-001\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.349,\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.349,
    "format": "mp3",
    "sizeKb": 3,
    "license": "CC0",
    "tags": [
      "impact",
      "plate",
      "heavy",
      "001"
    ],
    "keywords": [
      "impact",
      "plate",
      "heavy",
      "metallic",
      "crash",
      "major failure",
      "game over",
      "irreversible action",
      "ui error",
      "warning",
      "deep",
      "loud",
      "destructive",
      "finality",
      "ominous",
      "game sfx",
      "system fail",
      "alert",
      "strong",
      "epic"
    ]
  },
  "categories": [
    "impact"
  ]
}