{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-sax-12",
  "type": "registry:block",
  "title": "Jingles Sax 12",
  "author": "Kenney <https://kenney.nl>",
  "description": "A melodic saxophone jingle with a clear, satisfying resolution, ideal for completion of a major step, successful onboarding, or a substantial positive event.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-sax-12/jingles-sax-12.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSax12Sound: SoundAsset = {\n  name: \"jingles-sax-12\",\n  dataUri: \"data:audio/mpeg;base64,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lfY5KPyrOB07oACD//tSxEIACjDhRew86cFHleXZnRy4WKgcBZ8A7jXicZxMPnZJcL9CPfu3L0S1TJKekpLq88oIJmpD6Eg+DdPhraCA9OQvU/zPRy6DyMavP2D1S3DamNnOWAWCSEAQ0narQ00KVqA8X0L5ULLZFzRTnAefJVnhQjfIi/N4vbUv15Vymfb/7v+swUA1NPqIRwBfaXUUSfM6nYOai7YIdwg9pMkOqll+K305rWoiO3IsxymZiViZ0DfQAkFI7HBtlBnyNsXCdiOLtB9aFAFpqDbv2Pb/+1LETgMKOL8mLWFMwUUX5Am8KZiVJtSbOIHqABA4RdjgyNMaqgOkdIQdFhX6oQZNSvllt9RatqptW3mo+ILuznViCcLVB5qBrcvwmfZ8TC7HQRbNrA5+X7cefKvzdS+z//0///3/+m6q+BalvKZOU7glcEnhJrX5fKHYsCDJRHkFtpClva/Fbu8tL9VfNylozqqWoZ0mPjkN2yPUTQ8NW74qPeUCWPPQ7PLSfXW/naf/3//u93oqAABAIikaDTX5XU/gEue5LymDLcKZPQi1Z//7UsRagwm4wR5NYOzBNhGjSaaukGexX6jQS+6zIFCCug1B6HW9QdbAKMzg1lAe8s+Fi2IBe+O6hVy8908tW///3f47/7f/QQGtWWJnqo/d99D3uTitPoS1DW0U6jBBQ8RCVQ7PAqiskfFUa6/Q+/JjX99KDK2UbXT4W9Qhr5d8or2xLVW/nUt/nPX9f1L/pR7FadEZBVtZtFdAgoBRCymJKa0plCCYvlGwMoEVIjoZYRFQAnsWImlHlgICgIeBQEBQEBhKAh5aJRE/5L/t/O/r//tSxGqACXSLH6w87MExEaJFl62ad3//La/0kR0kFxKKhCcI23SuD0KIhIQ8XJB40KBRQoso8y4PKKLBMBBIXrCoqLCQ10hIWFRWsUFjQ8VbULC4r+Kigt+LC/WLfqFhX9YqLExBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LEfIMIZD8WR+EmgSMJlwCUmOCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==\",\n  duration: 0.852,\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.852,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "jingles",
      "sax",
      "12"
    ],
    "keywords": [
      "saxophone",
      "brass",
      "jazz",
      "melodic",
      "satisfying",
      "resolution",
      "major step",
      "successful onboarding",
      "substantial event",
      "success",
      "ui feedback",
      "triumph",
      "positive",
      "warm",
      "elegant",
      "app ui",
      "game ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}