{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-male-5",
  "type": "registry:block",
  "title": "Voiceover Pack Male 5",
  "author": "Kenney <https://kenney.nl>",
  "description": "A male voiceover stating \"five\", ideal for final steps in a sequence, mid-point markers, or numerical selection.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-male-5/voiceover-pack-male-5.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackMale5Sound: SoundAsset = {\n  name: \"voiceover-pack-male-5\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.761,\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.761,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "male",
      "5"
    ],
    "keywords": [
      "voice",
      "male",
      "number",
      "five",
      "sequence",
      "instructional",
      "game",
      "countdown",
      "selection",
      "audio",
      "confirmation",
      "numeric",
      "clear",
      "direct",
      "informative",
      "short",
      "precise",
      "neutral",
      "sequential",
      "prompt"
    ]
  },
  "categories": [
    "voiceover"
  ]
}