{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "voiceover-pack-male-level-up",
  "type": "registry:block",
  "title": "Voiceover Pack Male Level Up",
  "author": "Kenney <https://kenney.nl>",
  "description": "A male voiceover announcing \"Level Up!\", suitable for indicating progression, achievement, or unlocking new content in a game or app.",
  "files": [
    {
      "path": "registry/soundcn/sounds/voiceover-pack-male-level-up/voiceover-pack-male-level-up.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const voiceoverPackMaleLevelUpSound: SoundAsset = {\n  name: \"voiceover-pack-male-level-up\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAACEAABvAAA4ODhYWFh4eHiUlJS0tLTQ0NDw8PENDQ0tLS1JSUlpaWmFhYWlpaXBwcHh4eH9/f4eHh4+Pj5aWlp6enqWlpa2trbS0tLy8vMPDw8vLy9LS0tra2uHh4enp6fDw8Pj4+P///wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBoYAAAAAAAAbwPFuhG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAACCFS5EEeMR8GJMGKZhAo5AAhBwPVer2djQ92lA2Qq4GBqBnXd3dE9EREc5z2owQQpz/1Oc5zsr/Ic5z//yCzgcPwc//y4P8ENYPg/4Iff/lw/ViFYAMdXPBwHJwiamjnzcZj1JPwxAnaSGHJqZ2VWp5+Dh6jKj4YsacIYNgLEG4jZlHUKmDhcYqqxxDNDKhpxFJ/7NZBRUndDBjbN+v/+jDs7w6yGKTFuvW3v/1////1CNDMupJ3+JJtIg1jQ0BY1t865sGCg4JHX/f/7UsQLAAzhETFNJK/ReCLmJcOKIMeUTbXy4aLdFAdHoT4zRIztQ3+2QLGAPBsDf9IBJoIJkAZAGb//n0oryYtvoOjSHP/+dRhvZu/+o4aJBsTDxS6fznJ/+jPPqLnMOEBxAfN766mWqgRADHYuMnZE2WiTBjcMoEgKncDEcs48SaigqsZgAIGDgIgBYO8+DsZ1YuUbfzZ5g0HeTJSg6LAeBB9SwGQASFHUGDOBL+YWrN/kKcxCOdqN8iV//0o+rroto+sBIkGWIpJJQYgGICPu//tSxAaAC8i3S6yg0RF9muq1liBsQYcpnlGqTDMnlVM1lic5alGtumvqC5AIxBj1+R8TEf1mSpALDdKl3GDCiAABBhiFpn7niIv90z7/u7u9YwEWIBOf5d/+mFhZsVM62WnIg+oEAAEQ3MwU2lLHxmGGxqwCI3CZw3KsZ6OJHaPIq2zMzNd/w1t//G4uoZm///0kuVoihceHgci5hOUOJVYotHh4FGHlhMFz6W0qkl4MMseRIvKJSb7FnK3fV0eWWP/1n0itAAIDcDAABUkuNTj/+1LEBYALoYdTrBxNyXiua32ElLFIQBa96QcbeSl+keKB3GtAehjGOs7/pt1POKhkHhxjUv9kto1aIWRb1RHtPjr79eyv/8iTv7H1SjZG/5zEcjIIZ6EO9CMcjkUjVdF2/yLIYQRXAAKABli0ACE5ZUO0fxZqZ7OEYfRAXITjQnbEy8Lggm63ZRCfVelQiCDBNf/W+zu6HWlFMqW21datf6trf7ckqWf85xdUcjpXrvrOt93960RtSMdUJVWdyjAGP2kx6qoAAzAEVagAQpSKsv/7UsQFgAuAsVfMMQVBeiHsfPSdYBlD4e24wViagKKEEYC9GhqKImKRHvCDhfcb/wtfDEBEDQOSh////LmyOenGuZQ6vWE/l/bMYw9kOgJ6+eSUv5MPzLhRyqf/slkWEFxCpgCJD2AFQjhbygBKSaopgWTmaJ5kwjzIt+fACCI+GSuXBTTalQcyhJEvPb1KDUqJDnt/9DZ7mqThIOD4sYqq+9b7GOr+iN7v/o6ub6oehpbQdHkDI9rUsw2T/jlNF8YaaK6aYANSV4qsACopqEzE//tSxAYAC20tY+eYroGDGmv9hKGQ1QtdBZp8kRqNasXjKNFRk9VWXCC6LVBGzGkvLKXzjVQMDhf/2Quxg4PcPjhIUO/yVkeZlJTzlyIn/RV9um7UW5Uv9lxArw67y9DbwJ5ugrIACAKQ8wAANOOSncQmV/iXVUnk20P32ZK0P/FiACDBIOiRZyAUYYxbl/Mj1f+oEM0O3ESEn//5g22UtjroZQWeb/3mf/4SP2971FmNf56o0rUSQKiuXJWiG7omhG9J7/VVwIB0JYWWSS3bnGT/+1LEBYALhGdp7DzMQWKf7T2DChiFlSz1C1esak0sa5cbCOLBw2hCCForymRjE1EJ1w7Gppfvmsz3/+xlCaQkQUqi7QeCaTIZe+UBhsVCJHSy9a/IhMCDKEqfziOt1Xeic+oIhElgwCGJsrMAhOzXYZjrZIcXeqoBqFYGiW7CiqchctG5oLSESncjMnY1ZGe5Cv6wpYOP2P/4UEEEDeuqqtrm7S+/zo31ITbkT16f6HaZ2FpyjKL/7f2I9RgXpbNwUAAEMgokp6laVHU54um2vv/7UsQJAAxo92vsLE9hepRsvYeg4JG8TI8EBdxyUuWzyCg39h/MYvi/v1FXGppHzebnVBuBmP+VAJjglOkrKrOjzOR6Nm7LJnlIz+10OyfsyC5czTbDEu95LNPcKVvxOl2wuGVreigQCEAEmABabdtNd26jfRSmGnlXEbikzCF6rrEACGP9StqFAi6DX18B5eeGrxx2SykB3XzW7fFNZ8siQNLdONVMKqFHrJrLTi5MU6VUstKEeHIDe6iLvFQOHl8P6PuagkJiExREg023HhD6//tSxAYAC9CNc+egtFFplK189onoEqKzBugXAcQrywVmZBZgyZiDCM2+VjtR8JTEh772P8BM+1DkfnF416txJhA77VDoISInwM7JULYInBJgKWWe8DuAej0wgwCuugJYsp68v+doaO0GKCMwIygXHL0NQ7JntZzsgcIO4KtXDxSbcGrHhOkQnTZQ1nsqes2sLo5pwnPWW5WfU6XEo5X19g5QyGRvqPRPzaRvgIwF+2bpHlK5sde9dPfFTuRAC1q7pJ3hQFIFAkJATcvOoJDtGHn/+1LEB4ALUI9r55iwwUwR7rjxGtYfsEkw9RKDANrT8DvDHAXQms36P5avxcd0HcAj8MSzuQWHRfL6Mr+vHQUsSu3V0TgCP5QeUZ6ag4BHHGFbYeOJUCxihXljdr28e9aYJCQgI0RCUHeMOCRGgT6IIgKcNQqIvodCFJW7BGywS77DH+XG/29zVFPcRoJOwQ39JTaY7MbI0QO/x7AuDAW1Rv0ayQVfroBhQpTlfthA4K9Z7sWAIEEANSACkjl57c2VQb6ODJqXlmRmSAAtwDLzIP/7UsQOgAnsd2fnpOyBUIvtPPQOFK6NS1zT3IPNQwoHakcdYcJi3/lHxqQZMig7qGawVDI9Sss6EvTfaKnm7iyGhOP0I+p1WK5MoHEKibIipc6m8fx5IklKyn1aMlfoRomxbYzEPmGn5TaCoJcqs3tIfUfOVnHEhDve5QMtcWYCttaXrCrYGZ169+pyRW1vRLlAWgPb2MFiEV7+paKDcwRWSp3SJ3Jg4MQdiFJg8lKizSa6IrbA5vWZ9E34El/4ub0+UlivkJxoi/WS22aCKaNf//tSxBqACg1hZeeEd8k9k+v88o4gfn6/JWs9ednKX9f/5ZAykynPz/9txhjbqnffTjKMIsyKQXEgDcu2R15JQaSoaE+fVMkv5lR1TuGq55pjlR01FcjepFQIE31L4khZUjs5TPcggxKWte+lSLQO0qLkWD+311fhJTfbGcYlqbGAYiEXZmSlBbnbx+JwmYnaH4MAakzYTiO9ORTskY0+4O6LfZzkaJ1kyiYkE2spt1pccc4kx85ZHl4Yv8mz/udAlHTYpf59d8c9EkxcxQIqEDL/+1LEKIAJlIVdx6SugUQeK/mXnVAiojEcZZFdWe0DBIEXPlishghz2CqRj89kpWA88TiyXepFt2qKDI+8oecaHLVtnorz92sbq2ul0INVP////zyrqS2R9X//FFgEHVchaqAhUBdUWAujxgnSoc1GgtAi08rT2EX6Wwp7sEOOViiMLpUvPzjKr0Ewgb9HzOg0c4wFHomQdq6TujCqG7u76hquRAzfs//z1JK8sxVMpgiBCbvDwAN2XdZR1OLr4CEVrN4GS4qjeJVEhu4Nzvl10//7UsQ3gAm0q2HMiK9BS6/svYWJWX1L0wB4cVDmf/6BXghQlWwxqmeREEFL//r//oruz+m3/7LK7/vSf/sl5fTo/Wph+b5awHAxSamoEVfb1aI9khheQ2BhEc7JUE3ZtGnFeZRtsHJiNNV8L105hegqUTCx//5nVR7qX0YmmCdiGf+GniviohunUqfojyv0K8y/W64EaFhMTSUgAHN1cAKWs6uICugc4GYeIGuQ2h7i1eg3Pk/4vkL/E8peA/YRrpwg+KKIEf/y4AdAYrsgc6Jb//tSxEUACjytZeeUcYFNEux88woI1fy4uVf6xTWeH6xtk38q3u4DicGwfFDgWebNVYBQABe6zgAJpyq+FCoc7iwYijbdoDFFge5IP5TtZ5T3GdWhAJu3NPkU+KZuDEoLo4m8Z/7O4JUBhS0tbcv+s59d+inWkcv77mKUnwqhSFijRVxsfSwgr/YADGk5i7wArTwIOTgtVk7RQ12WzD09yHqkcouizIT9Gbi6AsEL+VZB0Ojf/3RcItrr+GBAOknqE7TDhv9n9fd1or/rWIBYefH/+1LEUAAKdItb7LyngT6UrLTxFlJSPSRVkFAANYjOAHak/djqbL/pvFjEBdepctri/3kMC6Wy/pjX0NHKQOHLh2dxIG+ILFhcNQJrL/9iGSUPClVcy/M2++chdGd1R9v/d1smokc8pf1C73u5nQAqgNmKMKGDNbAC423g6+YgVgiokQ6JygNLGjZjnDAByMzNkhdyAEakunJf9DXKdVK//1IWsTAocqYhDkkklJ1f1dCItH/+jMvqHyMdH+Orne9od6J7EwqamcKAUxWYngq/bf/7UsRcAAtI/V3sMKzBUyGs9PMWCtiOnAohKCuj2AIw6jNGWt9cksIl8oxV4kPG3U9N0YhjEGIZ/8/e9ld2IVn//yEYpBBVegW0jQi/26m7//Oe5ipUMQyOID3rU/xCzondRN89yiHLYNxYaEcuCwnVerbsv3HLpcJUNAyx3/xUfOUtzn1c6dzyO1EoE5yy5oon54ESdD7GjIYRjP/+JyxShso4eGfmUj3Ciyc2246dtR3d/+89NEZSB9DyZj/6c3/Zf//5yTTeccW+ex5qBeNm//tSxGKAC7D9Z+eYUsGmse3xlB42UbOqsGBTAGdmAjJZZUwHTRIagqDQJ1MOXtPXd3ywUenJ8A8K53E6x2g2wPjXP4kORgGHFILDimf8TFJQug26P1ZLtGCZ2/tq9jkO9OjTMcljnZjNIHou93QJPqb+j19a0JHlfRgRCBrvpJMO5JDPoSoMhthAPAlm9DQ6bwgUIMyDvIzzwilEQePVlQGn5bvpUSLV5/g85ijrTnAZf9/8pdzSxIhf5bMZDm+vE30pr1ZNOVCn5wUUZXb9Vsv/+1LEXIAMCQFn7DCuQZktLbz0lpX/N1Zav//+Pf/txV8QapRBMyA2WEIkEtdpbfEZOnDT4MuHiPokg1XwiQhrvwFEefYsJfEjj6yqi/M9UYhiYtqkaGF+To6E3dod0+5cjNf8v6jD6WR7mVfUBFdgxSAkdpLXyBNrbPnxhNrlPVa7RoDEwOJYEjbvjKVHthR5U6uoEUuZR7GcplhxBY5GNgtP/dDR6RgfeFl4ZjCZR1TATM+ovjXqJ5UxFi7OrM+3/q93dXM6bVKlH929tEKf/f/7UsRXAAvZA3XsPEmxgLFtPZYVyX9f1cqoVOx//a1XSu7a6RGvwmBFQCqkCWyr6zx+2Fb9JdSVS7kstS9Y/E2aA1xPCnYwxGLLgYzq7YQT94U5PODW5CVKCKYjl9SGra849GkKDzxbciu0i5oiYgmi7ypcsqj5/xETP1v7WODM5UqCDjsopoZgjNgqr2hw21ZUCd6ujqJbdicT0l1ZkKwajHvugCpMdocZHhpw+15eJ1lQDFsMakppoa/Yvbv3UwQZCJz9W/XQjqzmRkGaLffb//tSxFWAC9yXZ+w87oGOpO65g4qWrbVVQrHFPdlIb/KP6BZ9e2eIWwrkoenlhVREMEd8elvOJ5sxUZvSQvImdG4YIRVbDS1s3eMsUNh/St7GoVcwCEZTINtgcU4RGyvOAra8zPX6nM5QpWQYH6ibPGnFEcu0CPNFYu4N87JvEwHigZADtPxIzdZIL96OLn/IqgC2QE3G4+JzCAqFNiQQouwkqYE18MowVTloVF62Ut9KWSbZF+cE7hAzlOnzfqQuUCQM5kBYa839c57OcgyhUEv/+1LEUgAMOKV7zDCycWchbnT1idKwh2Ij/+sRY5CAbjEGo6vUP/Lt9Km58VXTYVACFkADUjuiHFQmR4RoBcVATIRzw2QUKNQD4IlVKZ5wVZdaCv9yzZcgaibF4IAMT/+6uNWRCwGLOVKtSQj3ipg8kSLUL/wwfBUnP/p5Vb6Okn4/1t05MQAAUwApY721nybJJW4+DoiJMLtNPBFE+kcKcVpj/it75++fzZabxQ2DggKIhvz3/bW7jhI3EltuKxxFpsE3l2fxpw4BZz6n5Vfdzv/7UsRSAArQcWvnsM5BSRJtvPMd4DN08x+l80IKLZATbclxiKctxlpIUYlJg2yaQEcEUhSoEkPMwC+W6DNhhiVJXa5ClHgTmKRvv9LpkECTZVSWts5VLThx56p3lKscBw6357FAaGNt6U+iHdUKqAACRGAE4263FWMs1I5GSJNdrCWmKrAgKpDR0YBRcVwycIsuk0z7BzMIWRUEn/3X13NFogtp4+xJ8sJX8EXnyoWhv4pXEMEmO+jgU5+opiaXFU61hTQRICNAJQeGTYJehsIz//tSxFuAClyNc6eYTpFSki589IliyoCAHUYcAXIio6iQLCMvvR3frlH2l2aUICIP8CFlL/IRvnYwshhewR3MuKm6MiNQRBu/7apN5UZ9x7gg1f5XbsRqhjEAICMgdhc9SEgJBSEgdtQYQKDueKCEHgCk0V2jGJbznbsjSoxxqHe6ndh1PQSEgKiYQFA4gqFi+dJKD5Hvmjai3w+0MPUs0e/JfTR4k3OsLPWsgAAEAAIpS4JAlRDZNnlR0QqQjEsGwR2E9HbDuxGIIkUHNoYfe7L/+1LEZYAKIJl1x7BF8UoOrnj2FH6pdeUxwtNe3pmZE2L4fPEijk3nWWTL2WfL4vt7BaLABd/Q49qDhxBb6Mi/RpKUi4wS20nYBpLCGRyhSIooadjo1EOCoBgS0xI7YW+X39nGPMDMeY/+RQwJlViA6ctWI3paUo4sH0epZ1SSyT9HzIV+mcJ5m9T/4sDoPrjmKroEeAJbklwhlgfiQgkIr8FZQqZFw7TDBbG1a9VzNdbWVhEKFDpMjyp/5zuhGTv/b9lZ+m//Wj1OZ0OJb7r2X//7UsRxgApUYV2l4SUBQhXvNPMJln2/+3dv/lX/lMM/7nw8zWVXHCEVWE9TwA0BQtlsezESvIhZicTCaFL2HyN11WxCpRmEaq4MOICEL7CH/9BhxAcEZw4HdtPYbInQksS9GowDIafxQ4Bh/r+kp/uGQ9adLINgcnTVdrBAEQDM+18I9x9Pybk4cCfqckatU1kKMAOJLzAqMyzLO362M0aHNCuJWiW5P5hYMrow9i//zFsyoMPJe7a+jrKhIHv9NIoEwfd+1PHXC7jx9aJAYEaA//tSxH2ACfFja0YUUllOkS2wwQ5eYu8mSYgR2pBaWS/EcJ6L5SoJtO43wC5q0xPWDmITOZpnJUmLUay/zNC5XlRcwJnp+hYKmSxFL/yoFjQz8s+ru8qAlo9VVmTFS8UB0QkQygEEiDCA3vJQdqNG2QpOlEtnctq+yEn4tJ8DVFJw9bp/RhV/ZtVChXQcoxbIPp9FQVmAnaVn0/VpSm2R7uU3///b/RzP/R/9ucSq4ol9wBLAEqJr2sZTvDQC3TSRYLgKisugaPhKBsfEodlloUT/+1LEiYAKRLNdp5hOwU4LqrTwmgjv81sV5SksDIUxrIGFDCwX+jnOSaUrziNys/1FW0jQAj3ksKG56oDW4SGfiWk987/11SnJGrbf2qJQOkMKROKQfj+WTMxLJVgPhn0JVmlF+6Lbe7H2OUSCkwUnV/v48Fgl/i3Ud7nbZpIgkHve4b9Kr7pGlN6f03/3993//TqB/c9ya+UAEP7/3wu5ID3JeShQnm8rDUilOt84QlR0LJ4DcLunjkUJltyrhs+/SVjc38jbGmfyRYwk6iRj8//7UsSUgAmtOU2njFDBQxTn9ZYIeHEoh8ZkQ8+gLvt5IjPE6h0N9GWEiAjNoE5RFay35ADHACVpghodCED62P3u9is1v7aDJWoLEDCa+WmCIhesgm0BAOlGYYQAx8NAtPZ/h7JmHSmQfUCwgtULII5D8Fv/iBUCAAMAIfl2R6IcQJG8aNTEVk5EONJrK8uqHlQ6RXhqoSgKUT18PJQ2KpVa1UlfmajKKyoaDrc6SlCMD3nWpfQjj1i3DudS1KgPk+37/axruIixirTJiheFD1NR//tSxKMACkBNTYYkazphKmfk9JtJtH5AMRUCZogKAgCDCALrgQdJidj9KH8Hq/ojKs/7lOoEJFN9CuxrOHHXO9A50eowlBB71vlkMz5sYetpAL7ioVzzSVq3Krd+hThOKUKjSIQ0dyliJIcxpHUIQIjq4IQlH5JaesiEo9VbUV+XhSy6qikgocArZLf9/9EqZqyi6T3o4MDek2WBLYL3OSgPBsq5NQSuyLzWdS3p/Z//WAYIEAKpqAofgHCgK8NVjHCITBKgYBJb/3NAKOT5mf3/+1LEi4AKNIE9DDEBwUeTqDD0iPzntVHEkqqjc7VVVp1ZUFg7KgqJXFn7dbiQiEIa1BqRyP4ldUDXt6gaDSw0AAGgWqAayywyVlBA4HQWOJDBQQMI5n//8qqqXYqq0iqqmXJVVDlf/66aaVQkrTDEN001TEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsSXgAp0izNHsMbBKRBjWMGYaFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxKaDxkw0fyGMbAgAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=\",\n  duration: 0.811,\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.811,
    "format": "mp3",
    "sizeKb": 7,
    "license": "CC0",
    "tags": [
      "voiceover",
      "pack",
      "male",
      "level",
      "up"
    ],
    "keywords": [
      "voice",
      "male",
      "level up",
      "upgrade",
      "advance",
      "progress",
      "achievement",
      "game",
      "reward",
      "positive",
      "encouraging",
      "success",
      "unlock",
      "new content",
      "triumphant",
      "audio",
      "celebratory",
      "milestone",
      "growth",
      "promotion"
    ]
  },
  "categories": [
    "voiceover"
  ]
}