{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-male-war-look-out",
  "type": "registry:block",
  "title": "Voiceover Pack Male War Look Out",
  "author": "Kenney <https://kenney.nl>",
  "description": "A male voiceover warning \"Look Out!\", perfect for alerting the user or teammates to immediate danger or an approaching threat in a game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-male-war-look-out/voiceover-pack-male-war-look-out.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackMaleWarLookOutSound: SoundAsset = {\n  name: \"voiceover-pack-male-war-look-out\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.608,\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.608,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "male",
      "war",
      "look",
      "out"
    ],
    "keywords": [
      "voice",
      "male",
      "war",
      "look out",
      "warning",
      "alert",
      "danger",
      "threat",
      "game",
      "combat",
      "urgent",
      "tactical",
      "defensive",
      "evade",
      "action",
      "audio",
      "watch out",
      "beware",
      "immediate",
      "caution",
      "attention"
    ]
  },
  "categories": [
    "voiceover"
  ]
}