{"id":16681499,"url":"https://github.com/hlorenzi/theorytracker","last_synced_at":"2025-05-07T07:12:42.148Z","repository":{"id":42667562,"uuid":"47324489","full_name":"hlorenzi/theorytracker","owner":"hlorenzi","description":"🎼 HTML5/WebAudio multi-track songwriting app with chord analysis support! -- https://hlorenzi.github.io/theorytracker/","archived":false,"fork":false,"pushed_at":"2024-09-08T20:34:10.000Z","size":3604,"stargazers_count":120,"open_issues_count":12,"forks_count":18,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-03-04T13:27:03.206Z","etag":null,"topics":["file-system-access","file-system-access-api","functional-harmony","harmony","html5","html5-application","music","music-analysis","music-composition","music-notation","music-theory","music-theory-apps","sf2","song","soundfont","tracker","web-app","web-application","webapp","webaudio"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/hlorenzi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"hlorenzi","ko_fi":"hlorenzi"}},"created_at":"2015-12-03T10:21:00.000Z","updated_at":"2025-02-14T22:55:47.000Z","dependencies_parsed_at":"2024-10-27T11:48:56.705Z","dependency_job_id":"bea488cd-b5de-48b6-a154-866e4f6f1f35","html_url":"https://github.com/hlorenzi/theorytracker","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlorenzi%2Ftheorytracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlorenzi%2Ftheorytracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlorenzi%2Ftheorytracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlorenzi%2Ftheorytracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hlorenzi","download_url":"https://codeload.github.com/hlorenzi/theorytracker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243606853,"owners_count":20318314,"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":["file-system-access","file-system-access-api","functional-harmony","harmony","html5","html5-application","music","music-analysis","music-composition","music-notation","music-theory","music-theory-apps","sf2","song","soundfont","tracker","web-app","web-application","webapp","webaudio"],"created_at":"2024-10-12T14:04:24.605Z","updated_at":"2025-03-14T16:04:49.306Z","avatar_url":"https://github.com/hlorenzi.png","language":"TypeScript","funding_links":["https://patreon.com/hlorenzi","https://ko-fi.com/hlorenzi"],"categories":[],"sub_categories":[],"readme":"# TheoryTracker\n\n[🎼 Try it right now on your browser!](https://hlorenzi.github.io/theorytracker/)\n\n[![Join the Discord server!][badge-discord-img]][badge-discord-url]\n\n[badge-discord-img]: https://img.shields.io/discord/394999035540275222?label=Join%20the%20Discord%20server!\u0026logo=discord\n[badge-discord-url]: https://discord.com/invite/pXeDXGD\n\nThis is a multi-track piano-roll-style song editor app with an emphasis on music theory,\nwhere notes and chords are color-coded according to the key, and some editing tools\nwork diatonically.\n\nThe app can currently import `.mid` and its own `.ttproj` project files,\nwhich are in plain JSON format.\nIt can currently export `.ttproj` files and render `.wav` files.\n\nSeveral soundfonts are readily available from an online repository.\n\n## How to use\n\n### General usage:\n\n* Use the middle or right mouse buttons to pan.\n* Hold \u003ckbd\u003eA\u003c/kbd\u003e to draw elements with the mouse.\n* Right-click on an element to change its properties.\n  * Do a long right-click for a context menu with more commands.\n* Double-click on a note block to edit its notes.\n  * Click on \"Project Root\" on the breadcrumb bar to exit note editing mode.\n\n* Press \u003ckbd\u003eSpace\u003c/kbd\u003e to toggle playback starting from the cursor.\n* Press \u003ckbd\u003eEsc\u003c/kbd\u003e to rewind.\n* Use \u003ckbd\u003eBackspace\u003c/kbd\u003e to delete incrementally.\n* Use \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eZ\u003c/kbd\u003e to undo, and \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eY\u003c/kbd\u003e\nor \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eZ\u003c/kbd\u003e to redo.\n\n* Also use \u003ckbd\u003e1\u003c/kbd\u003e\u003ckbd\u003e2\u003c/kbd\u003e\u003ckbd\u003e3\u003c/kbd\u003e\u003ckbd\u003e4\u003c/kbd\u003e\u003ckbd\u003e5\u003c/kbd\u003e\u003ckbd\u003e6\u003c/kbd\u003e\u003ckbd\u003e7\u003c/kbd\u003e\nto create notes and chords.\n\n### When elements are selected:\n\n* Use \u003ckbd\u003e←\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e to move.\n  * Combine with \u003ckbd\u003eCtrl\u003c/kbd\u003e for faster movement.\n* Use \u003ckbd\u003e↑\u003c/kbd\u003e\u003ckbd\u003e↓\u003c/kbd\u003e to change the pitch of notes, and the root of chords.\n  * Combine with \u003ckbd\u003eCtrl\u003c/kbd\u003e to change pitch by octaves.\n  * Combine with \u003ckbd\u003eShift\u003c/kbd\u003e to change pitch chromatically.\n* Also use \u003ckbd\u003e,\u003c/kbd\u003e\u003ckbd\u003e.\u003c/kbd\u003e to change pitch chromatically.\n* Use \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003e←\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e to stretch.\n* Hold \u003ckbd\u003eAlt\u003c/kbd\u003e then drag with the mouse to duplicate.\n\n* Press \u003ckbd\u003eEnter\u003c/kbd\u003e to unselect all.\n* Press \u003ckbd\u003eDelete\u003c/kbd\u003e to delete.\n\n* Use \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eX\u003c/kbd\u003e, \u003ckbd\u003eC\u003c/kbd\u003e, or \u003ckbd\u003eV\u003c/kbd\u003e for the usual\ncut/copy/paste commands.\n\n## Building from source\n\nInstall npm dependencies with `npm install`, then perform a build\nwith `npm run build`. You can also run `npm run watch` to work locally.\n\nThen, run `npm start` or any other simple HTTP web server from\nthe repository folder, and navigate to `http://127.0.0.1`.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlorenzi%2Ftheorytracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhlorenzi%2Ftheorytracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlorenzi%2Ftheorytracker/lists"}