{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "mining-hit-d",
  "type": "registry:block",
  "title": "Mining Hit D",
  "author": "Kenney <https://kenney.nl>",
  "description": "Mining Hit D sound effect.",
  "files": [
    {
      "path": "registry/soundcn/sounds/mining-hit-d/mining-hit-d.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const miningHitDSound: SoundAsset = {\n  name: \"mining-hit-d\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.767,\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.767,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "mining",
      "hit",
      "d"
    ]
  },
  "categories": [
    "warcraft",
    "crafting"
  ]
}