{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-sax-13",
  "type": "registry:block",
  "title": "Jingles Sax 13",
  "author": "Kenney <https://kenney.nl>",
  "description": "A flowing saxophone jingle with a bright, inviting sound, perfect for a new message notification, a successful update, or opening a new section.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-sax-13/jingles-sax-13.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSax13Sound: SoundAsset = {\n  name: \"jingles-sax-13\",\n  dataUri: \"data:audio/mpeg;base64,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SR332GmsogpbY2W0BUobQK9U5UjzeUGeU6+PdU67oTTv26P06+b7dvLVDEEDEBiACAEt7RM2M8sY87KNgXDgMavZxGfmUkvC6DhqaP/7UsRlgAppC0msNFLBVKOovYeddAMWbcph4wDfRgAOz+EukzaqetFyRpK7w+GzXCEEWzOoZ4Gm8lxMM9ercr1LdPJVfrCEFABCrALAGWrbkHSO2jT14ENpbUBJIotyBGBEFLeqdKglueK2Z3uDpBzM73ibzVs+ZOSzrBon8SWqaB0x5F0K1j0v23EZ+ntzPLdOpJyj/lkkIAk26jIz1AVL5RPhTqGt1/Sl2DijhYo68YhQSWxj1gLz84gWD3v1jscQIj0Q5yWGItP1j4+Pg8Tj//tSxG8AClDLM6087wFFGmX1lqrAqO9IZT1iwIWpPPiyQ6+s15buVI8xaCMt+gQlBAQEgyrtwOGgknxsGMxOdCqRu5lp7kycaZC3LVg2DG0/NABKzjIYwpXqGSWYPQ8j9wu7YMQi0nmHOpcdyGs2qkkWdL27c4/kf/+lIeHc7jGzlSXZlDhl2T8gqelXkYKoPEpDbaSJenvwWlFM6i0g2shyuouvbl+4P4WO40fCwN6cdDmoFyOrUQLhnm9W53Qv/Qv/9HTuu7N3Zp/6TNANX5X/+1LEewIKaMMgTWGswTIW5B2ntZhXqNe6Br0rHFAV9Fb8UFqlQOej0OaLuphpXdDDDTja2Iqz6+FRxB5fnA3m9CPFL/xOWlt3I+//9Ojo0Mr//6f6VQH1jpupiobNcqpVbFrIdlT1mOeuDJz2B7VxkcstLrAEKv6lNvX7O+FPx3OG9OMF+ID+bhHO2xFv5L/q2va33o0///G6Uf2rEiHZoV6YEdxTjFad9gZYhdVyia6cvylEW/TpCxMh7omCvoEhyp+d1S07xdoFupvHS+HrWP/7UsSJAgooyxgtYO0BFBKjWZedoLet+bEMVHJoX+yml97KUfroyBHupnXoWgA0oKr+8A0BBzw2wJ+ByZfnSLWeQ7Xlcjx0omveRPF7DnD0M7MU1Z2vRiBBwThgu4PlI8N9P6fqi/b02elP2f1D/bT+oaRXMKJyzZwGKS/IwlZrDV5USzx2WeSLKPAqWeeEpb8reS/y3vZ/8r//Yn7U/01MQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxJuDiJyTEi08rQE3EuHBlp6IVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEsAIIkFUWx+GGgLiE4wgTBDRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.781,\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.781,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "sax",
      "13"
    ],
    "keywords": [
      "saxophone",
      "brass",
      "jazz",
      "flowing",
      "bright",
      "inviting",
      "new message",
      "successful update",
      "open section",
      "ui notification",
      "success",
      "positive",
      "cheerful",
      "warm",
      "smooth",
      "elegant",
      "app ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}