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