{"id":22535542,"url":"https://github.com/muhac/midi-controller-joysticks","last_synced_at":"2026-02-14T10:30:58.257Z","repository":{"id":266790878,"uuid":"787065840","full_name":"muhac/midi-controller-joysticks","owner":"muhac","description":"Use MIDI controllers as joysticks. Let's play Microsoft Flight Simulator!","archived":false,"fork":false,"pushed_at":"2025-06-15T06:29:50.000Z","size":758,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-07T01:40:07.048Z","etag":null,"topics":["desktop","joystick","midi","simulation","windows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muhac.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":"2024-04-15T20:29:02.000Z","updated_at":"2025-06-15T04:18:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"72d763ac-102c-4b41-b3ec-82b99eda401f","html_url":"https://github.com/muhac/midi-controller-joysticks","commit_stats":null,"previous_names":["muhac/midi-controller-joysticks"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/muhac/midi-controller-joysticks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhac%2Fmidi-controller-joysticks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhac%2Fmidi-controller-joysticks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhac%2Fmidi-controller-joysticks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhac%2Fmidi-controller-joysticks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muhac","download_url":"https://codeload.github.com/muhac/midi-controller-joysticks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhac%2Fmidi-controller-joysticks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29442713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T10:17:46.583Z","status":"ssl_error","status_checked_at":"2026-02-14T10:17:22.534Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["desktop","joystick","midi","simulation","windows"],"created_at":"2024-12-07T10:07:48.651Z","updated_at":"2026-02-14T10:30:58.242Z","avatar_url":"https://github.com/muhac.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MIDI Controllers to Joysticks\n\nSimulate joystick inputs using MIDI controllers!\n\n## Installation\n\n1. Install vJoy [v2.2.2](https://github.com/BrunnerInnovation/vJoy/releases/tag/v2.2.2.0).\n2. Download the [latest release](https://github.com/muhac/midi-controller-joysticks/releases/latest) of this project.\n3. Extract the contents of the downloaded archive.\n4. Run `MIDIvJoy.exe` to start the program.\n\nTo use a different version of vJoy (e.g., [v2.1.9](https://sourceforge.net/projects/vjoystick/files/Beta%202.x/2.1.9.1-160719/) or [v2.2.1](https://github.com/njz3/vJoy/releases/tag/v2.2.1.1)), you need to also download the `SDK.zip` file. Copy and replace the corresponding `vJoyInterface.dll` and `vJoyInterfaceWrap.dll` from the sdk folder (`SDK\\c#\\x86` in the zip file) to the extracted folder (where `MIDIvJoy.exe` is located).\n\n## Usage\n\nThis program listens for MIDI controller inputs and maps them to vJoy joystick inputs. It will automatically detect any connected MIDI controllers and enabled vJoy devices.\n\nJust move the fader/knob/button on your MIDI controller and the program will catch and list them in the `Unassigned` list. You can then map the detected MIDI event to a vJoy action by clicking on it and editing the properties in the popup window.\n\n![Screenshot](./docs/images/ui1.png)\n\nThere are two basic types of joystick actions: `Axis` and `Button`.\n\nFor the axis, you can change the range of the MIDI event by setting the minimum and maximum values. The action will be activated when the MIDI event value is within the *trigger range*, while the position of the joystick axis will be calculated based on the *full range*.\nThat is,\n\n$$\\textrm{axis percentage} = \\begin{cases} {\\rm max}\\ \\left(0,\\ \\ {\\rm min}\\ \\left(1,\\ \\ \\dfrac{{\\rm value} - {\\rm full}\\_{\\rm min}}{{\\rm full}\\_{\\rm max} - {\\rm full}\\_{\\rm min}} \\right)\\right) \u0026 \\textrm{if }\\ {\\rm trigger}\\_{\\rm min} \\leq {\\rm value} \\leq {\\rm trigger}\\_{\\rm max} \\\\\\\\ {\\rm unchanged} \u0026 \\textrm{otherwise} \\end{cases}$$\n\nIt is possible to assign multiple joystick actions to a single MIDI event with different trigger ranges (but do not overlap).\nYou can tweak these ranges to get the desired sensitivity and dead zone.\n\n![Screenshot Axis](./docs/images/ui2.png)\n\nFor buttons, you can set the button number and whether the button is pressed or released. If you use the `Auto` option, the program will automatically set the value - released if the value is equal or smaller than the minimum value in *full range*, pressed if greater. That is,\n\n$$\\textrm{button value} = \\begin{cases} {\\rm unchanged} \u0026 \\textrm{if }\\ {\\rm value} \u003c {\\rm trigger}\\_{\\rm min} \\ \\textrm{ or }\\ {\\rm value} \u003e {\\rm trigger}\\_{\\rm max} \\\\\\\\ 0;\\ \\textit{(off)} \u0026 \\textrm{if }\\ {\\rm value} \\leq {\\rm full}\\_{\\rm min} \\\\\\\\ 1;\\ \\textit{(on)} \u0026 \\textrm{if }\\ {\\rm value} \u003e {\\rm full}\\_{\\rm min} \\end{cases}$$\n\n![Screenshot Button](./docs/images/ui3.png)\n\nHowever, for knobs, you need to set two actions separately for clockwise and counterclockwise. This kind of action can only be simulated as continuous button presses now (50 ms on and then 50 ms off). It is possible but does not work well in MSFS to implement knob actions as axis increments/decrements. PRs are welcome if you have a better idea!\n\n![Screenshot Knob](./docs/images/ui4.png)\n\nAfter you have mapped all the MIDI events to vJoy actions, you should engage the vJoy by clicking the respective joystick button at the bottom of the window. The program will start sending the corresponding joystick actions to the vJoy device. You can disable the joystick by clicking the button again.\n\n**Your configuration will be saved and loaded automatically, but you need to engage the joystick manually every time you start the program.**\n\nThere is a simple vJoy monitor that shows the current state of the vJoy devices. You can use this monitor to check if the joystick inputs are working as expected.\n\n![Screenshot Monitor](./docs/images/ui5.png)\n\n## Related Projects\n\n- [Virtual Joystick](https://github.com/njz3/vJoy)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuhac%2Fmidi-controller-joysticks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuhac%2Fmidi-controller-joysticks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuhac%2Fmidi-controller-joysticks/lists"}