{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-male-7",
  "type": "registry:block",
  "title": "Voiceover Pack Male 7",
  "author": "Kenney <https://kenney.nl>",
  "description": "A male voiceover stating \"seven\", useful for complex sequences, lucky number indicators, or numerical confirmation.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-male-7/voiceover-pack-male-7.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackMale7Sound: SoundAsset = {\n  name: \"voiceover-pack-male-7\",\n  dataUri: \"data:audio/mpeg;base64,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H3AeeFGm8Okn2pWv//tSxLIAC3y5QYykScF6HKjxgw5QzSqoUi0eHHoTt3RAJ+nBLRBl32Yv9CHRiIfQCyIgkIUMSzC/9IyX+Zy28FIKMV7EBQf90JhTH//RoeVq65le/MWaQrkCN7f+RJmRF8aZ/YKkeFyqkz6yVCd3YtI00njai8GCGQu+Gl0iMtLArHsfvHMtq0H4llG3fXIRIypTVMrlEgw5l1iRr2LnOVt0mRLq5DmQxpUI3T+s2pe72vvIq0O3/pZa7Jz3u16tUXY6CYwooo0OaAV2ZphWPuz/+1LEsoAK0LlDjLBDwWiQqP2HmDBpJA3gtx6RYRr4ERCMh+Ih0WwSg49VWeZpUSgIlD95cgH9WQMqv7j4xeEwo5CEhIeMHqPBZyHMjZHeFkIOpZg0iOfe/yVtHWsUsQ3QAmXAjSlEUAB2IYDXHlxOjY0bTkUf/LmhOIBTmMagb6gQIWJqAoYoZ9SshSqUuaJNR0dLqJa2blYz6l6eVWKpQwNzGO1y39HrXL+rUM6NQ36ghxIIV1TVAAAa/RrEQmCiQwOkQ6Eh4wcJYiHlQESIhP/7UsS4AAp8+UOMJGdBZKkn8YYUeMMuARokHQ1YHWkQl24a/Ue+eI1Huvzs63ArFdR4saDlT5JT+gFFkAFBYNRwJZUK5UIZBDxdRdRM4XOpJwsBgg9llljn//Y1llgMECByywGCll7LP////+Wyzllsvyy2X///7LJZZYDBArLLKCpp+mhMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxL+AClxjQeeww8FZKGW0wwjxVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEyIIHqAsbJIhAAS8kF0jEjRlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.853,\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.853,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "male",
      "7"
    ],
    "keywords": [
      "voice",
      "male",
      "number",
      "seven",
      "sequence",
      "instructional",
      "game",
      "luck",
      "selection",
      "audio",
      "confirmation",
      "numeric",
      "clear",
      "direct",
      "informative",
      "short",
      "precise",
      "neutral",
      "sequential",
      "prompt"
    ]
  },
  "categories": [
    "voiceover"
  ]
}