{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "impact-metal-001",
  "type": "registry:block",
  "title": "Impact Metal 001",
  "author": "Kenney <https://kenney.nl>",
  "description": "A slightly brighter metallic impact with a clear ring, ideal for confirming a selection or a successful interaction with a metallic UI element.",
  "files": [
    {
      "path": "registry/soundcn/sounds/impact-metal-001/impact-metal-001.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const impactMetal001Sound: SoundAsset = {\n  name: \"impact-metal-001\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAABwAABerABERERoaGhojIyMsLCwsNDQ0PT09PUZGRk9PT09YWFhYYWFhaWlpaXJycnt7e3uEhISNjY2NlpaWlp6enqenp6ewsLC5ubm5wsLCy8vLy9PT09Pc3Nzl5eXl7u7u9/f39////wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBU4AAAAAAAAXq+twt64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAAACkwvNjWkgAF1la+3MvJCBY05cLjDZUDycD4aDsQjVEi9CwhadAGoOqdibvy+njYAAQDBIwCAIA+D4Ph8u+CCwQdgmH8uGNXLvqBAEDInB8Hz7uXP8MHKgTD9YfdUCGsP/SAbfKLRqNh+Nx+MAAAAG1uKBzoytSdE0VDiwJIBorJOqs40R/xunC2uvzPFuWo0K//MJDcn7Eewof/75qLlOpYz2TEb//uOn0+Xta63bP//8WEzSPYstAWaEuWVOkU/ixF1MUMA+jN7jP/7UsQFgAicHRIZ8AABuwPhRz4gALExQ8JoMvRGejClQFAwUMCXgQwVoBpsGBZABV6raBuG9ls01l3/07fd0///u7aP9S+A4v7vTVo//9UAABnZZHKYAGCKHcaj6Jhy4HMa3SoMGFhBZJgDAB/ODQOTVMDHAusMt1w09gw4pMAJsliiZRp5DHlxxhdhMtPTwst8BI2kIwXcZMpiJWaXaNtFgm1RES3vaoqCwXYoiwLMMFbEgsZF2iyf/6Xf/3oAC9mdpkyxp0bMEDCBTBFASEwX//tSxAmCCrwZDz3wAAGVg+CF/uwBIFJMDMAbwcA0GAggJRgFIAEMAAaok5V6reww5sUOU6FFCitSt3YhCuK2mDpQsh4xmiqL3cfbRrK/qIaXSWu5X7ND2oCZmwZamlvgfZ1AOZpKJxzBia6LGcAokbCQInoz2GrNjTbsMdPEgo03uH8Lob8/VGrKO7jZfn2zcvq14Xvyov/359eH++22+GOQ/7uy95A+Vv/wk19FmLt5Eh1ONfTboLwX8rEQKgCCubOrBZ7/goH+B5rIIEkiSST/+1LECYKK+BcIr28gAXaDINX95AAKn3Uhi6DIZNPFWEmFX1k41RlS0uiFyw6Dp8YP2FxpJeZMOSVGOSupepWlYQ4kcUW1QrBIhY+pNjh6yNwou4WsCLVzrahNNkWTajLSQjQ4StM1TDWnMU4GBqVQbPRW1Y5KmgYYlCwqF1BJAGrYVcZbpsmTa4lcPah1Kykul5p58LgeGkF3gM2hYu5o5vehYXsDCK3nxCoN2oXFgwbIEFDTTF11ns2PMrLMjzAyzWVhElC4wvqqs3WUXg0dev/7UsQMggvIkwYv6KDJU4Ng0f5oALIW8r1LZp6ms5utS9F57ySEbc+rxp2iTWpjbs3krd383Vdmdlhxf3O/96n+cXvDBbXGfrulWjh/ug0W/uNvQ2Uvv8K3/oAEHGIKLBkT4Zke4hJsNCHslm/UGgIgYkxV4muw9eLlhxmTkXsU2sVSmlqapV0Ve3W1UXdWv1IqfZqrocyqhaNipSfsOHtYugvCrjSoNrQNQBlKWgmqb4zVt+CMw+C7DqrPM3Fo55zOQMMUtghLXe7k/xdwBquM//tSxBCCCOwbCi/zIAErA2Fl/mgA70uC+zTsna482rSPvoPqqvcmbK/vZ1IKOyb7qA/ov22qTbq7qEUgQEqoGZ+x7plNghGeVwBshjnz5HEimlSGKFrDNdWs6t+lzXtpOJW3ailC9aT35wRnHKGIWy/pagX1ov1ClaKUDv9TXr7/prr1czTVAQABxkxUYYziDJHsG2bNOx8IpwUhoh4KPK0tiazD17tahi9IluihDr5m7J8D9eTqlPVuuuNc/QU7W6Fdx5LZnk2I4tWsonQQ40P/+1LEJQJI5B0Ir/NAERYDIQX+aAAUSMRiB7z1qqNZFc8q43BczoYMIqvetwpaaYOsdnmtaxDXiy2U+L11Plvts5u6ttidXa+vQVru39iWVdz6ehjhTa1aABAu91lkaahsROlmSCD2bJI9goPZUO2Azc2Wxf011UXfT7u5NP/92v9btrf6v7hf/LUGiawYhoIIPMdsXZpkyHQbmtNGUEg4M0GAnJlwbvZvLvbtHW3NaqLdittFLrZzVALGDPa9ORyNAxH75K4/3rsfXb6DfSsB5P/7UsQ8gAZMEyOvYYAhEoMhAf5oAIiAZ14j+mV1gbZtZxoE5kRgAAorM5JEQpVW3gDtQ7N7JBDrbFbLE9r7rdKdPNm7K/5//so/Rf2ffbrBABhTLK0Z2KDAHNEOaHIRwEZoxhjgJfpqMAQzTDFKZQzalhJDtU72rfq7Iml+zVV97KXD9t3tKVMv3r97KYh0NP3ILuLtqTU8CN0DqNE+On0wCEH2sOXGAGegSEqwFKPIoe0zMdKMQNVcpiK9VV+gqS2d9I/9jha/cNUtvxTani0B//tSxF8CB4gbCs/owIEcgyER/mgAlJ9fRYwNmiSFEyjJhVaSGlOGcZF5glFqVMgRJTLwbkda1ubsl1HWu6fsu3fwOer//9GrdWsy1H2MMefo7ayCAGCBrGcZGZWDadqYGjCZ/MDooDl6wfQ1jp8mVwWSiLGA4fF9dSyb1Fk5ltbq1DrLkspmX9ViFIoSuzroUq29vupmhOmV06+LbCLeY3gl5rehFnOMAI+igusCA2SIGyrDLxj1r3Nts+5FLyLa31xmvXqXfRq5sI9mx2opYwX/+1LEewIIPBcGD2TAgNsCoeXssAhjr53udkJDt2qqNC8dpjGVQpo9jTNnZj43NtoyCUAzkxp+Z4aKnlaFuIMayAEoWlC8fN2p9iUoJ1Ii/nesX/rXWq51Sf7RbQnktK3KNojm1UcirVGhnZYaTgYR046BmAW+hYv9tH7jdJu579TG19fV/f7eM/uU/s9NP+n1XX9v9nazaNWqAICBkvV9myoSqczZhoAxnDaGgMmPDFrXWlL/Tr7FIW5j6VNUdWpqLX8BNVkddrjSS7HMRS5/Qv/7UsScggkgFwivbwAA9QLhle0kCDVr7HM3pXeT+xNL0OQgfhMYY/TeidTNVETk8jgzI0tYmGzhywQIGwxeMuNiqt9hnUipyFr79JBNdimqPizow8LEbX3aJ2Wf2VUftXu0lydazu6V0111AgQRwTcHHO6H8eAtmolBwHgJot6taTSSW0wxCFBI20/LoJEy1LnliBB6Rrhlgqk0hpmLtSXFJKUe9TGNSQObCJi5pAMobLOcZLAETGBr1CO5CRK/hoOc6NGJHEsyENDqi60NQMeI//tSxLcCCLwZBg/vIADTgyIl7eAAxeBJTIQCo6CJktUgOXyC+S56s6nbRlEKjWeW+hbZU3U5X9nZWY92SmQtnahjXZamS0j2u1d3XzUVXRGTQ5TPOrustl2mwaNzUr+aoNh8IpD5KWrmaAdAkeLsmAAASVBVjCpW4MUIBk/ogDSQwsiKvZ7Qs846YaUMvFFpWacpyWJSkQpVk9TmEm067lMsLLG1LDd57u2U1Ja/LQ2lap0xecVUTYlHGJFHsRXcRkRO0rA8y2w/TYyDEGQKCRP/+1LE14II/BkIr3NAARIC4VXtJBBZE7M1ZFq0m+dhCzLciU43TyicMYjyL65wzMyElNUOmSQ2bI1Erx8rrFSZs+7npbzNPzI0PyKxpiCNjIh5sX57g22/BeF7eVETms008PH6owVrMjLoHzamT71ydQACKrqmjVedeMwcGI4lzHAQdXUBkTMUqcsOJ26KWL/jw//GYAMWd1z4j8rW0+EVq/Kmz/OZfq4ChCvLvekkZx839fqwlJNoKqfEfd+3ZHZyVuGp9X7cIHx9t36NafuOcv/7UsTvAgucGQSvbyABkKqgVe2IIFjbJltg2nLkRmwSAiYOBU+nVnroT3ijklkVFOjPexTInrFK02hdzz5ZTrdhTfI3tKGS759YiBdvnOwmdD7eZF6X+5pvPzi5daiNVawiJOQPJjPf66zW3KZdQYiREgbP5deO/jti1QIPacLClpsAhhnIYGJEo2Mzaw5cYqW52seTI9ExIqOJ8htYvCyEziUkezSpDwerjYoySPrwe7ndoROPmW1MipmpGWZMdE0uZPWEocMPnmkmplSNvJLC//tSxOyCCeQXCy9owIG1pOBZ7QwZd/aT5fds0RIqhQ4mQ78FecpqWaTpmozkNkKDTKjoWkRE06iZDInBeOpExwC+KmwGRcaGB2xUOPvU0yFlBtdooChpolYlFDyz3JttsXeszHDs7TFwzaseFhdAoAHnlBtZFxs2Hmi460WYwpe27HBTWsCXjgmSEqoAjIwn8NMUjUxKhZjCLDBMFIFQFAtmAsAqAQJhgCMqAJluFvoql5kOKszS4OayrcyFsSc1EIJRCKzaknE0rIcSM+MVztX/+1LE7AIL3BcJL2UgSZmjX8HtjBkal5aDJgECWMMMOFjjCgs3JhLGRihmpClNazEfHhNZSuZuXPhnldb9h89WXKHD2bLWUvVOGZFVWzbnKCFNLPYAk1EgKuaXYuw7WWUAE05IazgAZgXgNAUaAxCtZjF3sge2hGhjR/gU0IqcO2xfB+3HvKp8NcSC3h03LL8lQsHSQ35zGIv0m2R5RrvAUFFTMvurOlwcVb6IjplO5cIkOGvNWay5BmQ7QkI/xJ/ZcRmt9tL01lIBz2oBuDAU4P/7UsTnAg51owCvaGEJYgNiGeywDMitSKUsxUozZHnhnJnklokCVcnJMs2WogISMOKhgYGrRDGjMxAwAQVDgY7EfIRak0XJd7JkhQUP+f+h5E0my55IhvxvMc8siVYCIkFCDfeKGtObjtBTYfz2P0LN/g3HfQ/l18rLO93ATCAVZ1kB6hgYbwO2FaCJuatcK+1J6p+CkeFMDrLmLgmShGDEGUg9AeuJDBQEK4K0AQO6HiOMhOdMEAQQov2c8izUuzmC3SKCAhUcYZj+NhkdwRYL//tSxN6CEfFPAi8wcMGlKaEd7AwZs49UfsRpNTHrqcTBELeiwwgSYZj4GSgqmNRAxtTXWMZoaDqDYFrRaGqqAAcAEBJuQ1igVBoGISKWjzBUzTGBvWScruX7byFykp9Mqh69zs6vTLyem1Jp5Fk8zN/v9maaplp/d1Bt14lXeJiJiDy9f0Ki/udM1at3Z/95TAJCo3P6iqSyYrdtsBq/JuXRoDoatHHUEQAHENUIK+tXDjw6bTCAqfMtrC5MNkRyBdrhNViQFTaiCJO8bJ0HH1r/+1LEwAAN8Qz6Lxhpyfg0H9njDHggdYvUtgZZgq19SIUYcelrXG1CyNDntvGgsKIz9QHOrID4oBbRowkvZfGKw5OLOJESSSCQmOzmpJlEmFCIgaHwCKKi5cClA1A1bTA4BLcWGCz6UzieMbdE8V0CriAjzou8ex66EMftXJPe5fi9rdousmMxyzAlFvoBrUsQjSyMIoWPRcTKGSIUcrWjKo/HZlII5XYyOZvuh+Xp6ojulmqm/Tb3VGm7elhaWhu2pxOs/ef5pvuaxOXeVJGUF//7UsSnAguw5wlPGGAJQ4ZgieSMEMM9gbUAFmODgDAaAYC1Hzha0JCGSsq8DxEYniKlFhd5owEQLFEi7ZAwaaqLtnim0y43A1g5Zzp3sihO9pJANUiqE31Eb+9Fl7PW1FVT2vFYpBsFgNZfZi9LNhK6Y+PDxTjEcTLw2jFpk/X1I8uoGIa+4AOxNFiaOuwaj26GC6kXGDn6F+Y+KK2rZ5y6rA6z6FlHagAFo4NAc2jwNSWhXwVpKjC1LUAivlYCy6B/RNh5aUWMDdkIsU06RdSx//tSxK2DioxA/i8lIEE4neAJ4wi4epj0NckqaqQ2pkSLi6EL3NNY56kVoNjLqhr2LblImFlruaNCScktG94UKGHGTeISa0mXzDTrKrlPYLVGJg8vuSPvMtth6lZ3a/uAy9jrmzqUYGJKYrWl1enud0tQZ0RVAE0ggAsIgBJVNzWHv6DoNITIyWI3kQnJUPWbaQvOWuXWa6MlGyDoGBZh8eAiAmBs4YDpUUHGjR4ZvERUA3OKzlr0Ki6J2RcZntT7Gty1dN8XlYySmZ1YikbPrDL/+1LEugOJUDUCTyTAARIMoEnjDLDvR0xYAee1zoU5LBxsaMBp3OAy2hBlAxtnBLIpFkjT9Ep+nMyYN/ouJkhMMx/PCwsBBILgmwaECgEFQ89JYy4CHkFEjJO8eBTUmLlpAgLnrYtXbKCSfHu7a0O05qaVB8/4APy+TJH4hiA47MvdGZh+BlE0QCewhXKFQWuipxCM07TMzPOGRHNotiV0hvydKnfRj/8xBiCfApRzwmKHBRbwoAJYLLGmGBEdbPkXxoTD8IPtEiWPmENonRRZZv/7UsTQgwmIRwJPDMPA8gFhzdEEACtnrW48JgMFBQEMUDgQkIRyDmpMo+2HKEQdnkKvWKEtyxq5pUaYUIVlRe9AvtbS1TnudVONiVbXURs5QYKlCqAdTnwsKNB4AUjHKF3DXQwukqjh5QABY0hgBPGgAhmzQ+HgSSQ+HhPLL90x0fIBxi69n1OhBQlJXDBYbOMQV44ddoCfdTvptSMz2Uimv6PPmT+x3SY/1fJU377Yib3VUc9bJ7unbhcju/mB93u09DPG8A/cRctaXH5v/xYz//tSxOoDi1hM9i+kxQF6Dp5B9JjYUlAAwaAH1xqLhQhCcQUxMhOieytKloEmuPvNxcESJYL6NaEMnx1Ny0NTyH6NC6Hjyh5wbjCrL0NUTS5DFyyBj11uH2vvZjUXoJrMpjntCtNxtdhh6aq+pQCUm5DaQCJMHwMYwkAQjAkAYCgAoKATU3fCKXJZcopD5QYa5JZ/Fdb19LAwXp59TvlHo7J9FiM5RyFBMu6trhr2tTWUUlHvkOkAQkwU0wQAAAAnEvm8Ai5xgEQGJQpv2JgQAGD/+1LE6wOMGKb4LxhrgUMK34nkjDCwYwH/MHAwHBBXMZeB7WAcMjRCvHGRUQuFoIpISl4X3ACIFhgcoK2QIEK2+HvjoHAGKwuHIaOaMqZJ/jjFwFRiYHMMTIiw5xiXf5OEHJ83PF83RWXSKmReL3/IoRQqFdTF8i5XpF4xLpFUnX/8nDRlFw0J8vm7JpF4mjE1RWYl0yL3//TLhcNDd5mXzcnEGUYF6pJEul1J6jIvIo////+aF8vm////6NExTEFNRTMuMTAwVVVVVVVVVVUAa//7UsTwA4zcwvZPsGPJYo8ehfYMePIgBACEyYpZWFTKyJrRKCpUNFlhsqdg0oO/iWd/EXxLiXqPCL9Z0q76j3JLO7eIlHvxL/llTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxO4ACSAXBHXhAAMQQiQnOTAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEvQPG0Bz4XJGAAAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\",\n  duration: 0.688,\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.688,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "impact",
      "metal",
      "001"
    ],
    "keywords": [
      "impact",
      "metal",
      "bright",
      "clear",
      "ring",
      "confirmation",
      "selection",
      "successful",
      "interaction",
      "metallic",
      "ui element",
      "crisp",
      "short",
      "positive",
      "feedback",
      "subtle",
      "click",
      "tap",
      "acknowledge",
      "distinct",
      "precise"
    ]
  },
  "categories": [
    "impact"
  ]
}