{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card-place-3",
  "type": "registry:block",
  "title": "Card Place 3",
  "author": "Kenney <https://kenney.nl>",
  "description": "A distinct, medium-length sound of a virtual card being positioned, indicating a considered placement.",
  "files": [
    {
      "path": "registry/soundcn/sounds/card-place-3/card-place-3.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const cardPlace3Sound: SoundAsset = {\n  name: \"card-place-3\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAACMAAB1iAA4OFRUVHBwcIyMjKioqMTExODg/Pz9HR0dOTk5VVVVcXFxjY2NqanFxcXh4eH9/f4eHh46OjpWVlZyco6OjqqqqsbGxuLi4v7+/x8fHzs7V1dXc3Nzj4+Pq6urx8fH4+Pj//wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkAw4AAAAAAAAdYhzjlsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAAASLjNKEeMScFriibxhgw4AgASbnJBfv2pDGSJfru7n6bvwnEVzd3dyrxERKRlqf9GkofSSQldT0bfndD+QjZw58uUKanCBY4EJ/l/KO8uf8R8QPEHrCStsaMoEUqUAAxG4fC9AfG+iWcAglXvE+pLbdY2QQDBoHVleKDg4hB8NElsnMokLT4q9gCFLrSJsck+ARIkYIwOuKEy7izw4pW7D6z00XZQ/tFA/DAcYzY9b1oJNuNJUAF8SxmF6ZTUaqGWUSMbk6jmg0WD6f/7UsQNAAwBXTNnmE1Bew4msPMN2D44mHbnFGVatWdnzfMsVKFF73Uiq6mRWJ2a50fOh4lHTNkOQu9tisiql/qhizZjzpoUtGTDPpqW93Ws3fj9NDA5l7W42ukPaytEJQAIXZLVCcBkn4XkyUQdaoVZxstHyeiDSKYESZitu/JyB8m56GMRGGk6PrUBgc9F1BNkgxSkkwEMGuPDSL2uPjnKYcaQcqoDPjBwQVqrSlNNDZU7PnUqvGoIKhE0miAgA8d93Vgdy39KABDaQwHiMRha//tSxAuAS8ypM2wkZUmImKYthIzxUSQgJXxVxNYULdSqDMXuCjAyq3p5S1b/2JOfkufHlMh0XEeeWM2GwTkXkN82esEc1bjv99o79tj94bs/P94vNv9327/s7ngBVpRAiBhbBCl0oTULOKKN2KAWH2xoaIUZZp2rb0lFKSfJMUqTCHwkNPFAvJpCfE53qJv+cKlCldCjyI2xFDMx4na2b/iAZteWD+OnJ3PTLiHw767R9p8lKeCPt8b/dp3f0goFpSVUMS9gFkTphyZUBpQaJN//+1LECQAMlIE3zTzFQW4N53T2GKAaFkedLCxlyQ5RqOJFol7ZMiyR9KSNHjZuEeogpT/+M8F34Mv7H1iBBl4RZVSaQGRAcEQlWo5Uh644CHbt06gXeZegOLtP1iTcYlyUTBZAupiQod9d9GXGQCCjjKU0kmTcWUOiKeEB4GQteD4qExNJIs1JMtpd8d52CCWaK3q/7JKbX3mPSKPFkF3uZB8ekcKuLvWwJA6FYo0NqAxM2Upq2a/ehXSilrj7HQAmq8nVBFl1V2NY2USkweVsk//7UsQGgAwkkz/npGmBdRAnuPSM4HEfVKEphEIW0TPJAgFkAVLkjsaatxE06OZiVss0jxcSOCePdJ/nMizP+lR2icMjKAkPEzIHNiU4oaNBN7zhYYVaog+/DbPF3Koefc8UuGifHRLe1QKcKjsZlWgNm84FzWS0XjUDmBMfNCsPCDBGD6j23OJazT+g1cxlYqUQSt65bUX5pYoY7xdJJCEH5AaJ0peOS8D4SLqDdhJz3qc3UFnHKDLCC1IJtCVCYDPRY6TkcioW5a1xsoA4SMyR//tSxAUACqDJPYekZYGAr2btgwngSQwkmhQgLkQnGiSY4sdFRl1rwQ6nbMZ/azGEOlDqesNiyI07oSqRQyMtizv2X6Rp6kTGeeClzwdg8m/fWq3lZ/Dz131OXL6+QQ+QDUvcTWAkzsmuv29tpicgdZc0OPxQWovANDcJiAdhtIHFFg8W92R7nxTs8zoWQ0hTIZ7EOjS3sUyFlPZ6Mfmijs8EZTMZq3d3W1HV7aVaa3tpVvb8y5EvrVPzftzysyjV1QElKCQHzf9TzcXWf8iFU8H/+1LECABLzQ8wjDBlwX8aZrDzDdhxbFpfdCuNfd1GcO9lFz3MuRqKhqs/o/R/nZOcU/NxnzX86ZXXF5nptVyhKrWB5Zh8mV+QZztZulPmEJfhix94JmISU1bpDpcZuLrJu22BTNSoBgAuiaHUYxLj9P7LAj52JXnChsd8uAh3M8dZjsdqRyKol/dgIPyEXNT4jmhR4T9/PmugbImNGD5Vp0pIZpaC2LKPArSI3IPYfAKoSKhBwqup7m5tLyOLj7RW24mqMUnkZWiACCrBvCNRTv/7UsQGgEuwezeHpGsBdxpm7ZYMeFjnIbCQF8tFkZNBdY0KmDiJr1Km6NfR6LEWjMq8VzU2KdyEOW4IXBEMNHYCcNbwEHSDhYLmgAKi9aWxMPiyBR6UrXFxtI+N3l1M6mjrymxQ1KaWOoEJ1md2XFBIrhaVCSdlU1FnRncSwvUdZXLjl43b++kmxufjiNyyyLyp55KxKZ07aXa/8My66fcyNiu+LOBQJkV0kcTreLWk1vlxIfeXUBg5OCrp8YhNtqKypmpNefetNAAIRshiHl+Q//tSxAaAS6jTO4ewZ0F9o6es9gx4ToC0rmw+EI3fF6l4+Jg4FeFU/y/BYr94QyIg8QOgJcyUKQjDrf2/vOJCqcdCMst/OEn5mdO+lDsAD9QRmNC72A7IxM5ABZaqw4QVtGHtvqrTj37jUgw45So0ZgsrMB+4dxAK5VEqsT8LHnmvQ+uHahjf4xRqatOw1MoTuN6XIOR9Owy0LKE/v5NOETJXiEVgqLLlYqFtuf+emWZZ5xExINnHOcWiA4ROLXOG0vzs9L0zeot3VF6pFwfRUID/+1LEBgAL8PNHx6RpQXSTKTz2DHBzOInqpLEhiOAkZG2h4qiEZIubSjpB2txE5o2YPJ8WGRa5MXuZGWW7VC8rvC+cLz8/zznWthcPK104eSH/kLTJMegTsFCtGmqhrymkyNN1l4AwyQJIl3p3JIk2QCgxowAJR4yIxOBI5Kw/pfeEsuHJPYqsOSq3ECwpWoFkhKzz1oIQ0MenuQxiFDr4KHKxQIxo0d1C6p0xScIGwqbcZUXvnNKca0sp11ZBWvhch0rzz1JViIandWpRRADM8v/7UsQFgAtQPUnnsSMBfpDouYYMeMJITLSgiVSf4zQDRGEo8qKEptzAkvE0NMY2ARIBHMFBwuWEREo4sImBJ8Hg+LAJyzYrYUwGZaoC1ix4RaF8kdlpa2/+tS5QLHzURwwpEzFVRnZrhlP6EGGjuU/cuAHFzAFiQbmYwfBxOPR4eH7qmjF2j7ZDw5+Sk+T0xJ5kDnrmENATj3RQWKMHnxdRkesJwaYctKkQ2ZQlueQxrupCt8AG0kkmLUwBE6JxbBdMoedVVGZ4d3NMWUSQhMiH//tSxAYAC6STRfT0AAGCHGnDHtAAHqyHQjjcYUahS4kbEvpbYV4oCYii80OhSb3WeGa7/VdP5u9vrR4pq7RdbxyD0AdAgawPGpUQCNzQFN52F4iHEEdl8qxH6k0BU2BBY6xpAmJWZ7irxTTQzhnQhPnz+8iMoRnC0BeB8EH5QC8DCAhK1+eHGMOfE9EuccXzAoJlBRIjCjhJIll/Lg9y+mgg6zIyWY/2oMmZuSqSSVlf9BBA3c0YEsFVM2VH0X7SI87/7/xnUgDYmQAAp7EKLVX/+1LEBQALqJ1FfPMAAXuRKTj2DHDIVBMhmOlPbZVCwualZYxhxxIlhMkBFoP/kvLvVMZTqyrSvKuMNaJvaZsa38b+ohCuIA0vMIYuwAm0zirVgyAgxffoF1EBqslkmUKqUTAatz0oxZCZpdkESVAUhOBNhnOKwEyZgNRKXqiepOCMseukxYBoEfWCBRNXJlMj1InIqSSIUV5PSdxlAQPuebApoMUtOFwYaH2mHj3h9DEMZaP6Bd134821KDCgYhgwg4OY0XpIVUhoaIQiGgRXBf/7UsQEgAtYXU/GGGyBcJOq+MMN8MGgSBAQKkMhlQG+DsUky4NAJ+mgnZGxFabmdLxnOGAA0OJpWXeYJFSRpJELsEL1F7i1p8iIGyCAg1LU3M0utoSabGFzlgHcBI4sIK4mFp8Fka0mJh6hSLugWBN4SwoH9SVh4NVBKJZgXjhfQtlykhVpGImN4Rjp8qGbu9GnfbNSRBA1Zsp2TuHKQMSE83zghzmPJigHstABxhcBv7rP6yeo5scNpKJNgmZKYRP70raph5hSRIhpIwf4Qc44//tSxAcAC4FlYeeYrMF3GKos9gx5DQyo4/04xK2d80tpEmFP0hm5ZgWnWV2lWhyKyKRdaW7uitlMNiYcOHQPdRJWG0Za7INIch0aYqLSuz27Xr8u3v/f///Xa7O7kuMnnsrp6vschMCjPKxRPSUZWBq0WIQ/qn265MQKHJAs2/E1AoDO0mKNXgs+p2bGTLJeyzwQEa0N+GYeWkcXZvKtrBDFWzbm2Zd/rf6KNI8J54mai3/vPrv5atyshND5LrmddiJngzQhKoABlLW3XtPCksb/+1LECAALyHNbzOkmwVCO6jDzDZAgZ58mHWHbFgwAsKr9wINb99JawmIJplom0BEgBNRk0QISeZBcHI3wXVk4VkBCLggqeRqAMQmgiDBMIvdFTRAcZg+KvxXNSprX////9/pDhARYAACOdNEJPBPuiROZonqgUOS7A+EqOakEj0dkljrCx/jZmqrQuFQUDQClUNliYiUBREmYSMchJYNqrGncY0RJNsDPd/9nTFtMShtyNlbB5IS1UbsuhFAE2LERcLo+h8UzFOSTFIlIb7Co+f/7UsQMgAtM4VWGBHjBWRHreMEOgKxlDy0fdfZnXIfvK+OHIPd0MZBmzBauMzNuNyG2ZJzXobGmMllymkzKCyA3HTChAZSpFU8KaTZOYWH5nyIsELkiyMsQ8MpmyINgoZHI4vA1H0niMTeLFBLp+nkbKxZtIWlnMwOxe0yYfTp1TJv9Om3FMs0MdggKixhTVrGOaMJPO1EVSKqkvJV7qJC4yxkEm+5ATS9c17TKeWeXpFEkWSEnQmUofR2qUuJyLysZ2JXMKtc/uEKHA1L0dTc8//tSxBIACnxtXfTxgAHqMDA3HrACuuCJfuLdVnd2Dk1ckLH2ngZk0aAnTCQs0q1TTbm0PWm6zv1EI46K7OZNgjknnuafqrNtbHaqjGYxGIzYdUZKkg2Q9Vx6R448jLjSqIuhfwL5oeHQQgGx7Y5hJPykR0ztJquN4zZc2JjWM+n2cfbbOv/jfsipe/3tXtsd99V3V05kMm633/9sr/+E7l/N1/s7/6fe+3z/LGQ23s6e6//r//tjKqO4//z7DEOVNkZ6hDNCSQUJimIgTj6lPYD/+1LECIAKgD99/MMAAUmYK/DDDZCmFJiJIdF8ArVjlRAMTG1Tokjki1BU6WWdJB09Iwo8tkWnnCb4x5Y8/49yh8qCv//CQdLDHlhLkqXVFSDA0PqKiIqQAr3yITIA2pBYAzQjEgSj9aQjlSsMiToHCLkpkqrjM50uAiLEmmokf888GfOnllFKLDCFspuvWrHn68ihVpUgnn1PXAq/3/LPjii4NBQ9Jv6PRQqEeYyEIzSZCTdHRHIK+NJeGRaRDsZG5DJorKrHw2ZXL7QRhH35Sv/7UsQTAApMq1/nsEWBPwcqtPYkGFpc7VfWjXLPSpUNKya3NTtdYpOEBCCR17jdT97ATMsWtuRM+7W33YrItu191UnmiEAIAKUDcEcBs1R4lNigvuZEShIbHaKSbctX5EaKARQIAIoanZWgAFUgrqGOIBqTCaxla1jAE1Zh2oW0JD56Ypvv6cXX8chJnQk9bbdVc++rMZBABTgDABxsJAvL5wOxVNz8vKSaWOcAuI5oJsYe2E0PD5d6UHKZqwfdLSu0kj8jIOLlUuv1mFnElRjy//tSxB+ACoCTUaYYTQFHmClw9gw45OoCtPqDmV9zWVucq5YxWVVOdl+Mc110KCALcEQQUGAyPQLEOAD5NVicMjKpfJbSpcjyAIWBqDpxe1tSIpnxsiyi34ZZ2xYizVUIql2cl/jm5oEctqc66kTuejW2yS155zBr3VMmFEVmiHUhIlElOAF0cIbt+OqQbAUD9YFKionH56bUMoUgcDCBOFCpM1eQ5KR2Nm/a6VullS7aWccxsYZJAq+VDAIEaWi+VKmXpK29Chnpg7gIYxvS55v/+1LEKoAKXJtL6DBhgU6RKLDDDchsiVgaxIBoKCgPQDEaglgSKpiDUtFtG4WgAkiROm1GDJa6j8ZkVQWGVt9R8GdWkZZdJkDBQYkIiBRkmRzgqsO0Cp1bRdADawx5+w76UeKJFUGaUjtjACoCwDoKPAzGQdMmZZMVUY/k6qnYDjBh8KqhGM6RqSG0xLpynmjeVKquZ0maV8OiOgmP3JgRjPUs8OJKEyDJjgVLvho6avyibJhbnM0uezppYgAQSgbp+Ca8FZ2oHYGx7EXR9hLKQf/7UsQ1AAo0rT+MMGFBSRfnsPYMOJHjzLDQNQFEqE1Ns/N7V4sh3WH03v5LHY2hhjCyLNucpn8irRvIMTeh6TMX7VOFRUmqskwDNcfKydMuffRQ0w1A6jYcy4CIvHcllIVkoDpaK585RG7VblmyWtZ4Z4a6VjJkkQssqV7UFjKJDpIexJ0qGbhEp9MsosEjJNzZBjHY4i79irwwnXyYWtsaRhAWEMM8fbAZZUlhNx0jgIZERwdWFW0Squ1NDiz7mhG/cTEzMpa82p0TBRMOIcDo//tSxEEACdR7QYYIcgFJDedw9I0ooOBW0wSIbij2hYHmpKqjFTCCq76+kta2htzsh16f1BDbHkkyAiD8JQoB8IVKSZLHUxJ470+/QI2DRJcLOHVUgZVUTOma04LOCAVaAWPXedLEmICaqRhm4Ji6hUTQdSMHtLKoQcqTY5S9elAS3AG1Dej+s0VVdoQymaSKYAGTvJG3m4fqh8EQtFRg5LZIcJykoLFjUQKW9PikiPNNlsLZ4RZYNEhhdUqEUniwVkKhEGl6t2xyvvuUiiyWxVj/+1LEToAKcFc5h6RsQUQLZ/z2GHDgTLCrrglaihNPbHV/tUE0R45TfLEbBuxTSP9KrUqgeGBYZazrskolwnUP9CBAwmXKoGg0oNwRQfMOnxJSwJNfasoNQfJmDZwPJARB0w5Y+1NdooehZja2bGqbnrlbXMqoGEWJxLeoSQHMX1fdvHxCQLh1tVhi0b4rQzcxGbuoJUqvifaHupNrFNnFhyMsv+FxH+mIewe9RUJvBhrhEmdR4+iyHVuk6maLrWoFlfuqTjeuRQgAYibEyZjcMf/7UsRaAApITT2HmGyBUBSncPSNKNgKiOP6J07TC0NiRFanag9LF6bDdpAuRDZ4xKpKAYERMdSkQIaoKzdULPMB2Lil4YSbeMYuoUvQoTxI1bru8cwhOLSvjkp+syZW1t2qqgExzHEDYBAgFw+8P5kDARlhqoZDktDxr57sNMp46hjguFDUEISTGh8q45IEEGy5WOuSZbWAyyXNWxRqxVK4oFGzLLj1Qsi9EZZJxJUu3XaMxppJIBGWgNHIZDorBkWiMS3GiWSzE8HQ2gsqaRV3//tSxGSACpA7N2exJMFHi2dwxA2YireHMQVBgjyfWT5Mf6zjN3Xz/TuskQ1/eabXqtz/uty2/caOq4d9v5/WUpzx9qv/grhkWvlh+lRA1TEcOR6LA9JR7EojE8SxxdBEwQUJOCCjiYr3MTSmQpQLMu3sdkECZAUeJShJQlTnFIOzxM3UkxMiAItzCeKDtLKOYuFDdiu3Tl+tJ2VnaGMXG2kkBbkeBAMEgIEsDwVjEmHAnkyIpnj3rDo/CCo7EWUVqbiQMCdICzmRo8pxTwkED5X/+1LEbwAKfE89pjDBiUeM53DDDaBBwR2vPzbCuoCQAmnUcIEOA865r7k971xy3I7doUvzKByl/AOaA+06ThIENAQhKDgeQ9NiswcxLdyQEyutELcquq+q4Ylo+4WcDRZB40C9yBoolQy9yCiAfKIPKUSccJJH0sukdCCU/StUZd1qDkf1cX3TQB5GJYkhUvCcbSTh2EM8FrJJYPhz2s0gcpkvle82ktpHebB9yqizgcHicHQKqsyw8wPIe8qCxOtklyI5JeEzsu2LllANY2+t9P/7UsR6AAooeUHnsGHBTI3nsPYMOAVesdUCknIQJUAAe22YHQmGyJGHg8DZOeFYgCgMBckBClcEc7OQGDqCBMHFrDgZcLSpB4eO6nMXKi4uRj0E76RdzUX0FTrlh+WvE16NjEOYm1zPqv3a6jrO8GAulD4QZl1xoVh8JwJ5x4sXH8W3548xYsOFNDhsixmLfKnONT3JP4c3X1iGYWKSzIWeGXi8UFhYFCAHNlJyxgQFjHU9KQsmYStyRvp9FP9lxM6NCOqLXqALBvD0qsUkkDo7//tSxIWACmRdPYYwwYFIiWbxhIwwipG5/RIiMd0h+FDJBjDh1eM+hWPckh3yzohDNXhU+rIK0xemKtZ6f3refaqtah9+7nyte2vUw19Hq0+M583Pd/ZOyXep/XzHheeAiJYEgak4PiNYmjyJJRKDx+WLLUTv1dTQdwoaWCXaraqT2OE5rnF+HhCwc5HyhC3zS6luq5KRj7XTZN5qLEwPCObFPWsRCjdkkwH9hNqP/amW6jAsyFNDwFQNgdEB0FzUfxCK4/itWQyypQmzNYMY6DH/+1LEkIAKbKE1DDBjwUmNqDj2DK2aG9Ej1RC4OMVqzmi5Mgc6fWL7h4oTW1TTYTbWhfeyNuXTQksivKmnc+HJxc7T1ooJKyxIiblvMkfRdmZpNwVw50jKsG9bBvn8ISNCHYjhmKhSg8pVlRXa+lel5k5a5uNNO7/Kx/AOGwR1CDAlmJ3n1joCP9W1bqxTqL34sYfb15iGv+d/zdctf/2Mt+uCOvStq+gEqNNaXWOYgAQBQEGRgIj5pVA2HldQm5PcRPa1Jg6ZGGyyxYJMWsTKAv/7UsSbgArIwz2GMGPBUQ+ncYYMcJ0GhWwKvXUCaShN6xxMyCRoWETxwKsP7UsWhkXokbm0NJlMDMo/i/oqDJVaAA9OA1b3Pk7gM1nTA3eCseFJSkk7ihgmKoam4iFlBkJKbxB0cF+T6CCMAT94EJXQLnzEK4UQ9JLp9yi3zS440KllFyqXqWLwkdYHg4WkFiYU6R2cY3ssEMa/GlwC9HECwa816gexscoetW5oKxhUCRRknFj4kSVPyRQplpR1MIRFkBOhqpjEoItaULMTETyL//tSxKQAC6yDMoeYbolbh+cthiRIPd5Dy4vasflhfZmW9YbwT3ETQaYGEnTTSJeKLEp8a2S3LK0LGay+tbFTDiwpfQotb6zzECLY/Q1T80UKOEuQxUBojHpJCYEQ+BoeILsLq5mB2OWCTEhiBjUv245UqXqGMyP1Ur//l9WG6KGaRUFDp09ZAsaIg8SUHWUkcYKoQ2tdZZO49/9dYCRMEMdCOPolDiQiognrT7q5mAI5f6tKhq1I5+iqn/uVFYyWf/3YwUGCQSJVpCRoKB40gGT/+1LEp4BL2M8wjDBmwYebJm2EjShIBQqCQTAQsaCqPAoqZCX1Nf//1IHiqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsSlAAssqzWHsGkBLBSiQMGJ2Kqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\",\n  duration: 0.883,\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.883,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "card",
      "place",
      "3"
    ],
    "keywords": [
      "card",
      "place",
      "drop",
      "set",
      "put",
      "game",
      "ui",
      "distinct",
      "medium",
      "considered",
      "interaction",
      "feedback",
      "lay",
      "play",
      "deal",
      "board",
      "surface",
      "deliberate",
      "precise",
      "action",
      "thoughtful",
      "controlled"
    ]
  },
  "categories": [
    "card"
  ]
}