{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "loot-coin-small",
  "type": "registry:block",
  "title": "Loot Coin Small",
  "author": "Kenney <https://kenney.nl>",
  "description": "Loot Coin Small sound effect.",
  "files": [
    {
      "path": "registry/soundcn/sounds/loot-coin-small/loot-coin-small.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const lootCoinSmallSound: SoundAsset = {\n  name: \"loot-coin-small\",\n  dataUri: \"data:audio/mpeg;base64,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OopNlVn9zmxJA8sEwTDZ9nhGGmFf+1DQFWF3eRdJABQGu/Qxi9WqYql26wozepGezMdKXqqVEhTLh8ZgpUv++UYyDN/+VX/VQTkOoWdpYmu2skhY3EWgKESYqS1speDRYChMt630w1UAAAAXcYABP///6cqikHn2MjxX/+wsjM0UOAWYM/I/7n7HS9n/+1LEYoAJ/P1X5AV6kUIgaXxRpjhsobu2+luiIrnsjTVGEYqKDaZNPqoxZNYeJCOtRQTabOJtb3TpYsZBr3AFKH5f//8Ru/exVSkzJBRZfSEtGMtk2522f597vfkF5IXJYPKLJOfZJpEhPiicUThNS1JGgRD4lkuKXERMKSoRCxqyX2klqFWEiTsJKhAAB+L+X7zfsCkZlIMA009GWNjPsbUl95WQB6RpzW3/z5mVx2r8FrYnElTJgGlx4gFIiVExQPkI2mdurxB7NkmHMktur//7UsRwAkm1ES+AjTGBMiMj5BGmoBn7TBGIvhV4UAAn/+1NYdc58jRtEprZbXxt/8+dqay6jINpFaNZ5L/admmjYuD4uIfNwsdBGqkISYyfMCsoohSYNkBtpk4RDgFnDqTLRdhdRDrmgUd+igIAB//hzfy+a2Cpry+bVVLYyuzM6MK6QYCzkzhk1QxNTjFLYLsr0wu5hgNPLeBYsL29ULIyINEsCdJEuhYD5I1FZNEtuJlXSXVZV36f//gwL4IV6BYx8bZjhxVL+HWw3SpQmUmO//tSxICCCX0NFKCZOIk+oWLkEyaolTJrDbPau1Zo2wuPYz0kuehmt/ZJIETXzp5DLQkkkmu6UjdwxJIinvR80ZJT2ZaKaA2t91q36KTXMv+GTWWyoaxyVqjLDLzWGX9mXk0NWqGs/scmCgxmqGsuxrUKzZKRFi6A2ZRKpLzht1rJEIRkgNmSYhSnn9SVaiQKWgtE68SNcSrVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEkIPJkRcIoI01ET4i30AhsqBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsSgg8mFENoBpN5IAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.635,\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.635,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "loot",
      "coin",
      "small"
    ]
  },
  "categories": [
    "warcraft",
    "loot"
  ]
}