{"id":13768659,"url":"https://github.com/1j01/guitar","last_synced_at":"2025-10-28T18:41:04.186Z","repository":{"id":13175756,"uuid":"15858965","full_name":"1j01/guitar","owner":"1j01","description":"🎸 Online guitar toy and tablature recorder/player","archived":false,"fork":false,"pushed_at":"2023-05-03T02:37:33.000Z","size":894,"stargazers_count":102,"open_issues_count":18,"forks_count":18,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-08-03T16:09:55.966Z","etag":null,"topics":["app","editor","guitar","html5","javascript","midi","music","scales","synth","synthesizer","tablature","tablature-parser","tabs","toy","tuna","web-app"],"latest_commit_sha":null,"homepage":"https://1j01.github.io/guitar/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1j01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2014-01-13T05:31:23.000Z","updated_at":"2024-07-03T08:02:50.000Z","dependencies_parsed_at":"2024-01-12T01:14:56.532Z","dependency_job_id":"de324de0-d72c-4c77-8abe-0d8ca7262421","html_url":"https://github.com/1j01/guitar","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fguitar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fguitar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fguitar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fguitar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1j01","download_url":"https://codeload.github.com/1j01/guitar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224014299,"owners_count":17241281,"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":["app","editor","guitar","html5","javascript","midi","music","scales","synth","synthesizer","tablature","tablature-parser","tabs","toy","tuna","web-app"],"created_at":"2024-08-03T16:01:24.171Z","updated_at":"2025-10-28T18:40:59.137Z","avatar_url":"https://github.com/1j01.png","language":"JavaScript","funding_links":[],"categories":["MIDI instruments","Tools"],"sub_categories":["Guitar","Websites"],"readme":"\nGuitar\n======\n\nIt's a virtual guitar record-a-synthesize-amatronic web application.\n\n[![Demo animation](https://i.imgur.com/afoMtR3.gif)][app]\n\n[Try it out here.][app]\n\nYou can copy and paste entire webpages containing guitar tabs and it'll try to load all it can.\n\nPlay back notes by pressing \"almost any\" key (at least on US keyboards),\nwith the fretboard focused (or no control focused).\nYou can rock back and forth between different fingers on different keys, or just pick one, whatever feels natural.\n\nRecord notes by clicking on the fretboard.\nSecondary click is a shortcut to an open string. You can do this easily in real life from any position, so it makes sense to be able to do it from any position on the virtual guitar too.\nTertiary mouse button (middle mouse button) does a bend, although bends are not recorded yet.\nTiming is also not recorded yet.\nSo it's not very useful for recording tabs, although you could certainly use it as an interactive chart at least.\n\nYou can choose any scale to highlight,\na feature I first implemented in [Tri-Chromatic Keyboard][].\nIt should be much more useful here, since you can learn how to play the guitar with it!\n(as opposed to an instrument that virtually no-one has, including me)\n\n----\n\nUses [tuna][] audio effects library.\nThe guitar synthesis algorithm is from [guitar-synth](https://github.com/getinstinct/guitar-synth).\n\nThe tablature parser created for the app is available separately as a module [here][tablature-parser].\n\n## Development\n\n```bash\nnpm install\nnpm run watch\nnpx live-server\n```\n\nThe `watch` task compiles CoffeeScript when it changes.\n\n`live-server` is a web server that reloads the page when files change. You can use any web server, alternatively.\n\n## Deployment\n\nThis app is deployed to GitHub Pages using the `gh-pages` module.\n\n```bash\nnpm run build\nnpm run deploy\n```\n\n## TODO\n\n* Better mobile support\n\n    - Play back recorded notes with a button\n    \n    - Multitouch\n\n* Make web application self-explanatory and test accessibility\n\n* Make bending (MMB) less ridiculous\n\n* Record chords\n  (with multitouch or a modifier key, maybe also have some sort of toggle)\n\n* Strum chords in playback, maybe have up/down arrows for up/down strumming\n\n* Source mapping, so you can see and keep the rhythm, articulations, and comments as context\n\n* Record, parse, and play back articulations\n  such as slides, bends, vibratos, hammer-ons, and pull-offs\n\n* Different sound for sliding than for plucking/picking\n\n* Different sound in general, ha, since it's not great...\n\n* Support for different tunings\n\n* Allow configuring the effects chain\n  (at least toggle distortion on/off)\n\n* Clear way set focus to the fretboard for playback (unfocusing the tablature editor), via the keyboard\n\n* Tablature editor\n    \n    - Scroll with the playback position\n    \n    - Make the playback position indicator different while playing, so it's clearer whether its showing what's playing or what's next\n    \n    - Set the position in the song when you click in the tablature editor\n    \n    - Handle multi-digit numbers when highlighting notes\n    \n    - Insert and overwrite notes with the virtual guitar fretboard (as opposed to just appending (which is a specific form of inserting))\n    \n    - Multi-String Cursor mode\n        \n        + Shift+click to select from the existing selection anchor\n        \n        + Disable or override double-click and triple-click... and [quad-click (yeah, for real)](https://github.com/ajaxorg/ace/blob/b8e3198ba8e9fe98cdda85e90f517b94d4452b5e/lib/ace/mouse/default_handlers.js#L226)\n        \n        + Why does the selection style change on mouseup?\n    \n    - Clearer overwrite mode cursor\n    \n    - Custom syntax highlighting\n        \n        + Highlight tablature with articulations and everything\n        \n        + Highlight `\u003c\u003c` misalignment markers as erroneous\n    \n    - Maybe add some padding with `renderer.setPadding`?\n\n    - Paste from `contentEditable` to detect a `\u003cpre\u003e` containing the tabs? Just to eliminate noise, and if it keeps surrounding text (context) while editing, extra output in what you might save / the work in removing it.\n\n* MusicXML? MIDI?\n\n\n[app]: https://1j01.github.io/guitar/\n[tuna]: https://github.com/Dinahmoe/tuna\n[tablature-parser]: https://github.com/1j01/tablature-parser\n[Tri-Chromatic Keyboard]: https://github.com/1j01/tri-chromatic-keyboard\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1j01%2Fguitar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1j01%2Fguitar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1j01%2Fguitar/lists"}