{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-sax-11",
  "type": "registry:block",
  "title": "Jingles Sax 11",
  "author": "Kenney <https://kenney.nl>",
  "description": "A smooth and slightly extended saxophone jingle with a reassuring, positive tone, great for confirming important settings changes or successful transactions.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-sax-11/jingles-sax-11.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSax11Sound: SoundAsset = {\n  name: \"jingles-sax-11\",\n  dataUri: \"data:audio/mpeg;base64,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\",\n  duration: 0.621,\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.621,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "jingles",
      "sax",
      "11"
    ],
    "keywords": [
      "saxophone",
      "brass",
      "jazz",
      "smooth",
      "extended",
      "reassuring",
      "positive tone",
      "settings change",
      "successful transaction",
      "confirmation",
      "success",
      "ui feedback",
      "secure",
      "confident",
      "elegant",
      "app ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}