{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card-slide-5",
  "type": "registry:block",
  "title": "Card Slide 5",
  "author": "Kenney <https://kenney.nl>",
  "description": "A clear, concise sliding sound for a virtual card, indicating a decisive and efficient movement.",
  "files": [
    {
      "path": "registry/soundcn/sounds/card-slide-5/card-slide-5.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const cardSlide5Sound: SoundAsset = {\n  name: \"card-slide-5\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.601,\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.601,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "card",
      "slide",
      "5"
    ],
    "keywords": [
      "card",
      "slide",
      "move",
      "drag",
      "reposition",
      "game",
      "ui",
      "clear",
      "concise",
      "decisive",
      "paper",
      "interaction",
      "feedback",
      "adjust",
      "shift",
      "crisp",
      "clean",
      "smooth",
      "transition",
      "efficient",
      "snappy"
    ]
  },
  "categories": [
    "card"
  ]
}