{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-female-5",
  "type": "registry:block",
  "title": "Voiceover Pack Female 5",
  "author": "Kenney <https://kenney.nl>",
  "description": "A clear, professional female voice delivering a short spoken phrase, ideal for game prompts, tutorial instructions, or informational alerts in a UI.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-female-5/voiceover-pack-female-5.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackFemale5Sound: SoundAsset = {\n  name: \"voiceover-pack-female-5\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.611,\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.611,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "female",
      "5"
    ],
    "keywords": [
      "voiceover",
      "female",
      "spoken",
      "speech",
      "dialogue",
      "narration",
      "ui",
      "game",
      "prompt",
      "instruction",
      "tutorial",
      "alert",
      "confirmation",
      "announcement",
      "informative",
      "professional",
      "clear",
      "human",
      "feedback"
    ]
  },
  "categories": [
    "voiceover"
  ]
}