{"id":19438836,"url":"https://github.com/stashymane/midifunk","last_synced_at":"2025-04-24T22:32:12.433Z","repository":{"id":58920048,"uuid":"285347919","full_name":"stashymane/midifunk","owner":"stashymane","description":"Library for listening for and manipulating MIDI events","archived":false,"fork":false,"pushed_at":"2024-06-29T22:40:33.000Z","size":300,"stargazers_count":5,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-30T05:15:38.624Z","etag":null,"topics":["kotlin","library","midi"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stashymane.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":"2020-08-05T16:36:06.000Z","updated_at":"2024-06-29T22:40:36.000Z","dependencies_parsed_at":"2024-02-11T22:30:59.781Z","dependency_job_id":"eaf056bf-1253-4d4a-83d0-5e257e31657a","html_url":"https://github.com/stashymane/midifunk","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stashymane%2Fmidifunk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stashymane%2Fmidifunk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stashymane%2Fmidifunk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stashymane%2Fmidifunk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stashymane","download_url":"https://codeload.github.com/stashymane/midifunk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223969153,"owners_count":17233599,"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":["kotlin","library","midi"],"created_at":"2024-11-10T15:19:56.100Z","updated_at":"2024-11-10T15:19:56.782Z","avatar_url":"https://github.com/stashymane.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# midifunk [![Version tag](https://img.shields.io/maven-central/v/dev.stashy.midifunk/events?logo=apachemaven\u0026label=Maven%20Central\u0026color=%23339AF0)][Maven central]\n\nKotlin Multiplatform MIDI library that just makes sense.  \nCurrently focused on live MIDI I/O.\n\nNote: this is still in an experimental stage, expect breaking changes until the first stable release.\n\n## Features\n\n* Type-safe MIDI events with the `events` module\n* MIDI as consumable channels with Coroutines\n* Minimal code required for listening\n* Easy input \u0026 output\n\n## Platforms\n\n| Platform | Events | Devices | Comment                                         |\n|:---------|:-------|:--------|:------------------------------------------------|\n| JVM      | ✅️     | ✅️      |                                                 |\n| Windows  | ✅️     | ✖️      | Waiting on Windows MIDI services                |\n| Linux    | ✅️     | ✖️      | Devices support coming after Windows            |\n| MacOS    | ❔️     | ✖️      | No device for testing or development available. |\n\n## Usage\n\nVersion catalog\n\n```toml\n[versions]\nmidifunk = \"[version]\"\n\n[libraries]\nmidifunk-events = { module = \"dev.stashy.midifunk:events\", version.ref = \"midifunk\" }\nmidifunk-devices = { module = \"dev.stashy.midifunk:devices\", version.ref = \"midifunk\" }\n```\n\nGradle Kotlin\n\n```kotlin\nimplementation(\"dev.stashy.midifunk\", \"events\", \"version\")\nimplementation(\"dev.stashy.midifunk\", \"devices\", \"version\")\n```\n\n## Examples\n\n### Opening device for reading inputs\n\n```kotlin\nval device = MidiDevice.list()[0]\ndevice.input.open(coroutineScope).onEach { println(it) }\n```\n\n### Opening output channel\n\n```kotlin\nval device = MidiDevice.list()[0]\nval channel: SendChannel\u003cMidiData\u003e = device.output.open(coroutineScope)\nchannel.send(event)\n```\n\n### Creating type-safe MIDI events with DSL\n\n```kotlin\nNoteEvent.create {\n    noteStatus = true\n    note = Note.C(4)\n    velocity = 127u\n}\n```\n\n## Roadmap\n\nTop priority at the moment is to finalize the device input/output API.\nThe eventual goal is to be able to completely rip out the Java MIDI backend \u0026 use something else, which will also\nprovide multiplatform support.\n\nAfter the device API, virtual device support is going to be prioritized.\nThis will most likely require separate backends for each platform to be implemented already.\n\n## Contributing\n\nAlthough not strictly, please try to adhere to the [standard Kotlin code style guidelines][1], more thoroughly defined\nin JetBrains IDEs. Other than that, feel free to submit pull requests - I will gladly review them.\n\n[1]: https://kotlinlang.org/docs/reference/coding-conventions.html\n\n[Maven central]: https://central.sonatype.com/namespace/dev.stashy.midifunk\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstashymane%2Fmidifunk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstashymane%2Fmidifunk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstashymane%2Fmidifunk/lists"}