{"id":19269339,"url":"https://github.com/atsushieno/kmmk","last_synced_at":"2025-04-21T20:32:37.533Z","repository":{"id":66679151,"uuid":"353439304","full_name":"atsushieno/kmmk","owner":"atsushieno","description":"Fully featured virtual MIDI 1.0/2.0 keyboard application using Kotlin and Compose for Desktop and Android","archived":false,"fork":false,"pushed_at":"2025-03-29T08:34:04.000Z","size":5159,"stargazers_count":9,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T09:27:59.295Z","etag":null,"topics":["jetpack-compose","keyboard","kotlin","midi","music"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/atsushieno.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-31T17:35:04.000Z","updated_at":"2025-03-29T08:34:07.000Z","dependencies_parsed_at":"2024-04-16T07:41:10.660Z","dependency_job_id":"e20f7caa-03a3-4277-99c7-834493d3f4ab","html_url":"https://github.com/atsushieno/kmmk","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atsushieno%2Fkmmk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atsushieno%2Fkmmk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atsushieno%2Fkmmk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atsushieno%2Fkmmk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atsushieno","download_url":"https://codeload.github.com/atsushieno/kmmk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250128355,"owners_count":21379493,"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":["jetpack-compose","keyboard","kotlin","midi","music"],"created_at":"2024-11-09T20:19:35.216Z","updated_at":"2025-04-21T20:32:37.519Z","avatar_url":"https://github.com/atsushieno.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kmmk: virtual MIDI keyboard for Desktop and Android\n\n![Kmmk Desktop](docs/images/kmmk-desktop.png)\n![Kmmk Android](docs/images/kmmk-android.png)\n\nKmmk is a virtual MIDI keyboard application based on [ktmidi](https://github.com/atsushieno/ktmidi).\n\nHere are the basics: it receives either keyboard inputs, mouse clicks or touch inputs, among whatever the underlying platform accepts. Then it sends note on/off operations etc. to the target MIDI output device.\n\nKmmk makes use of Kotlin Multiplatform and Jetpack Compose, and should run on Android and desktop i.e. Linux, Mac and most likely Windows (not verified).\n\nYou can try the wasm version in action: https://atsushieno.github.io/kmmk/\n\n## Features\n\nKmmk has various features.\n\n### Works as a virtual MIDI Input\n\n(Linux and Mac only) when kmmk is launched, it creates a virtual MIDI input port for itself so that any MIDI apps (e.g. DAWs) can use it as a virtual MIDI keyboard.\n\n### Keyboard layouts\n\nIt supports two PC keyset layouts:\n\n- Diatonic: like piano. When there is no semitone e.g. `e-sharp` or `b-sharp` then the corresponding key is left blank.\n- Chromatic: every key has an assigned note. That means, the key right next to `e` is not `f` but `f+` because `f` is placed on right-upper next to `e`.\n\n### PC keyboard settings\n\nBy default the keyboard is laid out as ASCII QWERTY sequence. We also provide some other keyboard layouts that extend the key ranges beyond QWERTY.\n\n### Octave Shift and Note Shift (transpose)\n\nSHIFT+UP increases octave, SHIFT+DOWN decreases it. SHIFT+LEFT decreases transpose, SHIFT+RIGHT increases it.\n\n### Drum part\n\nYou can also choose \"channel 10\" which usually means a drum channel. For channel 10, it will show drum set names instead of instruments.\n\n### Record MML\n\nWhen you type \"notes\" then they will be recorded at the text entry box, as simple MML (Music Macro Language), implemented as in [mugene-ng](https://github.com/atsushieno/mugene-ng).\n\n### Play MML\n\nThe recorded MML can be compiled as a MIDI sequence and then sent to the target MIDI output device, just like MIDI players do.\n\n### MIDI 2.0 support (kind of)\n\nSince ktmidi supports MIDI 2.0, we leverage the feature in this application. It does not really connect bidirectionally, but sends MIDI-CI Set New Protocol message to the recipient, so unless the recipient refuses to connect unless any further testing (e.g. using MIDI-CI Test New Protocol messages), it would optimisitically work. There is no known host applications that support MIDI 2.0 devices anyways.\n\nUnless you check \"MIDI 2.0\" option, it will send MIDI 1.0 messages.\n\n### Combination of all above\n\nThose features can be powerful when they are combined together. For example, you can code some drum patterns as in MML, then play it and send the MIDI seqneunce to your DAW via the kmmk virtual MIDI input.\n\n\n## Miscellaneous Notes\n\nThe button pad can be hidden by toggle button (`[+]` Text).\n\nAndroid emulators from Google (i.e. the ones you download as part of Android Studio) do not appropriately handle key events and you won't be able to keep key-on states. Hopefully not on Android devices (otherwise the entire API does not make sense), but not sure. It should work perfectly on desktop (it is verified on Ubuntu 22.04).\n\n## License\n\nkmmk is distributed under the MIT License.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatsushieno%2Fkmmk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatsushieno%2Fkmmk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatsushieno%2Fkmmk/lists"}