{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "creak-1",
  "type": "registry:block",
  "title": "Creak 1",
  "author": "Kenney <https://kenney.nl>",
  "description": "A short, distinct creaking sound, useful for subtle environmental feedback in a game, or for a UI element that suggests age or mechanical movement.",
  "files": [
    {
      "path": "registry/soundcn/sounds/creak-1/creak-1.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const creak1Sound: SoundAsset = {\n  name: \"creak-1\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAABsAABbaABISEhsbGxskJCQkLS0tNjY2Nj8/Pz9JSUlSUlJSW1tbW2RkZGRtbW12dnZ2f39/f4mJiZKSkpKbm5ubpKSkra2trba2tra/v7+/ycnJ0tLS0tvb29vk5OTt7e3t9vb29v///wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBWAAAAAAAAAW2tltGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAACBZgDFUCMIAF1EmGE8aVIAAsEBgOWwZoPiAEK3j3xP1vlOGGCB3wxXu98//k5R3v856z/PiB/SQ//f7JAgBGR9IlcE8WoC0hCqfMvaBnJ4gIwERov05wM+725M+7hJEOis03S9ydUr/xAckH3PIepqSQXRFWl36h5Coo7ASz+NuqH1FXnKEM1pYmiGQO2pRwWCWmnMkBizIqPi8Sx7FS6qVOeNJVK/PWZTqw+SDUr/r1mEXdX2OxDaEiixDD82C6lm2G5/+64jFZog//7UsQYgwp8kRQmMSnB+5qiQYePEB2qZOn4s4ECb3uqMDLnPZ9a39r+U3+z3Z297nBYqlCbX9QvAbXV3sJEbksY5KZdMS+QxJ7W5LgtztXUEjCBKkNQrB/GkT8Cv7J+ZV7jO4NWszuxA7BDYwlIBSLazh8HKCrNf+8BV5hgfAbYFMRhCEgbK1T0uq3LMjyV5e/FDJOSyOIFINh2l7Bh1JDxc0aqtF1ioqbOLSGEz9eZJN5F309PoQQiUaZCusgFgWRUjqZP9Zhp+GxvL2rZZAy9//tSxA0ADSCzFiy82gGFkOV1nDyxiIY/F3bkVZ24Fisrp93cq0sjMIguXwau5HYQ5GiQXawbulHZhf/YQtzs+LiMwuh0rhkc8p54GmQUmXLV8l6nwaOHG2hy5a5GSPKdf70dygHdHSCQArQBZ+IIunW6a4JA4DQBOzccHDYI1uieBpm5Vk/gjWNfMTiYEGYMCvhl/OOBqAsRzoTigZLQYAxDdJpmRtS6xPn4993zCpDxTUdt4YZ53ms8p74eH7kzPoh/b59KaEQTAAAEuAEulqv/+1LEBYALpNsvrSRzSXIZJXWEiliWHmehoamQCu/I0PkVsmFNdn1hJBz8E2y2IgNiQmW8NFt01O6RaDIHgzWW4LE47JZMqi//lPE4wrZLXarynjlQj7dv2zac7zzxtw6xuYV1HNDeIgACAAAAywCHZc8yGRt4muxfLNsCv5BBD4qqAgMHQP+SwKOCwy1d6QMsBqcFqgcMJoVYp6WMCSCkhQUUh7KZQbMqsCvLcg4/RPal3sRkZmdhbgIUBBYPpEetfy9NYhMAAASQOGp5urrHI//7UsQGgAvgjStMMSTBbJoltYSJuaqoFllSWEiMuAyiHm0H0bAAEij1lZig4jTUit4wEoR2KjKutK4BokG8+VqHIQQoDPhsXYZEZvAIrWYCsPMA0XIExG9AVk4DZSlQEfWc/////h8sNRMEAAF2gVsWftwMYp5PmDby2YpR3WvToNUX/VCr5yTNuGkBJGH7p25r3EAxTLVTQIob7TrStpr522ZEUIGIJNZns6XXl+2yFARYw5z1lcn/P8J8/w/Vi5LYqixGVQAAPYXrLaLpBC42//tSxAcAC9jXK4wwyQmBmmc8ww34sRNCUMJCiorHQzDd1dPNnBaQ7URcoiiVevZwaCCE6RCoogQICgj+yaaXhjAizyaag9k7Z78NGZfh/HnX/bK87/4gwxBX08AR/5CPu96D52ABWFIVJQgZCcttbTB2BgTDYPR7A64DWpdPV6iMk++FDv6ndlQXuYWRbEldkzLrYVm55KhZekMgk2E3EYfk5FN8b8/aFSp7UqYwYauJEKIu0l7nzqDJ8aN//rbSPM/V6EmEVciXb+ggS5b+nk7/+1LEBQALmMtBp5hQgWWRqTW0mdixJofaFGRpvQw6bNareMqjfNSElzXPIIC0z6IOUEEESZBlLrudEds6lI2r64JinHMh+/9Vdd7dwUHR6Nk97pS5Bi9b9enUpziD5wRv5RW9C3nwWz3kvhAAJilFekgFK41QtOpExIxcmErBwVuvbcdfseswRlRfEkJdFmggNjxc2QOFAODhf0whlmQYrImyCN97vN102GaeeG1/auLn4YAoOE+z99lYXNBY/R/1qs6eDQLYo2MW1l522RMd5f/7UsQHgAuFGU4G4bDBh6ut8FaKvpb5jTP5FH8fRDmVxNxhYccXRDGqmEzpSRgs33mVdBCgoqWOMpDOF/BWGNEETd0EG/63rfboWFmBRxiFZxv///96ZJnDUKpf//v//4QJ6OuuRgEOeUYUoUODFqJg5Jy6MWHzV85CWLoKQRhlFw19Dtuprf9aouEAoJUf9lpI7smS5LvnDBVYugowM0AIQRgvhTf9f/W/9FNE+ORE+5x6ZCmAFduiqnvOosU8Yx//ua/SaWTMAoGBRRmx7GTR//tSxAaAC9FXZ6eottFuqyw89QrYaHCweUyFU1RThVWvZnhoaXVxbIevnzuENWAIKpZlJyqZD0vRzjv9ZCwIgXSIWp/r2a1BQaMIdGUxHrUIihf////pIAtv3dhFv6P/QYcKN//+mqW5dtRAASLA+2exzk6NFNXPx6dqXjvMJI01TG+MrpSMVZv8vaLpnF2Drnik5Ahuik1e+htraKgzMA0C0KhEqX/b76evdVFKH/////mN/6BjG+/f6odQzvu/1uTVZlZlWTMQ2TFNfCNk3A7/+1LEBwAL1RVp57FREXgq6rTzKsqT7WkvFRSpWjuJo3DmNdo/zLZ5jJmurYH7hMr49K9LfbTi2vfW172sn9Z5ouDctJW/x67t1kbaVaphijpM7f///6WPLv1gqVA2VU3YDQnAIJOOxvIgBAIOjPMEeAQ5aNcltj2J1GTBqo8as+/jKojxbQ9avYtxKh5EBGYrVYkEFT2k0Of6qtlTL/3OcBcsYr/5jm9tn/6HEY0///dOysapuLgLqnejzZpA/bPT13kKBCV0WQAAQAD/9pr60v/7UsQGgAu80UHMvVbBYSLnsMwqiMKa1bgyHbzhLdjMpl3P/UWtQzNVMezEbTRVuFnlvH02llTKoUCWae3LeYT2+K11Sf23qta2v6J1tfjkC7O5U0pv/Nd4Lf7v+6DrIBMO//4VGG3doAAAEwmyYiphS8AlfGE8RfDGkzMzpVs80ujshG4fNxfcBIHvJhszdJ9ZzmuSyhJjTkpc9HU1Dk3IhqYwsgTCKEAp7a6G/7/zMjGwFwrmt////6kYXhJVEVsuAAAAwEFtsVT3VkhdrvyC//tSxAkADFjTN6fp9AF8oua1llLQRSfgvVAw+f+7bdirBtqErgi3NkghBHGAT0BC7Ituf2euaue2tj/6tbOdfPx3lGOclAAmDJRUu8//H/meWt/i+4ev/9SWiO4J1IU0n//8qd+kNyR4AAEDhgb7hRsoiF6I8lMDzr62aWpnz/zm6KUxCapN1HdZs+0jHbBPdQd9AA4Rjf9Gl/Ozmurf4Ivvfq01p9YtH8Ek5FSHIf8m0UyfapL9dqkWHaTKD/////WxqpAx2SREAIClyd+Fsmb/+1LEBgALkNFBrC0W0WIhqjGGHb8e/i60dsK7TK8ER5/7XLW9XatjK1+fO0MJ5YeITdGZERiZLvQWOLIMRTtjx46zzIi7urwqJ61f//lpmQrnim9sZenCwAkLGXf/rAJ5+//3VIldttaIoJBSU7iGGbQ/VjbnQPA6s9BDsPyC6PpcqoOFjm36+UgoUxcRImVMLf9fqUzV/tx0UHaOn0cYPHPpJoWUkRZ2+phnzP06OeVFqH//z3tRv0HJlF/wcd3liJZBatG6wwxQBQh5JlM5Hf/7UsQJgApZD1ensEuRMh5qdPMVosn0WQB0BcAj3YmXCQZOZtfZYrtmUB2Jl1ajnI42Wyqfsg5JzlTwGiOif2f0U/+uhkX/+pjPTRqqFGgXpxX30k2zHG0gCAWpBamzkN0/yXBGFYqz/LmzIY6BAjMscmPTgg8PWZ6hUYyrmb2l0OgKer/lOObv8zDUaypMlKL9GXb/yigEU4XXcBOhqfsm6hw+xbAEAJN1/CVxzJ6On9ivA+FDHP8k5d0OfzKU/hCVErn9uuGf0D2wotBKdeZG//tSxBeACsD1VaeMUoFEFWr09gzw2mszJ9OV3/dHORqkRmkIrT1UxFbn/0EGOEx593Vh58/raBiBcjZo2kQEQABKbtvzs7yhV7OveXRIcXnIIDM4J04uSR/7LbHNU9BsqkYzTcq6i8aZx6hGtMuEk7tocLOjMQabEyLw6kOVv9oAXW9/Zi7VeuPmdl4YenhBAiIAAC3bs9WKy5rLnmjnymM3q8tHTiw8MtxgERXkpCQGLJrPS3PsbqDiwuAxpQYgoCKUWKASzVCSRpRxAIzKAwb/+1LEIgAKRFlb5mDDQUUgsTz1lZ5Rc2itY1YErN0CnIf99AVEwyIqnHZJLP+wyJBVzrW25W2zCEJC/fEvm4vuA8NIo9pfY8NBhQkRHovqde/21KPaT/v7f7IHJC6ezOc9UWcXrFBpyx7v/OdA1ZQAIpiX/RV5WDUAQQIKbcufkGCAH7OhrqEQfvA8Q861Etmh+OHA4H5f89p43BEgjJq6vlReronvUdBgbHh+TTgI75YKOf9EAVLrPp8AOfoKUN1i6RqbkIrYsIaEQhQwIBSclv/7UsQuAApQlXPlnHFRSB5ufMaeQmdoduiwXa0Tukuiwyj6j6R9jYvsZBXlE1X6V5o+AIQTzH8qIhc/657JCUhuvX1UxDP/HzR95l+nMPLEhTWSSBF/Sc/Z+c/k/rVpaJUAQgQIKTl2bksU8Io6D4RwjOJYCUKJn7qVl79DP+HK0SBjN9sMGBUOTyTm9SAlJ/pjo6XW3paiFTBvUswNFvjW38g32RVvoazqiNZ1np/WEzMOAGYRgtu3fwbk4HVCJTCGWX1RcBsGK3QZTWNI+TKK//tSxDmACjy3b+YI9FFBHq589Al6Ec21GSs0xofgcEN///1YG3+ehEBFQtNHbQZhn/8xv/9jiSqdKwD805bvUS/JiXeqBphlECIAABTNAHo135LopuoFc4X0UD913KDLoTagTCeTKZ9EuSiQBYJ5nzrblhUOt2nIs9hNLzn3a2zkJvioKhJb6V4OtNd5U6zx35ZnmXYQMxaDbuw7542es7UwFiWagNBj8/VNG24c+oHhE5IVWIj7qhQBgEf/qwWClK3/Rg8H3ktX7iYiO/NNIor/+1LERgAJoLllwD1BsT4abTzEFhqHjLhbSSESQnQpDlW8763BenbowiQQAS5BW18qmgOnioeucBXC8A34kVInCvPMcqJkZkNOIgVzWijtpkcIWEaFRZ5epmszgUIEb5dZwKZnFf+UOiI7/WqCzlOv/OFB77oLPZ0C77FSlApy4DuIWa+TuCVG7hfEVAFyMjMsjGj0a/Q9p/bDQGshwdp1o4Pgehymp0RZxwPQJlmv89j2EUYKmOj69CQ0Giu4aIAzf1CVQ/4eTQ7vQCgAARsBqP/7UsRVgApM9VGlwKvRPRcq9CecuujInX59Q0Jxx91c6tSC4rO7xzxrKpGWkNJ0+Ezh/9yy3cpXFV0Ctmpqkh1rRpFQngtSm2n6Njg3GyzVf/mTN/pMpI1V0Jmga/FAA3AAgAAHABb3LDwXTWVViZUJllCpb2bel7H5k1S5azmkuCEEllSVsc9d5yZ1KoCUxAFxP5Da9SKS1oDqDogyMbK11aV1EoQRSbfupJ3Jk0V88hUSuMAEEAFrfq1VvhxA/G5ktj3KFWstzsgvYVq/JmGR//tSxGKAClDVP6DlqcFLF2a0LUE4AkUNK+09vWqnLyyYE9hODQAtbJ35gi6SJ4OSGQNLdL5k5dSJdCgZL/v//u/b/Qz/3/xUAEsA0AABCgBXVKPlnDla7DpoMACxIsSuvMO02eAnta7GcZKoeFDIECiGlYdzo+Xy4Vw/wGTIFbCzn/UYukQ8PbHLJA+1Kr2WXSwiza/2Og1//oUEQICjrQudZioTKHjEQUAbw00XQplGFqCEknXjNiYxbDD4hFQACwzXhVF+s/rvFTzDQURwNAD/+1LEbYAKOJkzoWILQUsWpTR9TPDDYEEkX84kkYh6YX/GXJK52/QW5oXXZE0U+v3OD2eRAGc5ZZ/Wf73u5zlOzg8TghNX8sqV5l+oV+f8qpkr2dIUcpujbOoGKAY4B/AKOHAtV+2sgVE4zX5bq8Lsc08cGKLDXKILZkP7UdXt////tSoAQADSDBSMMzJYkurHhQCYPuckORBpDqhgOdgamt2cuqYtbMMMdqXxq///qhnOypr4csBDEi6CP1VKSFzEi713zBOBwWqH3f/0fb//6f/7UsR5AAqgtyCjbonBPZLkSZkukOr//0vtB1XHmGe93J+xHoiY1jnHjitUsqULotr3te1lBhYUZtNPRwznNYfvKrZqZNwAKQF8F8iroezVJjlEPMnrsuZYuczykTHr0f///+oJmXNRv54X8cOWp+awX0Q5pjVMF1y1SOrLN37ePEEQiaCS1Lbm//X6u4bwWMBSAvQQCN30u+oThZL5vofVx6Ht//9H/2f+7///8UYIiHSkI1Bea7W8iQzXg7FSgl9PcmL0gx7W5jBgFIgwHR9K//tSxISCihSPHMTqa4EtkeMBvE3gX9fq9aQxZQA4FScOaV/z/jWMtycOipGLU0f/////////9dUAAJAOb0EkNr43bsXrZiBzCTQNRgS3XmI1D0g5lf52OJ2NcBpn7Zg1Ih4yJWLFT4YB0VjnggoG7lmPdp/szN1behFSfp+r//6zAFFKMDlHba5N+l19YZhSBUfF8NnFSZxsyMJASDaP9fMQchwlBbDxKSnqcrV6cNbb2t6tX6W9X9vt///YTEEIAFGCcwaQtVgcLQNQ6E0cBeH/+1LElINJZJcYLeVNQRAPYwSdvWDolF5OXDM0NiaIQpE8wN1LSFZUscRsPZRISIZD5IfZWEhr+77LEjCIxoFCgeNBX//Z1M//FExBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsSqggkQXx0k6OsA8YwjnMQaGKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxMUDyOBk8iSxJcAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\",\n  duration: 0.661,\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.661,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "creak",
      "1"
    ],
    "keywords": [
      "environmental feedback",
      "mechanical movement",
      "game ui",
      "creak",
      "short",
      "distinct",
      "old",
      "aged",
      "wood",
      "door",
      "tension",
      "movement",
      "interaction",
      "game",
      "texture",
      "atmosphere",
      "subtle",
      "organic",
      "antique"
    ]
  },
  "categories": [
    "creak"
  ]
}