{"id":20690296,"url":"https://github.com/ftl/midi2tci","last_synced_at":"2025-04-22T16:57:34.916Z","repository":{"id":57616689,"uuid":"367640797","full_name":"ftl/midi2tci","owner":"ftl","description":"Control ExpertSDR with a MIDI controller","archived":false,"fork":false,"pushed_at":"2023-02-26T10:02:44.000Z","size":157,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T16:51:14.780Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/ftl.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-05-15T13:37:47.000Z","updated_at":"2023-01-24T14:40:21.000Z","dependencies_parsed_at":"2024-06-20T16:30:05.381Z","dependency_job_id":"254a9777-ccfb-433d-9b1d-5ebc1a53d635","html_url":"https://github.com/ftl/midi2tci","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/ftl%2Fmidi2tci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fmidi2tci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fmidi2tci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fmidi2tci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ftl","download_url":"https://codeload.github.com/ftl/midi2tci/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250284375,"owners_count":21405294,"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":[],"created_at":"2024-11-16T23:12:34.011Z","updated_at":"2025-04-22T16:57:34.884Z","avatar_url":"https://github.com/ftl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# midi2tci\n\nmidi2tci allows you to control the ExpertSDR software through the TCI protocol using an USB MIDI device.\n\nThis tool is written in Go on Linux, but it works also on Windows and OSX.\n\n## Usage\n\nTo run the tool you just have to provide the name of your configuration file:\n\n```\n$ midi2tci --config ./example_config.json\n```\n\nThe configuration file contains the mappings of MIDI input controls to TCI commands and all other required settings ([see below](#setup)).\n\n## Setup\n\nPutting together the configuration file is done in two steps: first you need to find out on which MIDI port your device is connected, then you have to find out what channel and key your desired MIDI input controls are using. [example_config.json](./example_config.json) contains an example configuration with all available functions, which are documented also the [wiki](https://github.com/ftl/midi2tci/wiki/Functions).\n\n### Find the MIDI Device\n\nThe tool shows you all available MIDI devices with the `list` command:\n\n```\n$ midi2tci list\n\n2021/08/08 09:55:33 available input devices:\n2021/08/08 09:55:33  0: Midi Through:Midi Through Port-0 14:0\n2021/08/08 09:55:33  1: DJControl Starlight:DJControl Starlight MIDI 1 24:0\n2021/08/08 09:55:33 \n2021/08/08 09:55:33 available output devices:\n2021/08/08 09:55:33  0: Midi Through:Midi Through Port-0 14:0\n2021/08/08 09:55:33  1: DJControl Starlight:DJControl Starlight MIDI 1 24:0\n\n```\n\nHere you can see that my \"DJControl Starlight\" controller is connected on MIDI port 1.\n\n### Find the MIDI Mappings\n\nEach MIDI input control has an individual channel and key setting. To find you the settings of a specific control, you can use the `--trace` parameter:\n\n```\n$ midi2tci --portNumber=1 --trace\n\n2021/08/08 09:59:50 Cannot read configuration file: open ./config.json: no such file or directory\n2021/08/08 09:59:50 Opened DJControl Starlight:DJControl Starlight MIDI 1 24:0 successfully for writing\n2021/08/08 09:59:50 Opened DJControl Starlight:DJControl Starlight MIDI 1 24:0 successfully for reading\n2021/08/08 09:59:51 rx: channel.ControlChange{channel:0x1, controller:0xa, value:0x1}\n```\n\nThe example shows that the control I want to use for VFOA has the setting channel=1 and key=10 (= 0x0a). \n\n```\n2021/08/08 09:59:59 rx: channel.Pitchbend{channel:0x0, value:4304, absValue:0x30d0}\n```\n\nThis example shows a control that send Pitchbend events over MIDI. In this case the key parameter of the mapping needs to be -1 (key=-1).\n\n## Supported Hardware\n\nThe general behavior of MIDI controllers should be independent of the actual hardware that you are using. So any MIDI controller should work in theory. However, the devil lies in the details, and your specific hardware might behave differently. I tested the following hardware:\n\n* Hercules DJControl Starlight\n* Behringer CMD PL-1 (kudos to Elmar/DG7YEO)\n* NumarkDJ2GO2 Touch  \n\nI found some differences in the way that the LED indicators are controlled. Therefor there is the parameter `indicators` in the configuration file, that currently accepts the following values:\n\n* default: the default, based on the behavior of the Hercules DJControl Starlight\n* pl-1: special treatment of LED indicators for rotary encoders as the Behringer CMD PL-1 expects it\n\n## License\n\nThis tool is published under the [MIT License](https://www.tldrlegal.com/l/mit).\n\nCopyright [Florian Thienel](http://thecodingflow.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftl%2Fmidi2tci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fftl%2Fmidi2tci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftl%2Fmidi2tci/lists"}