{"id":13434057,"url":"https://github.com/mmckegg/loop-drop-app","last_synced_at":"2025-05-16T05:05:01.421Z","repository":{"id":10662491,"uuid":"12895517","full_name":"mmckegg/loop-drop-app","owner":"mmckegg","description":"[unmaintained] MIDI looper, modular synth and sampler app built using Web Audio and Web MIDI APIs","archived":false,"fork":false,"pushed_at":"2022-12-07T18:48:50.000Z","size":9039,"stargazers_count":826,"open_issues_count":69,"forks_count":77,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-05-15T19:55:59.403Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmckegg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-AGPL-3.0.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-17T13:12:34.000Z","updated_at":"2025-05-07T20:27:05.000Z","dependencies_parsed_at":"2023-01-11T20:14:51.735Z","dependency_job_id":null,"html_url":"https://github.com/mmckegg/loop-drop-app","commit_stats":null,"previous_names":[],"tags_count":70,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmckegg%2Floop-drop-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmckegg%2Floop-drop-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmckegg%2Floop-drop-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmckegg%2Floop-drop-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmckegg","download_url":"https://codeload.github.com/mmckegg/loop-drop-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471061,"owners_count":22076585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T02:01:44.425Z","updated_at":"2025-05-16T05:05:01.402Z","avatar_url":"https://github.com/mmckegg.png","language":"JavaScript","readme":"Loop Drop\n===\n\nMIDI looper, modular synth and sampler app built around Novation Launchpad controller.\n\nWritten in **JavaScript** and powered by [Web Audio](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API), [Web MIDI](https://webaudio.github.io/web-midi-api/), and [electron](http://electron.atom.io/).\n\n## Currently Unmaintained\n\nI'm taking a (possibly permanent) break from this project. My efforts are now mostly focused on a [hardware only version of this project](https://github.com/mmckegg/rust-loop-drop) for my own personal use.\n\nThe latest master is more recent than the releases, so I suggest that if you can, install from source! (master includes Ableton Link support and midi outputs).\n\nI put a lot of work into this project over the years, but it was always a struggle trying to get Web Audio to work the way I wanted. That combined with trying to also make this an app for other people to use, took up way to much energy. I just want to get back to making music. \n\nSo long, and thanks for all the fish. :heart:\n\n## Overview\n\n- [Watch a video of Loop Drop in action](https://www.youtube.com/watch?v=EBkmdNDIR6E)\n- [Listen to music created with Loop Drop!](https://soundcloud.com/destroy-with-science)\n\n#### Create sounds and load samples\n\nDrop them where you want on your controllers then start jamming!\n\n#### Everything you play is recorded.\n\nHit the loop button at any time. Whatever you just played will start to loop!\n\n#### Play to the beat.\n\nUse beat repeat and hold down buttons to trigger at different rates relative to tempo.\n\n#### Transform your loops while they play.\n\nSelect, move, repeat, suppress. All using your hardware controller.\n\n### Using with a launchpad\n\n\u003cdiv class='ImageSteps'\u003e\n  \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds02.jpg?raw=true' /\u003e \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds03.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds04.jpg?raw=true' /\u003e\n\u003c/div\u003e\n          \nAdd as many Launchpad controllers as your need.\u003c/em\u003e\u003cbr/\u003e Loop Drop supports the MK1, Mini, MK2 and Pro editions!\n\n![](https://github.com/mmckegg/loopjs-www/blob/master/public/loop-drop-launchpad.png?raw=true)\n\n\u003ca href='https://www.youtube.com/channel/UC2wAgvZBPlRoqHRQ7vS0RZg'\u003e📺 Check out the Loop Drop YouTube channel!\u003c/a\u003e \u003c/br\u003e\nor Matt's \u003ca href='https://www.youtube.com/channel/UCx4PC9z3Os2gp0BYfdUK07A'\u003epersonal YouTube channel\u003c/a\u003e (full of Loop Drop gigs)\n\n### Using with qwerty keys\n\nTo get the most out of Loop Drop, you should use it with a \u003cem\u003ehardware controller\u003c/em\u003e, but you can \u003cem\u003etry it out\u003c/em\u003e using your computer's \u003cem\u003eqwerty keyboard\u003c/em\u003e.\n\n![](https://github.com/mmckegg/loopjs-www/blob/master/public/loop-drop-qwerty.png?raw=true)\n\n\u003cem\u003eVideo:\u003c/em\u003e \u003ca href='https://www.youtube.com/watch?v=tOpbRsDwYH4'\u003eUsing Loop Drop with a Qwerty Keyboard\u003c/a\u003e\n\n### Loading \u003cem\u003eAudio Samples\u003c/em\u003e\n\n#### Create \u003cem\u003eTriggers Chunk\u003c/em\u003e and \u003cem\u003edrag to controller\u003c/em\u003e\n\u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds05.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds07.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds09.jpg?raw=true' /\u003e\n\u003cem\u003eTrigger chunks are blocks of related sounds\u003c/em\u003e e.g. drumkit, sliced sample, vocals, etc. They \u003cem\u003emust\u003c/em\u003e be added to a controller before they do anything.\n\n\n#### Select \u003cem\u003eshape\u003c/em\u003e and \u003cem\u003edrag in audio samples\u003c/em\u003e\n\n\u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds11.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds12.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds13.jpg?raw=true' /\u003e\n\n\u003cem\u003eTip:\u003c/em\u003e You can also manually add the slot, add a sample source, then click 'Choose File' to browse.\n\n#### \u003cem\u003ePlay!\u003c/em\u003e\n\n\u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds14.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds15.jpg?raw=true' /\u003e\n\n### \u003cem\u003eSynthesize!\u003c/em\u003e\n\n#### Create \u003cem\u003eChromatic Chunk\u003c/em\u003e and \u003cem\u003edrag to controller\u003c/em\u003e\n\n\u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds16.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds18.jpg?raw=true' /\u003e \u003cimg height=\"150\"  src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds19.jpg?raw=true' /\u003e\n\n\u003cem\u003eChromatic chunks are like trigger chunks, except that they only have one editable trigger ('template').\u003c/em\u003e\u003cbr/\u003e This is repeated for all triggers in the block, except that the pitch increases chromatically. You can create pitched instruments using samples or synthesis.\n\n#### Add \u003cem\u003eOscillators\u003c/em\u003e and tweak\u003c\n      \n\u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds20.jpg?raw=true' /\u003e \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds25.jpg?raw=true' /\u003e \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds23.jpg?raw=true' /\u003e\n\nClicking \u003cem\u003eENV\u003c/em\u003e adds an \u003cem\u003eADSR\u003c/em\u003e (attack, decay, sustain, release) envelope to the chosen param.\n\n#### Choose \u003cem\u003eOutput Effects\u003c/em\u003e\u003c/h1\u003e\n\n\u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds26.jpg?raw=true' /\u003e \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds27.jpg?raw=true' /\u003e \u003cimg height=\"150\" src='https://github.com/mmckegg/loopjs-www/blob/master/public/image-steps/sounds32.jpg?raw=true' /\u003e\n\n\u003cem\u003eTip:\u003c/em\u003e Effects like 'reverb' should be added to the 'Output' slot instead of the triggers to avoid unnecessary CPU usage.\n\n## Build and Install from source\n\n```bash\n$ git clone https://github.com/mmckegg/loop-drop-app.git\n$ cd loop-drop-app\n$ npm install\n$ npm start\n```\n\n### Troubleshooting\n\nIf you receive an error on start up about missing `lib/*`, you may have to [run the following as administrator](http://www.howtogeek.com/howto/windows-vista/run-a-command-as-administrator-from-the-windows-vista-run-box/):\n\n#### Windows\n\n```bash\n# run admin\n$ node scripts/link-lib.js\n```\n\n#### Linux\n\n```bash\n$ sudo node scripts/link-lib.js\n```\n\nIf it still doesn't work, try copying the `/lib` folder into `/node_modules`.\n\n### Installing updates\n\nNew versions are being pushed out all the time. To update:\n\n```bash\n$ git pull\n$ npm update\n$ npm start\n```\n\n### You can also install via [npm](https://www.npmjs.com/package/loop-drop)\n\n```bash\n$ npm install -g loop-drop\n$ loop-drop\n\n# install update\n$ npm update -g loop-drop\n```\n\n## Module Overview\n\n- [electron](https://github.com/atom/electron)\n- [mutant](https://github.com/mmckegg/mutant)\n- [micro-css](https://github.com/mmckegg/micro-css)\n- [web-midi](https://github.com/mmckegg/web-midi)\n- [wave-recorder](https://github.com/mmckegg/wave-recorder)\n- [bopper](https://github.com/wavejs/bopper)\n\n## License\n\n[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)\n","funding_links":[],"categories":["JavaScript","Packages","Apps"],"sub_categories":["Apps","Open Source"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmckegg%2Floop-drop-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmckegg%2Floop-drop-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmckegg%2Floop-drop-app/lists"}