{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-female-2",
  "type": "registry:block",
  "title": "Voiceover Pack Female 2",
  "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-2/voiceover-pack-female-2.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackFemale2Sound: SoundAsset = {\n  name: \"voiceover-pack-female-2\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.581,\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.581,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "female",
      "2"
    ],
    "keywords": [
      "voiceover",
      "female",
      "spoken",
      "speech",
      "dialogue",
      "narration",
      "ui",
      "game",
      "prompt",
      "instruction",
      "tutorial",
      "alert",
      "confirmation",
      "announcement",
      "informative",
      "professional",
      "clear",
      "human",
      "feedback"
    ]
  },
  "categories": [
    "voiceover"
  ]
}