{"_id":"@camoto/gamemusic","_rev":"5-30526285b4f196c89583b791a4597876","name":"@camoto/gamemusic","dist-tags":{"latest":"2.0.3"},"versions":{"1.0.0":{"name":"@camoto/gamemusic","version":"1.0.0","description":"Read and write music files used by DOS games","bin":{"gamemus":"bin/gamemus"},"main":"index.js","scripts":{"serve-doc":"documentation serve --shallow -w index.js src/*.js","test":"mocha","watch":"npm-watch"},"watch":{"serve-doc":["index.js","formats/*.js"],"test":["index.js","{formats,test}/*.js"]},"repository":{"type":"git","url":"git+ssh://git@github.com/Malvineous/gamemusicjs.git"},"keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"license":"GPL-3.0","bugs":{"url":"https://github.com/Malvineous/gamemusicjs/issues"},"homepage":"https://github.com/Malvineous/gamemusicjs#readme","dependencies":{"@camoto/record-io-buffer":"^2.4.1","chalk":"^4.1.0","debug":"^4.2.0"},"devDependencies":{"command-line-args":"^5.1.1","documentation":"^13.1.0","eslint":"^7.16.0","mocha":"^8.2.1","mocha-eslint":"^6.0.0","npm-watch":"^0.7.0"},"directories":{"test":"test"},"gitHead":"68ad675a03a47068a5042ce448eea877470f0973","_id":"@camoto/gamemusic@1.0.0","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-cxihuoZ58mlG+3n61xoHJeDCRBK+ij9yFWhUgtHtUhp5cWG80EEJqU5a0CMJCQXNBAJ//TGqYTzzytUy20VWIA==","shasum":"817c17ac08b79ab94590a881fbb368387f0d059f","tarball":"https://registry.npmjs.org/@camoto/gamemusic/-/gamemusic-1.0.0.tgz","fileCount":74,"unpackedSize":302887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7zULCRA9TVsSAnZWagAAkSQP/1/GWFLPszTQ6lpzjzXc\nsZCV+SKq/K6wD5Z6wj35IPETpdO/dEHF5W6TRjmlPBPPuggvsPQcsD9PZm1G\nE5HR2KTgf7aRnAbbgHmPnLfZAdm03kC01DOAxVbZ8+AB3IrxGWf6HGyvQgL2\nJJzUxiiwig1i1ixNYlcVvLF5Uv3N4lyKgeyX9Aed47RH7YoyY430ck+p28k8\nWHrT1NhFXPNtXxb7+P34sPHZYB9UoVkAFKf05f5XoeMh+xmYubyy3MOYq0Bc\nqK31i/8SGFIGr+mB947AzT9JlIie4WT8XGOx6MZ0plvSdQBE760/BazipCue\nFonbAC/IU3SfFmJhwZ03i0+IwmdFd5jHE0WUDzqJ6UTv7qKpZB6mHJl4p92M\nkj/hQs+x8mAXYPI4VG8Pku9Q5xObfwnrMmI3z73u9igsfk8RoD0Ev9SECSoS\ny4gGgzmLwsE/1I/gxEN2l/j4xpD7TkoSPfOnv9y9zRo6A7+8ox/5Jdt+SlbW\nB2v2Q2kZE6toFft2U/3QRMPmDjwfTp/d4Ta9f0cvWUT6QD1hgKY+WXBUaYJk\ng2e9G9kwxDW4w13ADkfDB2NDAiYXNfLh8+XGZAUyfpsB1qunb3QXxGed/ck8\n9YcQZTsvWQAvzQsiRu+CHubYoGbMqpuAARS1dwctdBhhsQZkurLWKazgWj1C\nItAc\r\n=B8y2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPJDD12eKA2KkikT1qvNR+pnQpDf4e+Z5O4KAkpLPe2AIhAOvzGFdDJPybv/b78o+0KNV1Rc7XMxrFHYLZKpQLa7gV"}]},"_npmUser":{"name":"malvineous","email":"malvineous@shikadi.net"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gamemusic_1.0.0_1609512202528_0.8004820832289774"},"_hasShrinkwrap":false},"2.0.0":{"name":"@camoto/gamemusic","version":"2.0.0","description":"Read and write music files used by DOS games","bin":{"gamemus":"bin/gamemus.js"},"main":"index.js","type":"module","scripts":{"serve-doc":"documentation serve --shallow -w index.js src/*.js","test":"mocha","watch":"npm-watch"},"watch":{"serve-doc":["index.js","formats/*.js"],"test":["index.js","{formats,test}/*.js"]},"repository":{"type":"git","url":"git+ssh://git@github.com/Malvineous/gamemusicjs.git"},"keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"license":"GPL-3.0","bugs":{"url":"https://github.com/Malvineous/gamemusicjs/issues"},"homepage":"https://github.com/Malvineous/gamemusicjs#readme","dependencies":{"@camoto/record-io-buffer":"^3.0.0","chalk":"^4.1.0","debug":"^4.2.0"},"devDependencies":{"command-line-args":"^5.1.1","documentation":"^13.1.0","eslint":"^7.16.0","mocha":"^8.2.1","mocha-eslint":"^6.0.0","npm-watch":"^0.7.0"},"directories":{"test":"test"},"gitHead":"c42d03293d94580ecebc409470296cefb9d3a611","_id":"@camoto/gamemusic@2.0.0","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-I2g3g5NcwwBJABS9l2v6HJL6NoXk0ULtRR9AZXuX1MLwUw4d8HIZbMObbpPTgZe4F/rgqzLvgvsm2HFm8bK6FA==","shasum":"fc778a9a39b6c98b0d05b2aee45ae01dfcaae6fc","tarball":"https://registry.npmjs.org/@camoto/gamemusic/-/gamemusic-2.0.0.tgz","fileCount":91,"unpackedSize":323389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8ebuCRA9TVsSAnZWagAA5VIP/0UIa4MDnsNgTiK9JiMi\nOSaiuu5PMMz0g7aATW5KliVD4xq1ctXU9URKgIYeZuhRiAIGI3ubf597EVA7\niEFKInzCKhVEuzwfocsODU7gwG7fGbBLQa9AqEZrxrnLLokykQC/xPslcc55\nrJAIOnClwR7D/FahNCqHJLDiefmXtF+1/Gp4LBSMj+oWd4rqSmxHO3veOTke\nz8Pek8SRT4IraFXmocdVdRZT/55++2Yq1UQIcaiXTsbCV70V/u55fek7XIjg\n5GHqpjWO+0g5FkVA5CUrnZp112HOWeNqKaq1Djdn8Jp9W5HV+gHW3M00Z0yh\nGp2fDdZG8FNDP0PBkyzshN5dVNJVzDafNASpRqYM0rxd/OguSkmBjwapLNjq\nsMbl9GGHQrGktCYO9aWqjD+illjDOwbYr8TXBKU/It8jyLvM/DO5grP3EBr8\nKWFhWjsFUrpCywRxVjyQL28f7iJOPx8gn5HCdcfEK79qcPaH56hVgMh7jWrY\n+SG1eryY68EhZ0sE2Mrcl+rfUaDTRQMQMVtWV9dD/R6JIKNrr5gJdJbZpJv7\nWqIYYOtK4O8D4S3HGjB4mFyftzBcycpObvVx93+XeOPX15mHesxkSjT/pUVB\n3ybrwea/olBBi3SzL4NF46GDKbptnChb2sOz7X8JfAarJVOAzSvyDmm7iWF7\n0FiO\r\n=uCA2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDanJT0wUjcjVWkZGkQBYdUyoo8jZujg5/whxgdbYZsIAiBSWx6EsHycD3tFEvtgAi67ER08jdx3XRukOtS3astZfg=="}]},"_npmUser":{"name":"malvineous","email":"malvineous@shikadi.net"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gamemusic_2.0.0_1609688813615_0.39035699949344504"},"_hasShrinkwrap":false},"2.0.1":{"name":"@camoto/gamemusic","version":"2.0.1","description":"Read and write music files used by DOS games","bin":{"gamemus":"bin/gamemus.js"},"main":"index.js","type":"module","scripts":{"serve-doc":"documentation serve --shallow -w index.js src/*.js","test":"mocha","watch":"npm-watch"},"watch":{"serve-doc":["index.js","formats/*.js"],"test":["index.js","{formats,test}/*.js"]},"repository":{"type":"git","url":"git+ssh://git@github.com/Malvineous/gamemusicjs.git"},"keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"license":"GPL-3.0","bugs":{"url":"https://github.com/Malvineous/gamemusicjs/issues"},"homepage":"https://github.com/Malvineous/gamemusicjs#readme","dependencies":{"@camoto/record-io-buffer":"^3.0.0","chalk":"^4.1.0","command-line-args":"^5.1.1","debug":"^4.2.0"},"devDependencies":{"documentation":"^13.1.0","eslint":"^7.16.0","mocha":"^8.2.1","mocha-eslint":"^6.0.0","npm-watch":"^0.7.0"},"directories":{"test":"test"},"gitHead":"1faa8610c9b6533a27a0740113618f027600b578","_id":"@camoto/gamemusic@2.0.1","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-l8H0tnwHlOiw4Jbhlnlub4jL6XN4k7uKEc8oUCPnlL0Cc6PTWTWhGj81Kzj7OZSWQPNEHYGje7fT8Lq3BH4vGw==","shasum":"8a6dd3b38739f320e6147d56b4f6d53b4d9f3ff4","tarball":"https://registry.npmjs.org/@camoto/gamemusic/-/gamemusic-2.0.1.tgz","fileCount":91,"unpackedSize":323389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8egLCRA9TVsSAnZWagAAJxYQAJU1LRWXVCG35Yu2yDz5\nfyaVCKVqkaJSGu1JXKkfNBNFLqQ53V7QdBuX98nY2FAS0UAyIn0z47mB9H3k\n6jD2zXTIzP92OX061+Pphep95hnN96vHznwm1CAPjDrrOVDaH449+cXZBGjs\nDJlWDPrtiAYRltec3k2fxnjNhJbfLsUaeE8Xi01jvDH/qV2jogfywqdjP2tn\n21PBjZMNeA0BTfr0c7KpoainjO44xUuNnKoyFmXQiWJ8AxEV8F+7Ju3rjJ/X\nZYmxQRdaArZlxNIpHZhkWrYD4SMNAwre3kuIiJeAALLk4qS4M4pXR8kSNtjQ\noQJxjqed8LPTMGnc6NgbZaML0ecpr0vYknYAGcreltWzhoRSpt1b3UET12LI\n0yqvGQqHOXNHiiSyTXvXwdzaUFEPDXjuekMsShZ3y6TaYozqaVUv0mR3FI0t\nFV+JinWXtA4CWa0xOJdGl/Fsn5V43xZyuL8PUAbvBf5y20XtbXrvG/ZMHdKu\n3w/qlgw5uBt1dZ305hlkxp3Ps9Qn6YWc/KFWhfpshb4CrL2jNexj5bWJXaek\nPJlWD7Ljud3jQT0P1/M6z19rzY9pjTeksxGV3HR/3F2rLKCX8t2DjfU/5jsV\nQ0D69KZC3/2iXOlgMdKJfwoSq9849N2Qghhus7Q60rC//Qu3MVG0MfAasC0M\nsOU0\r\n=GVTc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENUdTpKqJ0kApoc/uVJn2Wl80JnUedVvckvalMF+bU7AiEAi27a60+njorOlT1FoLpnx0N8lM4cVAs0QlWAd6bp0Sc="}]},"_npmUser":{"name":"malvineous","email":"malvineous@shikadi.net"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gamemusic_2.0.1_1609689099513_0.011025581859817057"},"_hasShrinkwrap":false},"2.0.2":{"name":"@camoto/gamemusic","version":"2.0.2","description":"Read and write music files used by DOS games","bin":{"gamemus":"bin/gamemus.js"},"main":"index.js","type":"module","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+ssh://git@github.com/Malvineous/gamemusicjs.git"},"keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"license":"GPL-3.0","bugs":{"url":"https://github.com/Malvineous/gamemusicjs/issues"},"homepage":"https://github.com/Malvineous/gamemusicjs#readme","dependencies":{"@camoto/record-io-buffer":"^3.0.0","debug":"^4.2.0"},"devDependencies":{"chalk":"^4.1.0","command-line-args":"^5.1.1","eslint":"^7.16.0","mocha":"^8.2.1","mocha-eslint":"^6.0.0"},"directories":{"test":"test"},"gitHead":"1907b58f142b9938db9ff04374bfeb19232b1ea9","_id":"@camoto/gamemusic@2.0.2","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-OJrAmFPusRG2rKBioMHKD/Gu/FBVBX/REKP3tEm4/y/S+CndbzeOaW82PPn1QQyDBNgHWzvEhBNqF7kDwrQk7A==","shasum":"879c3643a1dd88cdbfa234d2758802cb3533f19e","tarball":"https://registry.npmjs.org/@camoto/gamemusic/-/gamemusic-2.0.2.tgz","fileCount":93,"unpackedSize":324252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf81VjCRA9TVsSAnZWagAAzS0QAI2z7U+xk3ukvkHEcIdX\noJwccWZiPT257hPyUsXY4ZpKk4Z1v4W11pYMGgrUsKFjb2niy+6X8EO7imgb\n1dtZz8YEAYoOKqi1u8IaZ3AxO7HFbYy+Gv3LhHeQ/ipo33v13KYoIW2l7CRb\nAEfc/hXWya2vYQAykmTZSGVfj1NdGrlfeb0I4kWJ16ASX5Uuds3VT44agp8A\nfJDmXXTMwoRN1J+ZyMM/q8s2pwFMoQUyKm6H9PB2T6QW2CY0KSmH9zu889V8\n8LSQDX08NNxIjfu5ArWnlUUy9EtSwuG9nmZuqwf1E4GVi2WhDGFxuMRwNoD4\nIdfS9M4E6dGCyas/QRIh3FLHlIBaeZq7ZIfUjGOPH6a2XBXOkUNyUQ3ZSIaH\nE41Cb5MiaS1O3LhimS65E8Wyn1SBjyYAJZDeOtxPD3m49UhE3Dw8j/EoyE8D\nd1Lvy1D3MlHFkFyY9iQcU0aetlJkg4upEBmt9xrOG98DRsf6yPOIqxen7I5t\nKYnBCrstlQS+Z6Z0O0q2FqqidWP8CJpMzDZhvN8gxiS8r6Svz+nR0xNQ9b5l\nFV8rpcZh1954FQNvHZQRcRQvqK1kAl8sWPStKVsBbc99uTgpJZYLVcsQUt2s\nsGdrbtoj48TfUxR1fZuUokT6pWONKub1L1ixQdz+m/+Asm+nIC8wnRrgwpRA\nUH7K\r\n=LPAQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeigPFrf7Sy12GkEnj1y2M8TfF8LpVhpnznLMXvHEnsAiEAtzTnLYir2HVUONynKiXhq10TBU7+fblS1AqD5f2SYCI="}]},"_npmUser":{"name":"malvineous","email":"malvineous@shikadi.net"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gamemusic_2.0.2_1609782627432_0.04100329958580229"},"_hasShrinkwrap":false},"2.0.3":{"name":"@camoto/gamemusic","version":"2.0.3","description":"Read and write music files used by DOS games","bin":{"gamemus":"bin/gamemus.js"},"main":"index.js","type":"module","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+ssh://git@github.com/camoto-project/gamemusicjs.git"},"keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"license":"GPL-3.0","bugs":{"url":"https://github.com/camoto-project/gamemusicjs/issues"},"homepage":"https://github.com/camoto-project/gamemusicjs#readme","dependencies":{"@camoto/record-io-buffer":"^3.1.3","debug":"^4.3.1"},"devDependencies":{"chalk":"^4.1.0","command-line-args":"^5.1.1","eslint":"^7.24.0","mocha":"^8.3.2","mocha-eslint":"^7.0.0"},"directories":{"test":"test"},"gitHead":"442a5e1f9cf3bc5b1cd8a2a83dcbe409d8326fb4","_id":"@camoto/gamemusic@2.0.3","_nodeVersion":"15.14.0","_npmVersion":"7.9.0","dist":{"integrity":"sha512-vZL0l9ojLsJlUqRY4B6entzCRcU4lSsuRa2zFUS2xyW7b3iG9svMbX48bkxOM++JaayuZ2FwtDzSlOqDBQLU/A==","shasum":"b3b907aa660b4e295ab4561ebbd1f7491379fe48","tarball":"https://registry.npmjs.org/@camoto/gamemusic/-/gamemusic-2.0.3.tgz","fileCount":44,"unpackedSize":203534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJge58OCRA9TVsSAnZWagAAn1AQAJAFuID5nbcsVscN2tLL\n5W2U4IsSXV9kJ7+1Vl4dOcaGKiILQBqmgZIc5cpiqX9GSCem23JDgxrW/MfL\nrbp9rspynlgl4gbeCk0lpDET3Xg0X12WzAVaAZUprX4lUWG6aLrGMrxIXHcD\ne6Dip39OPIaACwwQh/ulXnISy4tRpsTzDR10IrcfsWIfuu1KrNBFKBVFEuIt\njIw/WTODMnyLHEAxu3UQuMEYJHcQ/mcitPJXMzAgJqcz02RT4NtqZEOjHNRa\n0QCAcSzsAWWtmesoPpu92gcp+EnilY4SSIlvUA6TF+4SfrZ4RWM5LEh2RRDx\naoi5Um39xahRf+dF6PU9sN24o+k84vQeKVaNiXL+RD1Y0OTbwLpm/mqvYmHL\nlNeKFbWBUrKsLfBl5raZRNYYrmPQmxs4tyStefqDJnN4rW5gn52SDxfCqytp\n7PluAJ8DH6qOKXAQl2ViZNBxe/vQi8AkX6+Jb2yZ5eS6F1xa0W40r4n6MH73\nts2vuuxh6loa4teMT5rTvf8ulJrt8u4TiJJ2SgvTBGO/o3fsbHSg15gkkrpH\nqfynR3e23nCy3GCAfiW+ET3cGQg48+5bpBpPUIzoSgR2DggllYza7SXp4LKh\nz9W9jh73d9RZQOpt2G4zGreUlIFrTWNEkFF+dLtHutqQN5KdSYMIHi3xmrPM\nLw5q\r\n=C/32\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6fscEnak+pRrhSsdDls9/VkKC32GbDa2eKc0bE2ldMQIgBBNncqXEswjecC7hHeUCjt+IbotarHElnwpraGQ0N4A="}]},"_npmUser":{"name":"malvineous","email":"malvineous@shikadi.net"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gamemusic_2.0.3_1618714382301_0.20847593169367262"},"_hasShrinkwrap":false}},"time":{"created":"2021-01-01T14:43:22.278Z","1.0.0":"2021-01-01T14:43:22.714Z","modified":"2022-04-04T21:34:36.030Z","2.0.0":"2021-01-03T15:46:53.748Z","2.0.1":"2021-01-03T15:51:39.674Z","2.0.2":"2021-01-04T17:50:27.564Z","2.0.3":"2021-04-18T02:53:02.452Z"},"maintainers":[{"name":"malvineous","email":"malvineous@shikadi.net"}],"description":"Read and write music files used by DOS games","homepage":"https://github.com/camoto-project/gamemusicjs#readme","keywords":["camoto","libgamemusic","dos","ms-dos","games","modding","cmf","imf","dro","dosbox"],"repository":{"type":"git","url":"git+ssh://git@github.com/camoto-project/gamemusicjs.git"},"author":{"name":"Adam Nielsen","email":"malvineous@shikadi.net"},"bugs":{"url":"https://github.com/camoto-project/gamemusicjs/issues"},"license":"GPL-3.0","readme":"# gamemusic.js\nCopyright 2010-2021 Adam Nielsen <<malvineous@shikadi.net>>  \n\nThis is a Javascript library that can read and write music files used by a\nnumber of MS-DOS games from the 1990s.  This library is an attempt to provide\na unified interface for reading and writing many of these formats.\n\n## Supported music formats\n\nConverting between any supported formats is possible (essentially you are\nopening a song in one format and then saving it again in a different format\nwithout modifying it), however some manual intervention is usually required in\nthe form of replacing the instruments.  This is because a MIDI file for example,\ncan't play OPL2 or digitized PCM instruments.  Once the instruments are changed\nto those supported by the target format, then the notes and effects (where\nsupported) are converted automatically.\n\nFiles in the following formats can be read and written:\n\n* .dro: [DOSBox Raw OPL](http://www.shikadi.net/moddingwiki/DRO_Format)\n* .imf: [id Software Music Format](http://www.shikadi.net/moddingwiki/IMF_Format)\n* .mid: [Standard MIDI Format](http://www.shikadi.net/moddingwiki/MID_Format)\n* .sbi: [SoundBlaster Instrument](http://www.shikadi.net/moddingwiki/SBI_Format)\n\n## Installation as an end-user\n\nIf you wish to use the command-line `gamemus` utility to work with music files\ndirectly, you can install the CLI globally on your system:\n\n    npm install -g @camoto/gamemusic-cli\n\nFor Arch Linux users the AUR package `gamemusic-cli` is also available.\n\n### Command line interface\n\nThe `gamemus` utility can be used to read and write music files in any\nsupported format.  Commands are specified one after the other as parameters.\nUse the `--help` option to get a list of all the available commands.  Some\nquick examples:\n\n    # Convert a DOSBox raw OPL capture to MIDI format\n    gamemus open example.dro save -t mus-mid-type1 output.mid\n\nTo get a list of supported file formats and the code names to identify them\nwith when saving files, run:\n\n    gamemus --formats\n\n## Installation as a dependency\n\nIf you wish to make use of the library in your own project, install it in the\nusual way:\n\n    npm install @camoto/gamemusic\n\nSee `cli/index.js` for example use.\n\n## Installation as a contributor\n\nIf you would like to help add more file formats to the library, great!  Clone\nthe repo, and to get started:\n\n    npm install\n\nRun the tests to make sure everything worked:\n\n    npm test\n\nYou're ready to go!  To add a new file format:\n\n 1. Create a new file in the `formats/` folder for your format.\n    Copying an existing file that covers a similar format will help\n    considerably.\n    \n 2. Edit `formats/index.js` and add an `import` statement for your new file.\n    \n 3. Make a folder in `test/` for your new format and populate it with\n    files similar to the other formats.  The tests work by creating\n    a standard song with a handful of musical events in it, and comparing the\n    result to what is inside this folder.\n    \n    You can either create these file by hand, with another utility, or if\n    you are confident that your code is correct, from the code itself.  This is\n    done by setting an environment variable when running the tests, which will\n    cause the archive file produced by your code to be saved to a temporary\n    file in the current directory:\n    \n        SAVE_FAILED_TEST=1 npm test -- -g mus-myformat\n        cd test/mus-myformat/ && mv default.bin.failed_test_output default.bin\n\nIf your file format has any sort of compression or encryption, these algorithms\nshould go into the [gamecomp.js](https://github.com/Malvineous/gamecompjs)\nproject instead.  This is to make it easier to reuse the algorithms, as many of\nthem (particularly the compression ones) are used amongst many unrelated file\nformats.  All the gamecomp.js algorithms are available to be used by any format\nin this library.\n\nDuring development you can test your code like this:\n\n    # Read a sample song and list its details, with debug messages on\n    $ DEBUG='gamemusic:*' ./bin/gamemus open -t mus-myformat example.dat list\n\n    # Make sure the format is identified correctly or if not why not\n    $ DEBUG='gamemusic:*' ./bin/gamemus identify example.dat\n\n    # Run unit tests just for your format only\n    npm test -- -g mus-myformat\n\nIf you use `debug()` rather than `console.log()` in your code then these\nmessages can be left in for future diagnosis as they will only appear when the\n`DEBUG` environment variable is set correctly.\n\n### Development tips\n\nThis is a list of some common issues and how they have been solved by some of\nthe format handlers:\n\n##### Multiple related formats\n\n* `mus-imf-idsoftware` has a number of different variants.  The common code is\n  implemented in a base class, with multiple classes inheriting from that.\n  Each child class is then considered an independent file format, although they\n  ultimately share common code.\n","readmeFilename":"README.md"}