{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-female-correct",
  "type": "registry:block",
  "title": "Voiceover Pack Female Correct",
  "author": "Kenney <https://kenney.nl>",
  "description": "A female voice says \"Correct\", perfect for providing positive feedback on user input or quiz answers.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-female-correct/voiceover-pack-female-correct.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackFemaleCorrectSound: SoundAsset = {\n  name: \"voiceover-pack-female-correct\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.626,\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.626,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "female",
      "correct"
    ],
    "keywords": [
      "voiceover",
      "female",
      "correct",
      "right",
      "accurate",
      "feedback",
      "positive",
      "validation",
      "quiz",
      "answer",
      "success",
      "confirmation",
      "approval",
      "game",
      "educational",
      "affirmative",
      "precise",
      "clear",
      "encouraging",
      "short"
    ]
  },
  "categories": [
    "voiceover"
  ]
}