{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "impact-metal-heavy-001",
  "type": "registry:block",
  "title": "Impact Metal Heavy 001",
  "author": "Kenney <https://kenney.nl>",
  "description": "A powerful, resonant heavy metal impact, ideal for signaling a major event, a critical success, or a destructive action in a game or application.",
  "files": [
    {
      "path": "registry/soundcn/sounds/impact-metal-heavy-001/impact-metal-heavy-001.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const impactMetalHeavy001Sound: SoundAsset = {\n  name: \"impact-metal-heavy-001\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.356,\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.356,
    "format": "mp3",
    "sizeKb": 3,
    "license": "CC0",
    "tags": [
      "impact",
      "metal",
      "heavy",
      "001"
    ],
    "keywords": [
      "impact",
      "metal",
      "heavy",
      "powerful",
      "resonant",
      "major event",
      "critical success",
      "destructive",
      "action",
      "game",
      "application",
      "strong",
      "deep",
      "feedback",
      "important",
      "grand",
      "distinct",
      "finality",
      "dramatic",
      "intense"
    ]
  },
  "categories": [
    "impact"
  ]
}