{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "impact-metal-light-003",
  "type": "registry:block",
  "title": "Impact Metal Light 003",
  "author": "Kenney <https://kenney.nl>",
  "description": "A slightly longer, airy light metallic ping, perfect for indicating a brief process completion, a status update, or a successful minor action.",
  "files": [
    {
      "path": "registry/soundcn/sounds/impact-metal-light-003/impact-metal-light-003.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const impactMetalLight003Sound: SoundAsset = {\n  name: \"impact-metal-light-003\",\n  dataUri: \"data:audio/mpeg;base64,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gAcgexdKqasBPw9hXcDNoEZm3DiZJCtiCrcuVUCBWrVptsgsAg4AWSUBBA3VuggywG+E5Ao7AKrhXJuTAlwrAuC2UbAPSNiaLQOQOUL2MCF7DNqdEbvcmCVieDIHAStVJ2rZ+iMGPUYMwGWOwlOzUbL9XHYXRzkqPMwIY7CUrW9S9aC9v2JAukuXSXQIZIFAuF3fo7fs9e7/kuXSXQLSQNC4iS5iS6BTJD/////////NC4YkvQABIBAAAZA5/g2qK74sIpLx4B3kx4f///tSxOwCDGl9Cy5MTcmlMqBB2gm4AFCEMgK/ygPjx4r/41HSIjIS//VFGprD3/+g2VFGo6w9//+hy1NVh5D3/rWEwEImiUl//woFVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE44AJUH0NFckAAqTCIYM40ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsTHgAmpERC5M4AAAAA0g4AABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.482,\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.482,
    "format": "mp3",
    "sizeKb": 4,
    "license": "CC0",
    "tags": [
      "impact",
      "metal",
      "light",
      "003"
    ],
    "keywords": [
      "impact",
      "metal",
      "light",
      "longer",
      "airy",
      "ping",
      "brief process",
      "completion",
      "status update",
      "successful",
      "minor action",
      "subtle",
      "crisp",
      "clear",
      "positive",
      "feedback",
      "ui",
      "notification",
      "gentle",
      "elegant",
      "transient"
    ]
  },
  "categories": [
    "impact"
  ]
}