{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "error-003",
  "type": "registry:block",
  "title": "Error 003",
  "author": "Kenney <https://kenney.nl>",
  "description": "A more drawn-out and noticeable error sound, useful for emphasizing a significant error or a critical system warning.",
  "files": [
    {
      "path": "registry/soundcn/sounds/error-003/error-003.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const error003Sound: SoundAsset = {\n  name: \"error-003\",\n  dataUri: \"data:audio/mpeg;base64,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gAisQyNMvMPBKYpjmawwMKFBGsY0AFkVYS0X/4D+/5n3rX/s1/17GUXGEmXOPJJCrwGKoSkAAbP8bCDAFxhR31w4A1rQLj2YcXO7zXR0RWKlUoCkPNlMtiJ1Pt5FWrX/+/V/2+//f/bWtEr/qn1t3///X3S1aJOrXd8r0qxrIVisYUcUSiAEZ/fo1rjIGTlaCANNWjFhMRsVSJcU+6T2XzEKxjIV1lvypypNa//1Tv/27f/9/t5l/bvmbX//r/+9La90b3uztstbsZUQ//tSxJGCCORhHM08YcEOhmMJt7AIVQMUEB/iljPxoCg1xIztmbjCvgUTr2genmKSnnX24vV/FiuzolkHWQreu0/posv/LdNV39letKvz9ilLv2NZEvrl+75m/3/0rJ3HlpZSsO1GGQiKMVxIgTMYR5yCph7DAQhAdZQJzu4OgZSS5wKbNvW16J5yxWQdO+7rVq+kOslwMComqVWN1Rlpncp7Gxe9ue2/VMFWVt7v8qnQ9BZSioMjwuPEMPNoaEQfIAf+5YhyhUJMpAGTkLnbHI//+1LEqgMJ/a0WTbBDyTA1Ysm0iHExCHdFOXGaOq1apGkl9UXayP/b5Xsq/7lbRbaM/c1X+hnJoZZ9Kdd+9/Slv/uqLf+6S3lI5zGZFOdBQ45mYRFVIICgDOKnIOng9agFIC1DQH/XeweDG0f+5GIc5KxO2oKzaRIxFGjkuT6kGEBcNo7Ro6UQRXbPEYrbUEBAmKySKNHqiBiaBiaM9EJE65xC0TdzRDiFXuj5IVf3PROv0zhJaeb+Xv7/Pf6eULT3PQuT789C3+Q8iI/I8FM75//7UsS6AwvZsRANpKlJIQziybYUKJoSg9R0dJ4MKvULwocMSkEIDyM5ElRoKiUSSciR01HKrXNCoKljwLLDQieHSp0RPDpVwNKPCUYHCzwVVT/XIrOiWeKyX/q9Ps//r/ehTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxMSDSxGvEC2wowH3tiLJpI25VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEtwPIWDcYLDDAgAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.533,\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.533,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "error",
      "003"
    ],
    "keywords": [
      "error",
      "drawn-out",
      "noticeable",
      "ui",
      "significant",
      "critical",
      "system warning",
      "feedback",
      "alert",
      "notification",
      "important",
      "failed",
      "mistake",
      "serious",
      "negative",
      "warning",
      "long",
      "deep",
      "impact"
    ]
  },
  "categories": [
    "error"
  ]
}