{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "three-tone-1",
  "type": "registry:block",
  "title": "Three Tone 1",
  "author": "Kenney <https://kenney.nl>",
  "description": "A short, ascending three-tone chime, suitable for positive confirmations, task completions, or successful notifications.",
  "files": [
    {
      "path": "registry/soundcn/sounds/three-tone-1/three-tone-1.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const threeTone1Sound: SoundAsset = {\n  name: \"three-tone-1\",\n  dataUri: \"data:audio/mpeg;base64,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a//2lePs1WbqFmJV//tSxJ0CScmFGyeI68EesKNY0qq4Z/8nxg0HTmX/U1b9S+nlv7fr//o9VElLN+j/V//obt///+O4iBtBbg5xTcgAACAEEAvdxUOiIqHjEA2hniQuUv8ya3Wy+ytX++YBRVxIz/qUqo/VH4D0MreA/gxX/8MKhRzGFQo3zG+qf/R2qJ///9Sgboyx2EiVCVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVoAAAAFY0ARQDHFREVMreqPN/Vv//+1LEsAIIDYUjRRi0gQ0wo5ihnpC3y/6algJ2M/6lT/6G6OUukz/Cnb/8xlK7GepfqX0Urf+mgUj///7mA3FxAjQBYGoqSnf/KkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsTMAElZhRWECb0BO7CguFE3oKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxMYByL2G7IKJV8AJAEABoAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LEoYPAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==\",\n  duration: 0.849,\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.849,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "three",
      "tone",
      "1"
    ],
    "keywords": [
      "three tone",
      "chime",
      "notification",
      "success",
      "positive",
      "complete",
      "ascending",
      "alert",
      "ding",
      "confirmation",
      "achievement",
      "short",
      "melodic",
      "progress",
      "ui",
      "feedback",
      "message",
      "reward",
      "subtle",
      "clear"
    ]
  },
  "categories": [
    "three"
  ]
}