{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-female-level",
  "type": "registry:block",
  "title": "Voiceover Pack Female Level",
  "author": "Kenney <https://kenney.nl>",
  "description": "A female voice states \"Level\", which can be used as part of a level announcement or to indicate progression in a game.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-female-level/voiceover-pack-female-level.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackFemaleLevelSound: SoundAsset = {\n  name: \"voiceover-pack-female-level\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.603,\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.603,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "female",
      "level"
    ],
    "keywords": [
      "voiceover",
      "female",
      "level",
      "stage",
      "progress",
      "game",
      "step",
      "phase",
      "advancement",
      "achievement",
      "sequence",
      "section",
      "chapter",
      "indicator",
      "notification",
      "clear",
      "short",
      "objective",
      "goal",
      "progression"
    ]
  },
  "categories": [
    "voiceover"
  ]
}