{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-male-3",
  "type": "registry:block",
  "title": "Voiceover Pack Male 3",
  "author": "Kenney <https://kenney.nl>",
  "description": "A male voiceover stating \"three\", perfect for countdowns, multi-stage processes, or indicating quantities.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-male-3/voiceover-pack-male-3.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackMale3Sound: SoundAsset = {\n  name: \"voiceover-pack-male-3\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.771,\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.771,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "male",
      "3"
    ],
    "keywords": [
      "voice",
      "male",
      "number",
      "three",
      "countdown",
      "instructional",
      "game",
      "stage",
      "quantity",
      "selection",
      "audio",
      "confirmation",
      "numeric",
      "clear",
      "direct",
      "informative",
      "short",
      "precise",
      "neutral",
      "sequential",
      "prompt"
    ]
  },
  "categories": [
    "voiceover"
  ]
}