{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "jingles-sax-10",
  "type": "registry:block",
  "title": "Jingles Sax 10",
  "author": "Kenney <https://kenney.nl>",
  "description": "A moderate-length saxophone jingle with a smooth, encouraging melody, suitable for successful login, form submission, or a positive progress update.",
  "files": [
    {
      "path": "registry/soundcn/sounds/jingles-sax-10/jingles-sax-10.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const jinglesSax10Sound: SoundAsset = {\n  name: \"jingles-sax-10\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAABoAABYJABISEhwcHBwlJSUlLy8vLzg4ODhCQkJCS0tLVVVVVV5eXl5oaGhocXFxcXt7e3uEhISOjo6Ol5eXl6GhoaGqqqqqtLS0tL29vb3Hx8fQ0NDQ2tra2uPj4+Pt7e3t9vb29v///wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBKIAAAAAAAAWCQQNbnIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAADwAABpAAAACAAADSAAAAEF//wRoZd6xBBwQhl3rY8R+xhBA8AAAhn/8J20ZZO4AYWnv//93rGEEHIEEMe71rJp34iPER//2vf/d37u9ggQQcABCBcHygPv/gh////5cH1FDgFDolMrlMgcAiCQA/zqeLWsvq/1f6sbpO5/mS6bYr8N3504hDIEkFTCx6e50IGII7nY3/fzCCFNAaWgTjd7J2s9c7gi2iAhQzQwUa/JT9jCx+GsS6a82RNAARDBKSj+1T1+91zn+mANP/7UsRdg4AAAaQAAAAhQiBZBoJgADszQXTgiGPbE1h3LD/////903vdzT7y6JTsbiet9tWWt+LGAID6SKwo4gDwEAAAAACqkPIekoXInDCq8KgWpCn/j1luNPqU0kODrGluiIgIwJQ+B4hcwo2PFTT8mbTclmyo7CqYR22Mj9nCrXaUh5H1e4uuWNkbh3HmWcTRiXJp1Z62U52kXHi+JYdvZv9TZ1/1/xv///lVrf6hR593qf/CxVryksgAAtHabSb5DqL1spBL5iGLNdxo8YGA//tSxJMAEoz3Q7mcgBHup+c3tLAAWVvzQN41yB5Vb3LYNQmu+eC66gARGjOKhrzGVTAhbwElUSRZI4eQAPjcDhcuwSrlqkirp9Qq0sKcuyrAqKz0UswztuUr5KQECx3RbTC1QnZGb0ZPt2dm3wQpRK/+NxInWfHyIBQ55V1GnTwFAFujiKcHdmniIqEgUHQZZlD7kNcjVOgC4msRgQwhbBg6Qvbrwgge5o8UNrYKu+lAuw3EkxlngMSOISvgaP84CoTSPMrSBBAxtsSTzc3+Car/+1LEaQLPISswTKRTicMZJpW0menTGUblmQ3/zuc5zt/5d0wJLbtv258xC/UAiUAADxP1uowBAu6DMgCW2VRAcGZBj8ZNuQjkzCQDcNZeMHGMOuoBEKoG8okKhUalxwBOCmUZwyhbgLbUm1Ogqwb6bZzAEMiq4RwsF4SnjVZ0PftRKHCa7GxualFzPOM+QxwzZ5TNNssqvn7+Pa8BQUjUgXjZ3nx8QX6HvLSOGvTV8w7MlrW8x1/9t3/yBzJDkIthmEIMAMQQABU/YFFoSZ9iPf/7UsRSABLQ3zsuZesKJqfpKaYLCDXnZYevUJWEJgMDHAWg4M+oXFiVeVUjiD01kqiw4YEmkoxcuD+VFDHtyfhBipZjkB3LDZGocrHUVOji5ouufoNM4HQi/0JAlD5iZAjQaIQ4g6yQTPK1WCUM2StX29ln0N0qr/rVhDoQSCDA34UQIzBUOLWmTF9/fePILReqgAAAAAAqAaALSECI42TCIJTcHQ6YAxZg8IlpyIBGjTVBDdhwBnGTQdA5AEFpMo0IRRO8hEvKo2MctA0PIbka//tSxB+AEX1LQ05pTcGKpKo9pYpgIQv/Lx4Fb9WZguF+pRX8pVOYZPG9vcXr5UiJfixyYgX3V5okPYH1xNZEE1mIi013u+SjdHMKsppec9N9aTOb9FfK0reP+t1PzJtVylMAAABAIAASC7wWZXRGwATIocVZ0cCsRHm7rlNQddulVkEAXU8os4c97dChh90Po45ECv2ClbRAVlQ//C31XAoTwadKCv3F/vguEfM+L0P374V83Tt31v9++vVu+FeJFxzJydqAABAgAJFOUBxm61j/+1LEBgALkS9brChT0Xylq7WYlipAYiFdhg7yTMiEcNJnM4vNCK380jH3kGIEueg5QSuM+R8dyAtqWVBPG1Bu08AM80Wn+jZFzW05N/1GBfNvIdF169WoF5NBtW77D2DbWEhWRogQQQRARJblDL2t1BlBS6mg0LShBMWpzAFjOSyU4Oez9OrexfAqWlA9ujmGiQJ5RJh6matsjejrIjz2fo3bRUYVK8MVmOjOKKt83MRjj8vXryc/fts60eQaMF5B7JqddcUEGmlEteGhUo4uYf/7UsQGAAts+2OMPKzxg57rMYWKH+JbrLkRbj/FMm2qsIGXbRgjatcqBQ/nxnHbS4HZpeK5mdRFjY7R8G0W8unVtVDrDGoNs6VQs4s7OpcRIcWY9OeaxRUNrGMHWJEVnQ2uhyE0AMMsolUoNrWcXVtpsfgDQOyrjBBKuhdkbTCt4SlNWBLoVAzeGRmpsvg76g1PogCW+ENhWwXXUToKoYqQTJBrltAVoY10eCdyPSTvRipTqXAEIW9VvQi2hP9+35Pfu+Su1YCAQWitU2FonspE//tSxAWACzD/YYeMszGAHGyw9oqmG/ClPUI4m4wrx2IzKapRcTLhGHwssafFu7tECT0XzFJ4JCB57b0avX35AAUxZrS6RQd3yO1nGqYkXIi6nIU6M5G9UnePYprrOu2tr5muhkIIpGNUpi1fBZii3QyQA+rFaW03g8bZyyCcjO2Ie8LWToDSQsz1kJvjwabDxNmULAjUhmLM6b60nnTBkJ0l8yCQGq1F0eepsx5UbO2r+NeTKeogVS7m//LwY0Pda0ExVfFRFGo02mpAIATluEX/+1LEBoAL0Tdzp5xVcW0nar2TiqBEwrCAzGRBQ5FEzGrawnQR/Nslux8EaGY1ahn28eBXUQNlC2KgL0dK3bPJakLQJEOM/xx6HjFSp/IdSVZv2BdOIEIUwZHU60o+To38/CDLr2noAEAQABAAAh3gta3Cuk4bwsOLnVCfrAYFxuI7KRE7vRsienctpy5dvMHRgmLlDIs4BzzRuMYmLaiN39s0Wd+eDMqS79Oo3NzdRtD/wxNPFvp7cv+3bk6DVH4boawgwAEAAQ9Q1KBoqg8Ea//7UsQHgAr1D1WtKFUBWCHr9PycuoVDiqZoqaJMme4qsY7hpRNbFSd6nt3VUdHpA0FSGXU1Bp1DFcXLxC9fbQWeQ8Sw+1Gnb24nl69Run+N34h8ENoq4bJRWmrd2UUBBAEIEkqSheM/A9xTM8VSJII26zokhLQ//iWNrmDGf/aqKNc3ZqLh427E8oM8Nvp0bQXczictov9S3P491fEJPUt1ILNXpx66S2h/K+mhxcyp07A8kogwgCAQSU3Avpq1tlotGcgdkoJG06KypMlTnkkA//tSxA6ACfDRX6wwrNFDGi0w9ZYOcZe0aP7zEN9hadO0OlPGOuPsoEym6M7a71ca3H/1HK03L0fGj7iDyhik5tkur98l0166jQyoEtNWASuMlkOO7YPsyXSERnpXUquh5K1pjtf5gEn0kfMyG4ler2iZZlXEHV7lc6lKoiVHp/CLIztqZ9HScWKwdZIDiUXoTeSt/6wzOeVq1MKEZVMTYMMp0wH+Lel5xkDmJMRL6A5p8FciSDFQAAEpjsbteJGjzFkjuaEZSuPPNzzQpstDhKD/+1LEHAAKUIFrh5hyMVQnLLWFFjKAxAUdR1yg2ACEukQOWft6HU4f38hl0kKnIoqDCFQBJCTlCiXdQWra1d/F5waOLRrqR6NrBLFAK1SL6IG0l2aIR2MEst0O4ybIR70JJyRp79H4Thzl/f/tzNxr6jfJ1HdTe3CD8Q9PXo/Q/CivXvlKtNCDCTRBlcAb7xWhVE8G2RAyZgKgXUWFxu1OQ2oY6r+5sE5e1sVKxpjhB4h2ijx/ob/o/Hy3N//o+qFuEAeQjgIL6h/mLoopW6Rltv/7UsQmAAoc62mnnLVRQCctNPYeivvpqdbXIGSIE4yQ46Dxs2kyGgtLkdjmAZDUnxIUQVg7S61FBN6sQo76sQEVE1IxopuaYo6fxb7lPL/6F+V9P/9+niAvsPGcz39fb36+n/bqX5Rt9lWGFxUWFErKKaYF4JsviQDYcDfA/4ChgXWL8u5KQkQsVi57+D3Eylx4IqaW2Ro+qzoIC/BaX5X09uhficvz27f9vflHo5QY4gLRLnq6n2/rzkR77UFAgUAKoAFCBH9mlt1GDFAG2VRx//tSxDOACkjZdee85/FLJyv9h5V0EiE1p3egCRHDVKVfA6Z/qVmr9sNX2mSSA8Pa9T4wbFuFeHegpxj8LDeI+b29/fjH5h3E24h5f9G6///z9RaBAQACAAQADAqSR9rN1BrseWydyGxmLxJ0V61Kd4rcZPRswPnZzvHoXzWx4zyM5KgoDLmMXI6gPLToKrwa2Jhq2URMsH8x+V///KPkpXP/kK/+mt2goSpT5hbEgfsA9zBycA5rF3IbauQnBbyeKqwtW/jQRWisNCqx48lQNdj/+1LEPwAKfMNTzWDpQTonbfD2ChZWucBfQF7cEPRUWyAn5v///o+itNRE09eheg3X29OidW4MbO0q2DAFDCABc1BemVRVYZgrNoSzukBCUK7m6hMJK+StrHSIE5UxgNxpE7jQ9i7R0983WwazQqWleiDpWrGhss/n9ujppt+/5cTpjYVPGiiL6N1Ff6sbikbSLTgYnKH9TSbA2j8ug6rWxp1v8R0HNW2F2zRbQVCRhA0YFUTNLWlxfVLiKlIsyyT++7cO7Iocb/+/bfOdNCNpbf/7UsRLgAos41msJFJBVaHu9YeJbtG6vuxuc/OLymZcXyFY+GKcQhAENAFJRvDL0JBc8qkYKigHEhJUuC2TtNWXWNYovlQ4CDbWHo+3HybOwf0zXI2oD/B3prOcx/Q96Bt8b4c8AAXnb2/5PJ4OXjH6t7+3X1Tz+ttvQnG9BhKn//73hAGAFEAE1a+24CTRGQg4dkSl88nIdwbySOlR4CoeXNwkzTL3pKJKg2d8xBnCsvTbYmpCoVQsHLUzqLS6jz0fis2gMK+VboW/6+e2oiX5//tSxFYAC7FJX6w8rxF6Kas1l6oQ79fv7e3m+Z//26t5f7P/63gFADAANAAxORQVqDLizKW5S+geoM/QjEP815n5jTbECG+2YmZTs/rO4kpJK9S2iGGR2kws50jNdAbPIDaCvfXqJZLoE4P+Ly3KEtM/VinUevoFZ62275fPxFmqtm6jZXt//rpwMAIAAKwgWrFMYo7alBCyHdMvREgUlLNNZ/5RNrAAA+pu/JAbJWz9GufWJLkZLbNNQbBq61uAcOr2Ewr6A76AIviQY+BF+Jj/+1LEVgAMcNFX7LVUgZGpqv2XnhhnlS3k/+vpvHiz3H36lvM//yvr9+np9fK6v//XhQYgMAAmgQw5BYWuaAU7iBGhgzRRVyS1o24ai90ma+Z0VL8NTIyvpf+6QA1Pe1w1xG9W2bDQlBIHtTHDZ9RI6hf3x0tSSF0xcKeo5yotdDejevlW6/b2/7+QYb8jU+Tz3//97wACAAUALHRybVS4cNh5R5WpMmJUg6vdqU0y5DbAZBnueME4e7XhAqCvlg2JwNv756RPa685+tROKOgDfP/7UsRQAAxtDVXtPVJBbamqMaeeGAM8BJ94mfnhroMdS3v7+vjvr9ujeZ/y/lP+n36/I6FoBAAAAArACVoTodd/AaBcUO2r9dyVLDAMs2exmz4ah0fO3jAkYRvyBVSUxgToxpfgHdSYaEQJ0U0MtoGn0Cfws/P8Tl+hbyPX7eZ6P/q3KNuxbr6lvH3XeRrdIcQIAUAAqxLrcwz8ckO4luSCqkRSs0pGuxqwSgmwpS6sSU1nof1aCB1TVI0Urxqz65hOdLbYjyv7FCHi8VOVBsN4//tSxE6AC30XU+088IGEJCjpl6oYI2R488et3HOjdW/6+nn+b4yHFuLhR7dJ2pB5fy22p1KQRBgEyEFOUS6MvsjKh2XuWSVjjKKoe2iWlyEkEdp/QQum/tWT31KLqEFYs0aRRQMUkEtCo+R/BfEfGe/iXq3t1b39/X29POC1oGdW924r4q/N0Gs/fmHZEwQBAAqgAGsZ4yJ1RGWFxSeZcZaw6cMKRdqI1FpGdCQvC5GzEEJfS+lFGx9jwFXNvlWtZtAfDWtCoh3KK+cBE/Bd3lv/+1LETgALEU1TrDyrkWkgZ/WnqhhJG/Kt7dW/7enp/xex2oo6lqmSO/9WShAwEAA6AiYBZ0+6lDBwGqRPUg7xc494hcbyxZHUprCe7jBr3IM/3FMMN3BUjhXcK5AOcpcZbmr7PGiV+gp4vAsbOAWexwtGaiyyLZ+reW//yH/+wx8XjXqS7N8t/1qANAAIAp9ULPBnc8SnrT5TVIMRSplM1HU7ASbGLv3TOwaHTei9rE1mEB9hbT6uT0tHKSaoWS9lcr8zJbmAXVDRBsnrsJivSP/7UsRSgAu1BTetYUuBdJ8lnZe2GHc9px+tvPa7e/clvR/5gf51t3///6IEQBgAKgBgAVtVYaFGoc4IgCr3dCgc9QFTzZ3cYOZUFG8PmAKjlmfM1228/mwsDcuxnphDQaPVqSLitcnEW50sbMg9PnAsnqSHEl2EP/Kt0Fr6N1Ty3/+Pa9AkBQCQAJBlyeCisTiqsUkvYqJjAI25TMNJ6k0SDr+NGFGD92M7iDVr700MCGhY9wW1i/2OTRESpbYnlL7EHUVjCNoihZcSUqNAAV4j//tSxFMACzzvK600+EFfGeRdppcI6+g7p8V1QX3eS3yVEIAAAiv2Imnyb8CuZaYkASAHmyiMhjayASH27dPJhw/hzPVCSgs1HJgABRiR/yfH2y6wH0Wr3UMy8qRfYHaeycE7SpJCBOjUMM/V9+pvf/Wc9/+Y5Gt0n//rIB+3bd9wxlBwWtd6YyMvNumKSzkjMoKkxaZWYdQfOW5W6Dr2IxOCgQw/dIZstjoDxRfu+Z6Fz1YUBvj4WPswQm2iLp+78ru8itvqwEAJHkgEyUQgCbH/+1LEWANLQO0abb2ygSKSY4mGHoqoIzlFIBIpUzZ0vWS01ovqDisaU2d6XOExKdjy5mnApiVAqX/OJVWtVVRLe9AIdP0SElZrJGojAoe5GJf4x6/5V1VMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsRkg8nEiwwMYMXAAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.639,\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.639,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "jingles",
      "sax",
      "10"
    ],
    "keywords": [
      "saxophone",
      "brass",
      "jazz",
      "moderate",
      "smooth",
      "encouraging",
      "successful login",
      "form submission",
      "progress update",
      "success",
      "ui feedback",
      "positive",
      "confirmation",
      "warm",
      "elegant",
      "melodic",
      "app ui",
      "jingle"
    ]
  },
  "categories": [
    "jingles"
  ]
}