{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "high-down",
  "type": "registry:block",
  "title": "High Down",
  "author": "Kenney <https://kenney.nl>",
  "description": "A high-pitched sound that smoothly descends in tone, perfect for indicating a UI element closing, a dropdown menu retracting, or a process completing downwards.",
  "files": [
    {
      "path": "registry/soundcn/sounds/high-down/high-down.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const highDownSound: SoundAsset = {\n  name: \"high-down\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.520,\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.52,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "high",
      "down"
    ],
    "keywords": [
      "high",
      "down",
      "descend",
      "close",
      "retract",
      "collapse",
      "dropdown",
      "menu",
      "ui element",
      "subtle",
      "smooth",
      "ending",
      "completion",
      "feedback",
      "transition",
      "soft",
      "gentle",
      "futuristic",
      "notification",
      "effect"
    ]
  },
  "categories": [
    "high"
  ]
}