{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "u-escape-screen-open",
  "type": "registry:block",
  "title": "U Escape Screen Open",
  "author": "Kenney <https://kenney.nl>",
  "description": "U Escape Screen Open sound effect.",
  "files": [
    {
      "path": "registry/soundcn/sounds/u-escape-screen-open/u-escape-screen-open.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const uEscapeScreenOpenSound: SoundAsset = {\n  name: \"u-escape-screen-open\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.633,\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.633,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "u",
      "escape",
      "screen",
      "open"
    ]
  },
  "categories": [
    "warcraft",
    "ui"
  ]
}