{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-sax-02",
  "type": "registry:block",
  "title": "Jingles Sax 02",
  "author": "Kenney <https://kenney.nl>",
  "description": "A melodic saxophone jingle with a clear, positive progression, suitable for successful task completion, a level up, or a celebratory moment.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-sax-02/jingles-sax-02.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSax02Sound: SoundAsset = {\n  name: \"jingles-sax-02\",\n  dataUri: \"data:audio/mpeg;base64,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KIXu2O+Aqxd/yB9R//tSxEkAC7FXV6w87ZFuJml1l5WysbVrKS5QOe3GU/vq3hQb2Gj/ivx32/+//0+Fft/4wV8aGN4toy2WNAwBIYdAISE99BBtAVZhMq7iMpkhDU3km8sc2UA6VLr6jczC6VsjyOdIGp9fL0H05V3uon7RncKcbLLLmafbeVI+Bwu7BV+hQj5Qj//9v/r89vVv/KN6ltOkMKgABG4AAAWMbkzHhzFLSK12cvsIpRfxvbWPpTCykVy5k/p2DvZP17lodBvf+o0OFqspp+UysoNgfDH/+1LESoALOSc/rDzywWwe5vWXqwB8joKaaeasNvGKtwyG1rB6Z4uG/lBv9/p9//t8r2/ZoQgIQQCDAAyBRY5UtMKPR6pB0DzsWL8nqCtpb5MNuBjtJvdVJYHX3Wvaxny8yesqhOFdBJJQauVsUAxsh1lP5CX8HjlawOjjcZB31E77/+o0vS3yKvMf/0+UTZo0AGACWBDUX95fECUbCwiD41JSBMcFx67raTo1uRc1WUXEco3SYW5CWhPaikAdkF6joDtKOpMVTXzH5w/41Huwhf/7UsROAAuFGy+tRVSBVZ7lZaw1YCxuobvOq9bff5v9L6/mXZ9mzR///rUAQQgsAAAJz+4U4oFDUMUn56GRGqEybfWa1C2gKNW/1fe02Al7JfT0kPBBo/rJ0IxC6QH4pVIl0FQL7axc+Tn8fiN2EKQfOkLzEjN7f/V/9Xzv/IbP///qHAAQlnMj4iCAdTSZ08gRyPuIaHSZ2iUENMJD3VVDkDt7bNRKYXke1ESBryo+Yh+57pCOkPKXzI96Y2eeFNITyPNvQJHU/O53Zvwzt+jZ//tSxFMACwD3JU1BtAFJleOIbUR4s0///SoAJwABr93I+STA9GVY1YgO1nFkRlW6Rp4GzYzr5JPitpXLMLcOIV65+50qEgfneZpcSflSoMktMjbyMt4lhr2AyJniSW8iP+d9/nfX6/Iv+S2dBJ9/IDdJiJhpIVs4a26ajwMjAZL3vxDcQQ9SSsU81YSXNQ9yDFFHZIUTw7QuASRXu9ITvmd92Ol87lS6Dplj0AiGdDQIhK9UFIt8oLv9Z3/DX+SqAIcl3BTE1VLVJpR4GnCsch3/+1LEW4JKTPcYzOFLgUuV4sWWHlhDBQQIWMFSISI/1eyVZ/pV7P/YZFk/6f/Rv/6fH0xBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsRmg8W8PQ5jBGpAAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.870,\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.87,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "sax",
      "02"
    ],
    "keywords": [
      "saxophone",
      "brass",
      "jazz",
      "melodic",
      "clear",
      "positive progression",
      "task completion",
      "level up",
      "celebration",
      "success",
      "ui feedback",
      "achievement",
      "triumphant",
      "warm",
      "smooth",
      "elegant",
      "game ui",
      "app ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}