{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card-slide-6",
  "type": "registry:block",
  "title": "Card Slide 6",
  "author": "Kenney <https://kenney.nl>",
  "description": "A smooth, distinct sliding sound for a virtual card, suitable for a controlled and audible repositioning.",
  "files": [
    {
      "path": "registry/soundcn/sounds/card-slide-6/card-slide-6.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const cardSlide6Sound: SoundAsset = {\n  name: \"card-slide-6\",\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",
      "6"
    ],
    "keywords": [
      "card",
      "slide",
      "move",
      "drag",
      "reposition",
      "game",
      "ui",
      "smooth",
      "distinct",
      "controlled",
      "paper",
      "interaction",
      "feedback",
      "adjust",
      "shift",
      "fluid",
      "clear",
      "soft",
      "transition",
      "audible",
      "measured"
    ]
  },
  "categories": [
    "card"
  ]
}