{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "m-death-impact-small-snow-a",
  "type": "registry:block",
  "title": "M Death Impact Small Snow A",
  "author": "Kenney <https://kenney.nl>",
  "description": "M Death Impact Small Snow A sound effect.",
  "files": [
    {
      "path": "registry/soundcn/sounds/m-death-impact-small-snow-a/m-death-impact-small-snow-a.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const mDeathImpactSmallSnowASound: SoundAsset = {\n  name: \"m-death-impact-small-snow-a\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.833,\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.833,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "m",
      "death",
      "impact",
      "small",
      "snow",
      "a"
    ]
  },
  "categories": [
    "warcraft",
    "combat"
  ]
}