{"_id":"@afripods/waveform-playlist","_rev":"3-dc41db74b7064a1a9936d558c17e0ddc","name":"@afripods/waveform-playlist","dist-tags":{"latest":"1.2.3"},"versions":{"1.2.0":{"name":"@afripods/waveform-playlist","description":"Multiple track web audio editor and player with waveform preview","version":"1.2.0","main":"build/afripods-waveform-playlist.umd.js","author":{"name":"Naomi Aro & Levels"},"license":"MIT","website":"https://afripods.africa","devDependencies":{"@babel/cli":"^7.21.0","@babel/core":"^7.21.4","@babel/plugin-transform-runtime":"^7.21.4","@babel/preset-env":"^7.21.4","ajv":"^8.12.0","babel-loader":"^8.3.0","gh-pages":"^3.2.3","mkdirp":"^1.0.4","prettier":"2.3.2","sass":"^1.62.0","webpack":"^5.79.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.13.3"},"directories":{"build":"build","lib":"lib","css":"styles"},"dependencies":{"@babel/runtime":"^7.21.0","event-emitter":"^0.3.5","fade-curves":"^1.0.2","fade-maker":"^1.0.3","inline-worker":"^1.1.0","lodash.assign":"^4.2.0","lodash.attempt":"^4.2.0","lodash.defaultsdeep":"^4.6.1","lodash.forown":"^4.4.0","mp3-parser":"0.3.0","tone":"^14.7.77","uuid":"^8.3.2","virtual-dom":"^2.1.1","webaudio-peaks":"^1.0.0"},"scripts":{"clean":"rm -Rf dist && rm -Rf lib && rm -Rf build && rm -Rf styles","styles":"mkdirp styles && cp ghpages/scss/_playlist.scss styles/playlist.scss && sass styles/","jekyll:scss":"mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/ --watch &","jekyll":"jekyll build -s ghpages -d dist/waveform-playlist && mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/","jekyll:dev":"jekyll build -s ghpages -d dist/waveform-playlist --watch &","ghpages":"gh-pages --repo https://$GH_TOKEN@github.com/naomiaro/waveform-playlist.git -d dist/waveform-playlist","build":"npm run clean && npm run jekyll && webpack","preversion":"npm run clean","version":"npm run build && git add -A dist","postversion":"git push && git push --tags","prepare":"npm run compile && npm run styles && npm run webpack:unpkg","compile":"babel src --out-dir lib","webpack:unpkg":"webpack --config webpack.config.unpkg.js","webpack:server":"webpack serve --static dist/ --color --host 0.0.0.0 --config webpack.config.dev.js","start":"npm run webpack:server","dev":"npm run jekyll:dev && npm run jekyll:scss && npm run webpack:server","website":"npm run build && npm run ghpages"},"repository":{"type":"git","url":"git+https://github.com/naomiaro/waveform-playlist.git"},"keywords":["waveform","audio","audacity","stem","tracks","multitrack","playlist","music","editor","record","recording","player","webaudio"],"bugs":{"url":"https://github.com/naomiaro/waveform-playlist/issues"},"homepage":"http://naomiaro.github.io/waveform-playlist","gitHead":"4a4531f688761888ce83df05c0feca8e7538d401","_id":"@afripods/waveform-playlist@1.2.0","_nodeVersion":"19.4.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-5iFhUfHBEpEQpPHj3Vl9ohFgWwWfygskEVX7qdjhogRf9+BcGqq3dHI2bzovxQV2OnUIeoaUhFSjHZtexDgs+Q==","shasum":"2c019c1e576694efb4c2fff087ffe7dd1568b03c","tarball":"https://registry.npmjs.org/@afripods/waveform-playlist/-/waveform-playlist-1.2.0.tgz","fileCount":54,"unpackedSize":2866287,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGTeopDkikxc4htkT+jQWIP6vcwvxEGBZ5vgMi8s8lNyAiBgLR03Q5qKnYXrkFZUCawOC9InURIRxqNe3XqMXC2Q5Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQADEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXThAAhSWJed5rgDFiPpGq+Z9iJClJ9B8yums5vipeR16ACeGUrOrp\r\nJk7dNwr1BB49d0ejJTj7gJ0XsDHsKj1qgIskuSZWrSXs4gVoGh1AZ2tYaQB0\r\nrvTETHUb8MmYS7Kt7NjtObK746Wq2aVvJe8LWr3c5/jhVlgvDKVIrUciq6tg\r\n3IqM0Z+iHwiGgC0pPFeZ1z4cd85/0UaLLHq0990aJvkNLYyI23irwJXAfOPS\r\nuKpgDKagOwBxWbjdpNzTiBYmBhONOlUB5TCJy1BNslf20goAkoM9I6HlXkhp\r\ni76xK+q71wW/6F1p3+2vPCSbQ3k8fbvRPP2aRPDgZzOsYboXYXOb5EbdnEvE\r\nA6XGp186IwS57wWtvXJUnGOgk9g85q2hv+wZoMBsqaMLXRzyVbCLEWq8XoKs\r\n2PkIfk3eRTWzaOIVG5Mg8tGDZS9sk5mj9WJ7j9fSgkdMjzXNwjc0YAh4FCWT\r\nBLT7Nvdyf3Rf5u+XMgXTtSFU6pAvN7M+hmvsYGttGVVarXksfTyUvA2/ZwzD\r\nV8NPmz5UxBx9hBi5oDRNC3vP0y1UwQc/J+aZg7yitbN2LKotmcEy3wDJfBuH\r\nJNgT4efEPAafmszuivnmvg593ZaDHUrm7roM2slZl0pxT9n73kiVwZSef2Pg\r\nPiNB9MjRt1Df//tlcj8Q+J9AaaIb+CIqIB4=\r\n=4Z3c\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afripods","email":"afripods@gmail.com"},"maintainers":[{"name":"afripods","email":"afripods@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/waveform-playlist_1.2.0_1681916099910_0.7102892997054564"},"_hasShrinkwrap":false},"1.2.1":{"name":"@afripods/waveform-playlist","description":"Multiple track web audio editor and player with waveform preview","version":"1.2.1","main":"build/waveform-playlist.umd.js","author":{"name":"Naomi Aro & Levels"},"license":"MIT","website":"https://afripods.africa","devDependencies":{"@babel/cli":"^7.21.0","@babel/core":"^7.21.4","@babel/plugin-transform-runtime":"^7.21.4","@babel/preset-env":"^7.21.4","ajv":"^8.12.0","babel-loader":"^8.3.0","gh-pages":"^3.2.3","mkdirp":"^1.0.4","prettier":"2.3.2","sass":"^1.62.0","webpack":"^5.79.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.13.3"},"directories":{"build":"build","lib":"lib","css":"styles"},"dependencies":{"@babel/runtime":"^7.21.0","event-emitter":"^0.3.5","fade-curves":"^1.0.2","fade-maker":"^1.0.3","inline-worker":"^1.1.0","lodash.assign":"^4.2.0","lodash.attempt":"^4.2.0","lodash.defaultsdeep":"^4.6.1","lodash.forown":"^4.4.0","mp3-parser":"0.3.0","tone":"^14.7.77","uuid":"^8.3.2","virtual-dom":"^2.1.1","webaudio-peaks":"^1.0.0"},"scripts":{"clean":"rm -Rf dist && rm -Rf lib && rm -Rf build && rm -Rf styles","styles":"mkdirp styles && cp ghpages/scss/_playlist.scss styles/playlist.scss && sass styles/","jekyll:scss":"mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/ --watch &","jekyll":"jekyll build -s ghpages -d dist/waveform-playlist && mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/","jekyll:dev":"jekyll build -s ghpages -d dist/waveform-playlist --watch &","ghpages":"gh-pages --repo https://$GH_TOKEN@github.com/naomiaro/waveform-playlist.git -d dist/waveform-playlist","build":"npm run clean && npm run jekyll && webpack","preversion":"npm run clean","version":"npm run build && git add -A dist","postversion":"git push && git push --tags","prepare":"npm run compile && npm run styles && npm run webpack:unpkg","compile":"babel src --out-dir lib","webpack:unpkg":"webpack --config webpack.config.unpkg.js","webpack:server":"webpack serve --static dist/ --color --host 0.0.0.0 --config webpack.config.dev.js","start":"npm run webpack:server","dev":"npm run jekyll:dev && npm run jekyll:scss && npm run webpack:server","website":"npm run build && npm run ghpages"},"repository":{"type":"git","url":"git+https://github.com/naomiaro/waveform-playlist.git"},"keywords":["waveform","audio","audacity","stem","tracks","multitrack","playlist","music","editor","record","recording","player","webaudio"],"bugs":{"url":"https://github.com/naomiaro/waveform-playlist/issues"},"homepage":"http://naomiaro.github.io/waveform-playlist","gitHead":"ce0337f55c26898e583ff3967600834875c5b0ea","_id":"@afripods/waveform-playlist@1.2.1","_nodeVersion":"19.4.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-gGm4q58wuw2G83F5Ox71Cy1IgQFvub3g5yuGHOqc4WL+Jc/qNO6/yx8+NbwP82tNEPbKL8OPg+aT5+TvWhL2fg==","shasum":"b2cc33aa824627cdca55d1ada3adc7c0df05c5be","tarball":"https://registry.npmjs.org/@afripods/waveform-playlist/-/waveform-playlist-1.2.1.tgz","fileCount":54,"unpackedSize":3148309,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDz2aIsAvPvBt/3qJ19g5aV3URvrQO+YsJaS0csg0KQHAIgM+V2CZruIVMQTu/jef3NbYDoav+q0SzFfoZrb78D+kw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQA2cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrOoQ//cvowMltsOTxqwQ/fKmpkyjP7qa4cvOSmMVsXitZ3wv2q0qVu\r\nLNpexX5st4BtSqjsy47oHLdsvSdYbXJWs23/2HpmrzCtQREh9vrLdEKxhB0c\r\nc4nXPALITAilqmCEldDqXE4ZBLMuw+uJl4E4xSeEASLp/zQVnMNlRLCAyfqp\r\naFoonM8LpIbiO+al0UaLoeMu6nD+TSo4fA2q2maDbnAY8+Kc2R8KvlJvbung\r\nh+l0OkyyNh8bKCzU3JrQdJdn1PUbC8VzbThQ2qYJygN9+EpLu+/ejV1aSfyb\r\n8ViPPocKgkuSX1Qy1I/RUZek9DXlp4wPnt2gDicDuWH0meIn1bOQxRRrtuRA\r\n+A81Ad/QFZjAhUr1mQSpzVP5kjoHcaBbJrYiyylikfcnsYIvf8wXvkqyc+td\r\ni7AHdZj0iRley/qi3dKGbiBwDR6obrQnsPkcTg4q8DPpHI1CyiHrJX9oPBzC\r\nNm2Hc7c1FyOMMx9EfBlO59Io/jK8JS3bIzsE5efSGqc3K3huC/zlzgEdd9nL\r\nX7qf/xay/66s3rZKFUC9uhTrOa3ucaigq2R29HRpkKqUvbwaWs33T4tEzKO9\r\nN0RHi+IYu45Dz9L5Hz/3/D8IIxejMOu/aBDoj4nPLK2xSfjfNo9QKyK61oD2\r\n2x/FDc/lEGb1ipONX3GC7ON+arSntb6lkyA=\r\n=tERt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afripods","email":"afripods@gmail.com"},"maintainers":[{"name":"afripods","email":"afripods@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/waveform-playlist_1.2.1_1681919387921_0.7254849632417111"},"_hasShrinkwrap":false},"1.2.2":{"name":"@afripods/waveform-playlist","description":"Multiple track web audio editor and player with waveform preview","version":"1.2.2","main":"build/waveform-playlist.umd.js","author":{"name":"Naomi Aro & Levels"},"license":"MIT","website":"https://afripods.africa","devDependencies":{"@babel/cli":"^7.21.0","@babel/core":"^7.21.4","@babel/plugin-transform-runtime":"^7.21.4","@babel/preset-env":"^7.21.4","ajv":"^8.12.0","babel-loader":"^8.3.0","gh-pages":"^3.2.3","mkdirp":"^1.0.4","prettier":"2.3.2","sass":"^1.62.0","webpack":"^5.79.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.13.3"},"directories":{"build":"build","lib":"lib","css":"styles"},"dependencies":{"@babel/runtime":"^7.21.0","event-emitter":"^0.3.5","fade-curves":"^1.0.2","fade-maker":"^1.0.3","inline-worker":"^1.1.0","lodash.assign":"^4.2.0","lodash.attempt":"^4.2.0","lodash.defaultsdeep":"^4.6.1","lodash.forown":"^4.4.0","mp3-parser":"0.3.0","tone":"^14.7.77","uuid":"^8.3.2","virtual-dom":"^2.1.1","webaudio-peaks":"^1.0.0"},"scripts":{"clean":"rm -Rf dist && rm -Rf lib && rm -Rf build && rm -Rf styles","styles":"mkdirp styles && cp ghpages/scss/_playlist.scss styles/playlist.scss && sass styles/","jekyll:scss":"mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/ --watch &","jekyll":"jekyll build -s ghpages -d dist/waveform-playlist && mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/","jekyll:dev":"jekyll build -s ghpages -d dist/waveform-playlist --watch &","ghpages":"gh-pages --repo https://$GH_TOKEN@github.com/naomiaro/waveform-playlist.git -d dist/waveform-playlist","build":"npm run clean && npm run jekyll && webpack","preversion":"npm run clean","version":"npm run build && git add -A dist","postversion":"git push && git push --tags","prepare":"npm run compile && npm run styles && npm run webpack:unpkg","compile":"babel src --out-dir lib","webpack:unpkg":"webpack --config webpack.config.unpkg.js","webpack:server":"webpack serve --static dist/ --color --host 0.0.0.0 --config webpack.config.dev.js","start":"npm run webpack:server","dev":"npm run jekyll:dev && npm run jekyll:scss && npm run webpack:server","website":"npm run build && npm run ghpages"},"repository":{"type":"git","url":"git+https://github.com/naomiaro/waveform-playlist.git"},"keywords":["waveform","audio","audacity","stem","tracks","multitrack","playlist","music","editor","record","recording","player","webaudio"],"bugs":{"url":"https://github.com/naomiaro/waveform-playlist/issues"},"homepage":"http://naomiaro.github.io/waveform-playlist","gitHead":"aa41433c9e0bf5ada069ac6ae6a48feb05be743a","_id":"@afripods/waveform-playlist@1.2.2","_nodeVersion":"19.4.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-UddiItOwWQlt3ZPPXGNQsYpoj5r1DujtV0FpQkDGbsTsnm+GZjXJzSsM4gF/Z7e97wEXlOD5SOY5N9PYfAqNug==","shasum":"04d17fb1d0264e6f6ba281bbff97c4e7138d7e13","tarball":"https://registry.npmjs.org/@afripods/waveform-playlist/-/waveform-playlist-1.2.2.tgz","fileCount":54,"unpackedSize":3149656,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgxyMBPuFP/IHorbnKJLbtRiVZD3FJvOmuqo/bpoA9WgIhAMsCC094RfoF0Hd9c/sCYYsj5ausCow6WOufQdlP2Mp4"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQPQgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZmQ/+NqPJJrCTJqMxNG4V6SfuRy4CNHtgPz7PJ37wu1y6ptaYOHS1\r\nZEuksHeEDyoDJFnxKUbfkNZM0B2oReXLzyKF2BT8A0pS2UHLAbSGcY28HCwV\r\n47qIx07STgXS0pOeuz2VHy8/o9hsYqdJ5h/IsrKveN9V36hHmD5RFvuUIacC\r\n3a4p5FprpHantAcRvUzIb+5ZVdcXMCKuOEM7uoSaDUyBiR9GsKFrzOm52WI6\r\niB9mqh1+akfmA39I2f2gGa2gWFYeoNLxDNn+vAKTM4JypAfixTPeCBE+3VYm\r\nMiwcfr/b3jia5A4coYYRBymeY7sPwL10jM0xY966xedxR9mx32R67oHdpztn\r\ntY9ONCUo9gE3Hyez//g2kuV1TEEOClJ8sbAU9szFP0ZE3EPsB+vC+7vc5Yki\r\nIBP5QBwY3kARJxEBrcIy4CKNHqykpMXhZnH3la5Zy0Iq/nYShpa1PQCKjXvz\r\nPryVWa7M0eBBDln8Df+iLzBQlvOwrLnruyRI6SuiAU33Lbz66Jqz8Z0hUspC\r\nkIHuKjzA4qukbeqsIG6rWPxtjhsH0yCa1nuZ0MsjHsBWBrbsdFXyjStNhouN\r\nsPEpwhNZW6EjZP7+LG8jB+AXPtTKtz7gMkgwETs1+GO14NZp2JEuN8jTb42q\r\nwd01U5j3GB2FEs4CjFTKZRdYBBw21aj46uY=\r\n=kRMg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afripods","email":"afripods@gmail.com"},"maintainers":[{"name":"afripods","email":"afripods@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/waveform-playlist_1.2.2_1681978400283_0.06057587912723683"},"_hasShrinkwrap":false},"1.2.3":{"name":"@afripods/waveform-playlist","description":"Multiple track web audio editor and player with waveform preview","version":"1.2.3","main":"build/waveform-playlist.umd.js","author":{"name":"Naomi Aro & Levels"},"license":"MIT","website":"https://afripods.africa","devDependencies":{"@babel/cli":"^7.21.0","@babel/core":"^7.21.4","@babel/plugin-transform-runtime":"^7.21.4","@babel/preset-env":"^7.21.4","ajv":"^8.12.0","babel-loader":"^8.3.0","gh-pages":"^3.2.3","mkdirp":"^1.0.4","prettier":"2.3.2","sass":"^1.62.0","webpack":"^5.79.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.13.3"},"directories":{"build":"build","lib":"lib","css":"styles"},"dependencies":{"@babel/runtime":"^7.21.0","event-emitter":"^0.3.5","fade-curves":"^1.0.2","fade-maker":"^1.0.3","inline-worker":"^1.1.0","lodash.assign":"^4.2.0","lodash.attempt":"^4.2.0","lodash.defaultsdeep":"^4.6.1","lodash.forown":"^4.4.0","mp3-parser":"0.3.0","tone":"^14.7.77","uuid":"^8.3.2","virtual-dom":"^2.1.1","webaudio-peaks":"^1.0.0"},"scripts":{"clean":"rm -Rf dist && rm -Rf lib && rm -Rf build && rm -Rf styles","styles":"mkdirp styles && cp ghpages/scss/_playlist.scss styles/playlist.scss && sass styles/","jekyll:scss":"mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/ --watch &","jekyll":"jekyll build -s ghpages -d dist/waveform-playlist && mkdirp dist/waveform-playlist/css/ && sass ghpages/scss/:dist/waveform-playlist/css/","jekyll:dev":"jekyll build -s ghpages -d dist/waveform-playlist --watch &","ghpages":"gh-pages --repo https://$GH_TOKEN@github.com/naomiaro/waveform-playlist.git -d dist/waveform-playlist","build":"npm run clean && npm run jekyll && webpack","preversion":"npm run clean","version":"npm run build && git add -A dist","postversion":"git push && git push --tags","prepare":"npm run compile && npm run styles && npm run webpack:unpkg","compile":"babel src --out-dir lib","webpack:unpkg":"webpack --config webpack.config.unpkg.js","webpack:server":"webpack serve --static dist/ --color --host 0.0.0.0 --config webpack.config.dev.js","start":"npm run webpack:server","dev":"npm run jekyll:dev && npm run jekyll:scss && npm run webpack:server","website":"npm run build && npm run ghpages"},"repository":{"type":"git","url":"git+https://github.com/naomiaro/waveform-playlist.git"},"keywords":["waveform","audio","audacity","stem","tracks","multitrack","playlist","music","editor","record","recording","player","webaudio"],"bugs":{"url":"https://github.com/naomiaro/waveform-playlist/issues"},"homepage":"http://naomiaro.github.io/waveform-playlist","gitHead":"df9b43a8469e9796d47baab181c7c2a175c6c916","_id":"@afripods/waveform-playlist@1.2.3","_nodeVersion":"19.4.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-Vk/iWdZXXmra4IauGM8efswMcUbUFbNqAJFoBNXiXsM0ibjWLS7cbBG2y3I+rLkRAkBndIZAIXXxFfEteOUaLA==","shasum":"c2bfe7b7c43d834599352466916c73344e9e97ef","tarball":"https://registry.npmjs.org/@afripods/waveform-playlist/-/waveform-playlist-1.2.3.tgz","fileCount":54,"unpackedSize":3151177,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFVi9ncrImOPfMwgua+TMgvCS1SX3WdKd7dajviDRlQwAiASgil+OoRr7uNC/CBEXeUO8w1TLiixKTGPyOroN6MJHg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQUvZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmotbBAAg2PqJro10RKmBXowxxvyAC36woMDT0y/CXY9VFJab2dZhKN2\r\nFBE9nilDDoSXF0KLCjjiCSKbGykyG15nMslKf+ZmsvtOiFibkxcJs5iOX17p\r\n7vjnIpRfvWdq7g5I0pId+Y7BXoCZHr2oCOz7jv9byM7SaFnpzNZuOvNBb1Pd\r\nG3r67OK+mnSb/ncJkldSZB8pQdXefKD87mrRtSZdag+XyrykMaP+pcGELOq8\r\nsvsCxXJ2LvcUHyiwSfjd6f/b6tVU4y7fmSNmg9ieSwEb4ZGik1oFaFlyAZv9\r\nvskPKEmmWnXRL9p1FBtwXofCQYQBHZYAXTJgoUnI5lArfkl8yJDuHTxYc7or\r\nZx481W1JiOiQBK6PtWNRb+WWlM2JB6As3pBmVEHt2daki465EVfF+B2jkM/4\r\neEyFpORhSQRw1xjL5ukCxBNMY4LS6q3gy6X5e1lIayqdTBmM0GlPvkB8Xd+s\r\nKRAG1VQNyLsDFuNaTi8kmk/PIs8wv0xvp3b/riS707No73xCmtcsTTPZgTZR\r\nmiyhSdOSuRrRY5q+qwwT+qjJHrquDzHVtRBMn2n+n85sAu4tdTmyH/oXZaEQ\r\nkwfH7OBQL+IgNLPS8mBZJUxAugm3Q3JlGTSKg8LdzstgLa8VLT4sDit+M92C\r\nPspM5J8rMH/HcZ3bgIvuVJb731xwwI4M2Hk=\r\n=6rIb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afripods","email":"afripods@gmail.com"},"maintainers":[{"name":"afripods","email":"afripods@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/waveform-playlist_1.2.3_1682000857413_0.6501756236620349"},"_hasShrinkwrap":false}},"time":{"created":"2023-04-19T14:54:59.848Z","1.2.0":"2023-04-19T14:55:00.148Z","modified":"2023-04-20T14:27:37.767Z","1.2.1":"2023-04-19T15:49:48.208Z","1.2.2":"2023-04-20T08:13:20.548Z","1.2.3":"2023-04-20T14:27:37.632Z"},"maintainers":[{"name":"afripods","email":"afripods@gmail.com"}],"description":"Multiple track web audio editor and player with waveform preview","homepage":"http://naomiaro.github.io/waveform-playlist","keywords":["waveform","audio","audacity","stem","tracks","multitrack","playlist","music","editor","record","recording","player","webaudio"],"repository":{"type":"git","url":"git+https://github.com/naomiaro/waveform-playlist.git"},"author":{"name":"Naomi Aro & Levels"},"bugs":{"url":"https://github.com/naomiaro/waveform-playlist/issues"},"license":"MIT","readme":"[Npm Package](https://www.npmjs.com/package/afripods-waveform-playlist)\n\n\n## Browser Support\n\nWaveform Playlist requires webaudio in the browser to function correctly: [Can I Use?](http://caniuse.com/#search=webaudio)\n\n## Installation\n\n`npm install afripods-waveform-playlist --save`\n\nHate npm? Check Unpkg: https://unpkg.com/browse/waveform-playlist/\n\n- If you want to download and run the already compiled website, navigate to folder `/dist` and run `python -m SimpleHTTPServer 8000`. The website will be available at `localhost:8000/waveform-playlist`.\n\n## Basic Usage\n\n```javascript\nimport WaveformPlaylist from \"waveform-playlist\";\n\nvar playlist = WaveformPlaylist({\n  samplesPerPixel: 3000,\n  mono: true,\n  waveHeight: 70,\n  container: document.getElementById(\"playlist\"),\n  state: \"cursor\",\n  colors: {\n    waveOutlineColor: \"#E0EFF1\",\n    timeColor: \"grey\",\n    fadeColor: \"black\",\n  },\n  controls: {\n    show: false,\n    width: 150,\n  },\n  zoomLevels: [500, 1000, 3000, 5000],\n});\n\nplaylist\n  .load([\n    {\n      src: \"media/audio/Vocals30.mp3\",\n      name: \"Vocals\",\n      gain: 0.5,\n    },\n    {\n      src: \"media/audio/BassDrums30.mp3\",\n      name: \"Drums\",\n      start: 8.5,\n      fadeIn: {\n        duration: 0.5,\n      },\n      fadeOut: {\n        shape: \"logarithmic\",\n        duration: 0.5,\n      },\n    },\n    {\n      src: \"media/audio/Guitar30.mp3\",\n      name: \"Guitar\",\n      start: 23.5,\n      fadeOut: {\n        shape: \"linear\",\n        duration: 0.5,\n      },\n      cuein: 15,\n    },\n  ])\n  .then(function () {\n    // can do stuff with the playlist.\n  });\n```\n\n### Playlist Options\n\n```javascript\nvar options = {\n  // webaudio api AudioContext\n  ac: new (window.AudioContext || window.webkitAudioContext)(),\n\n  // DOM container element REQUIRED\n  container: document.getElementById(\"playlist\"),\n\n  // sample rate of the project. (used for correct peaks rendering)\n  sampleRate: new (\n    window.AudioContext || window.webkitAudioContext\n  ).sampleRate(),\n\n  // number of audio samples per waveform peak.\n  // must be an entry in option: zoomLevels.\n  samplesPerPixel: 4096,\n\n  // whether to draw multiple channels or combine them.\n  mono: true,\n\n  // enables \"exclusive solo\" where solo switches between tracks\n  exclSolo: false,\n\n  // default fade curve type.\n  fadeType: \"logarithmic\", // (logarithmic | linear | sCurve | exponential)\n\n  // whether or not to include the time measure.\n  timescale: false,\n\n  // control panel on left side of waveform\n  controls: {\n    // whether or not to include the track controls\n    show: false,\n\n    // width of controls in pixels\n    width: 150,\n\n    // whether to render the widget or not in the controls panel.\n    widgets: {\n      // Mute & solo button widget\n      muteOrSolo: true,\n\n      // Volume slider\n      volume: true,\n\n      // Stereo pan slider\n      stereoPan: true,\n\n      // Collapse track button\n      collapse: true,\n\n      // Remove track button\n      remove: true,\n    },\n  },\n\n  colors: {\n    // color of the wave background\n    waveOutlineColor: \"white\",\n\n    // color of the time ticks on the canvas\n    timeColor: \"grey\",\n\n    // color of the fade drawn on canvas\n    fadeColor: \"black\",\n  },\n\n  // height in pixels of each canvas element a waveform is on.\n  waveHeight: 128,\n\n  // width in pixels of waveform bars.\n  barWidth: 1,\n\n  // spacing in pixels between waveform bars.\n  barGap: 0,\n\n  // interaction state of the playlist\n  // (cursor | select | fadein | fadeout | shift)\n  state: \"cursor\",\n\n  // (line | fill)\n  seekStyle: \"line\",\n\n  // Array of zoom levels in samples per pixel.\n  // Smaller numbers have a greater zoom in.\n  zoomLevels: [512, 1024, 2048, 4096],\n\n  // Whether to automatically scroll the waveform while playing\n  isAutomaticScroll: false,\n\n  // configuration object for the annotations add on.\n  annotationList: {\n    // Array of annotations in [Aeneas](https://github.com/readbeyond/aeneas) JSON format\n    annotations: [],\n\n    // Whether the annotation texts will be in updateable contenteditable html elements\n    editable: false,\n\n    // User defined functions which can manipulate the loaded annotations\n    controls: [\n      {\n        // class names for generated <i> tag separated by '.'\n        class: \"fa.fa-minus\",\n\n        // title attribute for the generated <i> tag\n        title: \"Reduce annotation end by 0.010s\",\n\n        // function which acts on the given annotation row\n        // when the corresponding <i> is clicked.\n        action: (annotation, i, annotations, opts) => {\n          // @param Object annotation - current annotation\n          // @param Number i - index of annotation\n          // @param Array annotations - array of annotations in the playlist\n          // @param Object opts - configuration options available\n          //      - opts.linkEndpoints\n        },\n      },\n    ],\n\n    // If false when clicking an annotation id segment\n    // playback will stop after segment completion.\n    isContinuousPlay: false,\n\n    // If true annotation endpoints will remain linked when dragged\n    // if they were the same value before dragging started.\n    linkEndpoints: false,\n\n    // pass a custom function which will receive the mastergainnode for this playlist and the audio context's destination.\n    // if you pass a function, you must connect these two nodes to hear sound at minimum.\n    // if you need to clean something up when the graph is disposed, return a cleanup function. Waveform Playlist will cleanup the nodes passed as arguments.\n    effects: function (masterGainNode, destination, isOffline) {\n      // analyser nodes don't work offline.\n      if (!isOffline) masterGainNode.connect(analyser);\n      masterGainNode.connect(destination);\n\n      // return function cleanup() {\n      //   // if you create webaudio nodes that need to be cleaned up do that here\n      //   // see the track effects example.\n      // };\n    },\n  },\n};\n```\n\n### Track Options\n\n```javascript\n{\n  // a media path for XHR, a Blob, a File, or an AudioBuffer object.\n  src: 'media/audio/BassDrums30.mp3',\n\n  // name that will display in the playlist control panel.\n  name: 'Drums',\n\n  // volume level of the track between [0-1]\n  gain: 1,\n\n  // whether the track should initially be muted.\n  muted: false,\n\n  // whether the track should initially be soloed.\n  soloed: false,\n\n  // time in seconds relative to the playlist\n  // ex (track will start after 8.5 seconds)\n  // DEFAULT 0 - track starts at beginning of playlist\n  start: 8.5,\n\n  // track fade in details\n  fadeIn: {\n    // fade curve shape\n    // (logarithmic | linear | sCurve | exponential)\n    shape: 'logarithmic',\n\n    // length of fade starting from the beginning of this track, in seconds.\n    duration: 0.5,\n  },\n\n  // track fade out details\n  fadeOut: {\n    // fade curve shape\n    // (logarithmic | linear | sCurve | exponential)\n    shape: 'logarithmic',\n\n    //length of fade which reaches the end of this track, in seconds.\n    duration: 0.5,\n  }\n\n  // where the waveform for this track should begin from\n  // ex (Waveform will begin 15 seconds into this track)\n  // DEFAULT start at the beginning - 0 seconds\n  cuein: 15,\n\n  // where the waveform for this track should end\n  // ex (Waveform will end at 30 second into this track)\n  // DEFAULT duration of the track\n  cueout: 30,\n\n  // custom class for unique track styling\n  customClass: 'vocals',\n\n  // custom background-color for the canvas-drawn waveform\n  waveOutlineColor: '#f3f3f3',\n\n  // interaction states allowed on this track.\n  // DEFAULT - all true\n  states: {\n    cursor: true,\n    fadein: true,\n    fadeout: true,\n    select: true,\n    shift: true,\n  },\n\n  // pre-selected section on track.\n  // ONLY ONE selection is permitted in a list of tracks, will take most recently set if multiple passed.\n  // This track is marked as 'active'\n  selected: {\n    // start time of selection in seconds, relative to the playlist\n    start: 5,\n\n    // end time of selection in seconds, relative to the playlist\n    end: 15,\n  },\n\n  // value from -1 (full left pan) to 1 (full right pan)\n  stereoPan: 0,\n\n  // pass a custom function which will receive the last graphnode for this track and the mastergainnode.\n  // if you pass a function, you must connect these two nodes to hear sound at minimum.\n  // if you need to clean something up when the graph is disposed, return a cleanup function. Waveform Playlist will cleanup the nodes passed as arguments.\n  effects: function(graphEnd, masterGainNode, isOffline) {\n    var reverb = new Tone.Reverb(1.2);\n\n    Tone.connect(graphEnd, reverb);\n    Tone.connect(reverb, masterGainNode);\n\n    return function cleanup() {\n      reverb.disconnect();\n      reverb.dispose();\n    }\n  }\n}\n```\n\n### Playlist Events\n\nWaveform Playlist uses an instance of [event-emitter](https://www.npmjs.com/package/event-emitter) to send & receive messages from the playlist.\n\n```javascript\nimport EventEmitter from \"event-emitter\";\nimport WaveformPlaylist from \"waveform-playlist\";\n\nvar playlist = WaveformPlaylist(\n  {\n    container: document.getElementById(\"playlist\"),\n  },\n\n  // you can pass your own event emitter\n  EventEmitter()\n);\n\n// retrieves the event emitter the playlist is using.\nvar ee = playlist.getEventEmitter();\n```\n\nAn example of using the event emitter to control the playlist can be found in [/dist/js/examples/emitter.js](https://github.com/naomiaro/waveform-playlist/blob/main/dist/waveform-playlist/js/emitter.js)\n\n#### Events to Invoke\n\n| event                 | arguments                                            | description                                                                                                                                                                                          |\n| --------------------- |------------------------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `play`                | `start:optional, end:optional`                       | Starts playout of the playlist. Takes optional Number parameters in seconds `start` and `end` to play just an audio segment. `start` can be passed without an `end` to play to the end of the track. |\n| `pause`               | _none_                                               | Pauses playout of the playlist.                                                                                                                                                                      |\n| `stop`                | _none_                                               | Stops playout of the playlist.                                                                                                                                                                       |\n| `rewind`              | _none_                                               | Stops playout if playlist is playing, resets cursor to the beginning of the playlist.                                                                                                                |\n| `fastforward`         | _none_                                               | Stops playout if playlist is playing, resets cursor to the end of the playlist.                                                                                                                      |\n| `clear`               | _none_                                               | Stops playout if playlist is playing, removes all tracks from the playlist.                                                                                                                          |\n| `record`              | _none_                                               | Starts recording an audio track. Begins playout of other tracks in playlist if there are any.                                                                                                        |\n| `zoomin`              | _none_                                               | Changes zoom level to the next smallest entry (if one exists) from the array `zoomLevels`.                                                                                                           |\n| `zoomout`             | _none_                                               | Changes zoom level to the next largest entry (if one exists) from the array `zoomLevels`.                                                                                                            |\n| `trim`                | _none_                                               | Trims currently active track to the cursor selection.                                                                                                                                                |\n| `statechange`         | `cursor` / `select` / `fadein` / `fadeout` / `shift` | Changes interaction state to the state given.                                                                                                                                                        |\n| `fadetype`            | `logarithmic` / `linear` / `sCurve` / `exponential`  | Changes playlist default fade type.                                                                                                                                                                  |\n| `newtrack`            | `File`                                               | Loads `File` object into the playlist.                                                                                                                                                               |\n| `volumechange`        | `volume, track`                                      | Set volume of `track` to `volume` (0-100)                                                                                                                                                            |\n| `mastervolumechange`  | `volume`                                             | Set a new master volume `volume` (0-100)                                                                                                                                                             |\n| `select`              | `start, end, track:optional`                         | Seek to the start time or start/end selection optionally with active track `track`.                                                                                                                  |\n| `startaudiorendering` | `mp3` / `wav` / `buffer`                             | Request for a downloadable file or web Audio buffer that represent the current work                                                                                                                  |\n| `automaticscroll`     | `true`/`false`                                       | Change property `isAutomaticScroll`.                                                                                                                                                                 |\n| `continuousplay`      | `true`/`false`                                       | Change property `isContinuousPlay`.                                                                                                                                                                  |\n| `linkendpoints`       | `true`/`false`                                       | Change property `linkEndpoints`.                                                                                                                                                                     |\n| `annotationsrequest`  | _none_                                               | Requests to download the annotations to a json file.                                                                                                                                                 |\n| `stereopan`           | `panvalue, track`                                    | Set pan value of `track` to `panvalue` (-1-1)                                                                                                                                                        |\n\n#### Events to Listen to\n\n| event                     | arguments                       | description                                                                                                                                                                                                         |\n| ------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `select`                  | `start, end, track`             | Cursor selection has occurred from `start` to `end` with active Track `track`.                                                                                                                                      |\n| `timeupdate`              | `playbackPosition`              | Sends current position of playout `playbackPosition` in seconds.                                                                                                                                                    |\n| `scroll`                  | `scrollLeft`                    | Sends current position of scroll `scrollLeft` in seconds.                                                                                                                                                           |\n| `statechange`             | `state`                         | Sends current interaction state `state`.                                                                                                                                                                            |\n| `shift`                   | `deltaTime, track`              | Sends `deltaTime` in seconds change for Track `track`                                                                                                                                                               |\n| `mute`                    | `track`                         | Mute button has been pressed for `track`                                                                                                                                                                            |\n| `solo`                    | `track`                         | Solo button has been pressed for `track`                                                                                                                                                                            |\n| `removeTrack`             | `track`                         | Remove button has been pressed for `track`                                                                                                                                                                          |\n| `changeTrackView`         | `track, opts`                   | Collapse button has been pressed for `track`                                                                                                                                                                        |\n| `volumechange`            | `volume, track`                 | Volume of `track` has changed to `volume` (0-100)                                                                                                                                                                   |\n| `mastervolumechange`      | `volume`                        | Master volume of the playlist has changed to `volume` (0-100)                                                                                                                                                       |\n| `audiorequeststatechange` | `state, src`                    | Loading audio `src` (`string` or `File`) is now in state [`state`](https://github.com/naomiaro/waveform-playlist/wiki/Track-Loading-States) (Number)                                                                |\n| `loadprogress`            | `percent, src`                  | Loading audio `src` has loaded percent `percent` (0-100)                                                                                                                                                            |\n| `audiosourcesloaded`      | _none_                          | Audio decoding has finished for all tracks                                                                                                                                                                          |\n| `audiosourcesrendered`    | _none_                          | Tracks are rendered to the playlist                                                                                                                                                                                 |\n| `audiosourceserror`       | `err`                           | Error thrown while loading tracks                                                                                                                                                                                   |\n| `finished`                | _none_                          | Event fired when cursor ( while playing ) reaches the end (maximum duration)                                                                                                                                        |\n| `audiorenderingstarting`  | `offlineCtx, setUpPromiseArray` | Event fired after the OfflineAudioContext is created before any rendering begins. If any setup is async before offline redering, push a promise to the setUpPromiseArray.                                           |\n| `audiorenderingfinished`  | `type, data`                    | Return the result of the rendering in the desired format. `type` can be `buffer` or `wav` and can be used to dertermine the `data` type. When `type` is `wav`, data is a `blob` object that represent the wav file. |\n| `stereopan`               | `panvalue, track`               | Pan value of `track` has been changed to `panvalue`                                                                                                                                                                 |\n\n## Tests\n\n`npm test`\n\n## Development without example changes\n\n`npm install && npm start`\n\nThis will install dependencies and start the webpack server.\n\n## Development with example changes\n\n`gem install jekyll`\n\nJekyll is needed if changes to the example pages will be done.\n\n`npm install && npm run dev`\n\nThis will build and watch the jekyll site and startup the webpack dev server.\n\n\n## License\n\n[MIT License](http://doge.mit-license.org)\n","readmeFilename":"README.md"}