{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-female-war-look-out",
  "type": "registry:block",
  "title": "Voiceover Pack Female War Look Out",
  "author": "Kenney <https://kenney.nl>",
  "description": "A female voice urgently warns \"Look out!\", suitable for alerting players to immediate danger or threats in a combat game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-female-war-look-out/voiceover-pack-female-war-look-out.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackFemaleWarLookOutSound: SoundAsset = {\n  name: \"voiceover-pack-female-war-look-out\",\n  dataUri: \"data:audio/mpeg;base64,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jzVawGGRjHIjyHP+Wemlz8UiSSQ+KOO+BGcMt+20db5GJkQqO4dtMEzaAxjEOmKw2xnkUAIBgwjIAQJM212/CyMEw2buWEAABJdKIEDHnUM+XSPb3rmkxOfcHyjj8mGC45/1rD59xATn6MEDms//38xxPLh9aAP5vKukaWjWhs1Yz5itDgQ8emJo0aH/+1LEYwAKLHlJrDBh4XWTqVT0pBjidwgytrlix3ronVz3gGIeKyon/vBTRzugqyNCPuDOrQ4CUQrqxDTNW/7gCZgmOHRWHmDIuiAxBpUnJJEQ3KNSbQwYIz4bkMZGKqLSa1R8KRgUQI28mSFwusgcbLlAoz+tvTE+MW+xvUf40P9WkcCeJuPFw4w/3uohWIN41D2jupAAA3G2M4KGgC9mhXULyCQ09W5vRNVXQowZxSsrm7GwQE2VHuz/2iETXZuBRrruX8PVoH9y9Kp+xuUoYf/7UsRpgBJVc0ynpLzBPZ2sfGEOKMbgsSEqaVNOPPf5Xud/7Iq5l2llIEBJuVCYyJeMxtj+ZwodDDADIHCoHVRU2TyfxRJKbGRAhICg8zOioceSHhpd6wlstF4allLEUk8Gn/IqPBLrZOh0rnZY9r5ZwibLFVPh1pdFMkMwRJSSgK5VcCYthI+QxxH5CK60dZAwmqBVtH5BESxIukUWxBVcI6P+wtDj1hVFgqRChAKhkKoVCQsHYvvda1JWRALhfx93atOhR4wbnF9SejSRAACi//tSxFaACnBLW+ekZwFMjmm8ww2gwAgljAySEo4kgKiVq0gDetlrxJCmNif1nNVJGoHJPhLy+Go484JI49EZOiIDioqMQCoBJYlrhMsmdsY7iKJbM612ViwdldZ5i3AsREcu1aUt/wWeBljfKaE6AFAD4ZUEwZNbZoKV+tSJSXw6iO1+sVSKPqwomY+hmVeHhjhMyH/443/qqkgYO5208gYs6eMj2FYoFknRRR486vWKnaYlDQQVlkEmpFS+qQUBErhTVVExqGRjVVICH2NQqsb/+1LEYQAKOG89h7DBgU0XZrCTDdjQCNVCgJK2xqTMcbz2Zof+YUua+IX8nDk/7Pwl/lD81/+Jk5Txf//l//sGYAgqGTK1kcmWUvJllQ/NWsMv/8mtQyZWUECcjWWWkal/8yI//2hGZGTTCRfIyLzIyIafI///MiNf/yO/mTLJf+WSo5GoYHEqqWpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsRsgAkRjx0hhF7BJDGcxDCPoaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\",\n  duration: 0.647,\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.647,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "female",
      "war",
      "look",
      "out"
    ],
    "keywords": [
      "voiceover",
      "female",
      "war",
      "look out",
      "warning",
      "danger",
      "threat",
      "alert",
      "urgent",
      "tactical",
      "command",
      "military",
      "game",
      "combat",
      "caution",
      "imminent",
      "attention",
      "unexpected",
      "crisis",
      "hazard",
      "watch"
    ]
  },
  "categories": [
    "voiceover"
  ]
}