{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "error-005",
  "type": "registry:block",
  "title": "Error 005",
  "author": "Kenney <https://kenney.nl>",
  "description": "A medium-length, clear error sound, suitable for form validation failures or indicating that an action cannot be completed.",
  "files": [
    {
      "path": "registry/soundcn/sounds/error-005/error-005.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const error005Sound: SoundAsset = {\n  name: \"error-005\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.497,\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.497,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "error",
      "005"
    ],
    "keywords": [
      "error",
      "medium",
      "clear",
      "ui",
      "form validation",
      "action failed",
      "cannot complete",
      "feedback",
      "alert",
      "notification",
      "warning",
      "invalid",
      "decline",
      "failed",
      "mistake",
      "system",
      "distinct",
      "serious",
      "prominent",
      "confirmation",
      "prompt"
    ]
  },
  "categories": [
    "error"
  ]
}