{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "orc-male-yes-02",
  "type": "registry:block",
  "title": "Orc Male Yes 02",
  "author": "Kenney <https://kenney.nl>",
  "description": "Orc Male Yes 02 sound effect.",
  "files": [
    {
      "path": "registry/soundcn/sounds/orc-male-yes-02/orc-male-yes-02.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const orcMaleYes02Sound: SoundAsset = {\n  name: \"orc-male-yes-02\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.515,\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.515,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "orc",
      "male",
      "yes",
      "02"
    ]
  },
  "categories": [
    "warcraft",
    "voice"
  ]
}