{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "tone-1",
  "type": "registry:block",
  "title": "Tone 1",
  "author": "Kenney <https://kenney.nl>",
  "description": "A simple, singular musical tone or beep, perfect for subtle feedback like a successful input, a menu selection, or a basic notification.",
  "files": [
    {
      "path": "registry/soundcn/sounds/tone-1/tone-1.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const tone1Sound: SoundAsset = {\n  name: \"tone-1\",\n  dataUri: \"data:audio/mpeg;base64,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rXAGd4cQC26CEssCgqEFY2RkT30jHU4ZZC5h4DAABBcAoSEKrtJMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsSogAlpiRslhOvBPbFgQNKeuKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgtVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxLkDSFyGvAEDZ8E0ERKEDvKJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEooPAJAIABIAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.684,\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.684,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "tone",
      "1"
    ],
    "keywords": [
      "tone",
      "beep",
      "notification",
      "simple",
      "single",
      "short",
      "ui",
      "feedback",
      "alert",
      "ding",
      "menu",
      "selection",
      "click",
      "confirmation",
      "subtle",
      "basic",
      "digital",
      "melodic",
      "progress",
      "message",
      "clear"
    ]
  },
  "categories": [
    "tone"
  ]
}