{"id":21582737,"url":"https://github.com/werckme/werckmeister","last_synced_at":"2025-04-07T14:11:44.160Z","repository":{"id":37026509,"uuid":"165647021","full_name":"werckme/werckmeister","owner":"werckme","description":"An open source Sheet Music MIDI Compiler","archived":false,"fork":false,"pushed_at":"2025-03-19T20:02:30.000Z","size":12492,"stargazers_count":40,"open_issues_count":74,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T13:15:50.020Z","etag":null,"topics":["lilypond-format","markup-language","midi","music","sheet"],"latest_commit_sha":null,"homepage":"http://werckme.github.io/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/werckme.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2019-01-14T11:06:19.000Z","updated_at":"2025-03-19T20:02:37.000Z","dependencies_parsed_at":"2022-07-15T21:00:38.229Z","dependency_job_id":"d22ceb3c-0461-4a88-a0af-13784d216e71","html_url":"https://github.com/werckme/werckmeister","commit_stats":{"total_commits":1309,"total_committers":12,"mean_commits":"109.08333333333333","dds":0.4591291061879297,"last_synced_commit":"6b0f6463b5248939fda7defe9490ecbdb9833fa7"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/werckme%2Fwerckmeister","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/werckme%2Fwerckmeister/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/werckme%2Fwerckmeister/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/werckme%2Fwerckmeister/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/werckme","download_url":"https://codeload.github.com/werckme/werckmeister/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247666014,"owners_count":20975788,"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":["lilypond-format","markup-language","midi","music","sheet"],"created_at":"2024-11-24T14:16:53.914Z","updated_at":"2025-04-07T14:11:44.134Z","avatar_url":"https://github.com/werckme.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"![Linux Build](https://github.com/werckme/werckmeister/workflows/Linux%20Build/badge.svg)\n![Windows Build](https://github.com/werckme/werckmeister/workflows/Windows%20Build/badge.svg)\n![Mac Build](https://github.com/werckme/werckmeister/workflows/Mac%20Build/badge.svg)\n\n\u003cimg src=\"https://raw.githubusercontent.com/SambaGodschynski/werckmeister/main/assets/Logo2.png\" style=\"margin: -90px auto; height: 500px\"\u003e\n\n## An open source Sheet Music MIDI Compiler\n\nWerckmeister compiles sheet music source code into a MIDI file.\n\n## [Try it online](https://www.werckme.org/editor)\n\n### Use Werckmeister if you want to\n* prototype a song\n* transcript sheet music\n* experiment with chord progressions or different accompaniment styles\n* compose using readable source code instead of proprietary files formats\n\n### Features\n* open source\n* fast sheet music MIDI compiler\n* sheet file MIDI player\n* vscode extension\n* accompaniment template rendering engine\n* css like [conduction rules](https://www.werckme.org/manual#conduction-rules)\n* Lua mods\n\n## Motivation\n* [SuperCollider](https://supercollider.github.io/)\n* [CSound](https://en.wikipedia.org/wiki/Csound)\n* [Alda](https://alda.io/)\n* [...](https://en.wikipedia.org/wiki/List_of_audio_programming_languages)\n\n### Why oh why does the world need another musical programming language?\n\nIt begun with the fact, that I was searching for new scorewriter tool. I was using [Overture](https://sonicscores.com/overture/) for a long time but it got outdated and did'nt run very well on my new computer. It anoyed me that I have to pay several hundred dollars just to get it to run on a new system.\n\nThat and the fact that all music I have written is \"locked in\" in a proprietary file format, led me to the decision that the new solution has to be open source.\n\n\u003e Fun Fact: If I had known [MuseScore](https://musescore.org/) during that time, maybe there would be no werckmeister today\n\nSo eventually I found [LilypPond](https://lilypond.org/). I loved the idea behind it: writing music just with text. It addressed the problem having useless (score) files, because having no program that can read it. \n\nUnfortunately lilypond dosen't fullfill all my needs. It is made with a focus on \"music engraving\", not creating music in a way I would do with a regulary scorewriter *(in terms of trying things out, experimenting with ideas)*. \n\nSo, for me, it had following disadvantages:\n* rudimental MIDI generation\n* long rendering time\n* bloated soure code with visual engraving informations\n\nso that was original idea:\n\n#### having a tool like LilyPond, but \n* with a focus on MIDI\n* fast compile time\n* tight source code\n\nSo I searched more in this \"music via source code\" direction. I found great software there, such as CSound and SuperCollider. But, for my opinion, these programs are made to have a **new way** of creating music, less writing music in a more traditional way.\n\n\u003e Alda comes very close to that, what I was searching for, but again, I didn't know it back then. \n\nSo finally, I decided to create werckmeister. \n\nSomewhat later, I played around with a Yamaha keyboard and its \"Auto Accompaniment\" feature and I was wondering how it comes, that when I press a Cmaj7 chord the virtual band plays the correct notes to that. And that was the beginning of the \"accompaniment template\" system.\n\n\n## Syntax\n### Tracks and Voices\nA Werckmeister piece is built of tracks and voices. A track can have an arbitray number of voices, but at least there\nhas to be one voice.\nA track is embraced by brackets (`[]`), a voice by curled braces (`{}`).\nThe shortest valid Werckmeister piece would be: `[{}]`\n### Notation\nThe syntax is loosely inspired by the [lilypond](http://lilypond.org) notation syntax. A note is written by letter followed by a number for its duration. If a note has no duration, the last given duration will be used.\n\n\n\n![a simple scale with quartes and eights](https://raw.githubusercontent.com/SambaGodschynski/werckmeister/main/assets/example1.gif)\n\u003cbr\u003e*a simple scale with quartes and eights*\n\n\n\n\n### Templates\nInstead of writing absolute notes, you use relative degrees. For example `I4` means the first degree as a quarter note.\n\n\n\n![This template playes the Ist IIIrd Vth and the VIIth degree as quarter note. It will be played two bars. Starting with a C7 followed by a C minor 7 chord](https://raw.githubusercontent.com/SambaGodschynski/werckmeister/main/assets/example2.gif)\n\u003cbr\u003e*This template playes the Ist, IIIrd, Vth and the VIIth degree as quarter note. It will be used for two bars. Starting with a C7 followed by a C minor 7 chord.*\n\n# Installation\n\n## Build from sources\n## Dependencies\n- boost library, links against: \n  - unit_test_framework\n  - filesystem \n  - program_options \n  - locale\n  - asio\n- rtmidi\n- rapidjson\n\n## Prerequisites\n- install the [boost](https://boost.org) library\n- install cmake\n- clone the repository https://github.com/SambaGodschynski/werckmeister.git\n- cd into `werckmeister`\n\n*If your boost library is not located at a common search path (e.g. \"/usr/local/lib\"), make sure that the \nenvironment variable \"BOOST_ROOT\" is set. \n\u003cbr\u003e(see https://cmake.org/cmake/help/v3.15/module/FindBoost.html)*\n## Run cmake\n- make a `build` directory\n- cd into it\n### *Nix\n- run `cmake ..`\n- run `make`\n### Windows\n- run `cmake --help`\n- look for your \"generator\" e.g. \"Visual Studio 12 2013\"\n- run `cmake .. -G \"Visual Studio 12 2013\"`\n- open the generated .sln file with Visual Studio\n- Start Building\n## After build\nthere should be at least 3 executables:\n- `sheetc` -\u003e a cli \".sheet\"-file compiler\n- `sheetp` -\u003e a cli \".sheet\"-file player\n- `rehearse` -\u003e runs the unit tests\n\n# Compiler\nrun `./sheetc asheetfile.sheet` to compile a sheet file into a MIDI file.\n\n# Player\nrun `./sheetp asheetfile.sheet`.\n\nThere are several optional arguments:\n- `--watch` -\u003e on the fly change detection/recompile\n- `--begin` -\u003e start position as quarter position\n- `--end` -\u003e end position as quarter position\n- `--loop` -\u003e play as loop\n- `--list` -\u003e lists your detected MIDI devices\n\n# Architecture\n![Werckmeister Architecture](https://raw.githubusercontent.com/SambaGodschynski/werckmeister/main/assets/architecture.png)\n\n# Other Cool Projects\n* https://welle.live/\n* https://asdfg.me/welle/\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwerckme%2Fwerckmeister","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwerckme%2Fwerckmeister","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwerckme%2Fwerckmeister/lists"}