{"id":13418381,"url":"https://github.com/gbevin/ReceiveMIDI","last_synced_at":"2025-03-15T03:31:06.791Z","repository":{"id":40267300,"uuid":"83163131","full_name":"gbevin/ReceiveMIDI","owner":"gbevin","description":"Multi-platform command-line tool to monitor and receive MIDI messages","archived":false,"fork":false,"pushed_at":"2024-10-16T03:18:22.000Z","size":3954,"stargazers_count":309,"open_issues_count":2,"forks_count":23,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-10-18T14:49:03.018Z","etag":null,"topics":["command-line","command-line-tool","midi","midi-messages"],"latest_commit_sha":null,"homepage":"https://uwyn.com","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/gbevin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.md","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":"2017-02-25T21:12:37.000Z","updated_at":"2024-10-17T22:43:12.000Z","dependencies_parsed_at":"2024-01-11T01:19:26.073Z","dependency_job_id":"7a531e05-a5ce-464c-b140-182e247da76f","html_url":"https://github.com/gbevin/ReceiveMIDI","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbevin%2FReceiveMIDI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbevin%2FReceiveMIDI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbevin%2FReceiveMIDI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbevin%2FReceiveMIDI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gbevin","download_url":"https://codeload.github.com/gbevin/ReceiveMIDI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243681024,"owners_count":20330152,"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":["command-line","command-line-tool","midi","midi-messages"],"created_at":"2024-07-30T22:01:01.641Z","updated_at":"2025-03-15T03:31:04.587Z","avatar_url":"https://github.com/gbevin.png","language":"C++","funding_links":[],"categories":["C++","Midi"],"sub_categories":[],"readme":"# ReceiveMIDI\n\nReceiveMIDI is a multi-platform command-line tool makes it very easy to quickly receive and monitor MIDI messages from MIDI devices on your computer.\n\nAll the heavy lifting is done by the wonderful JUCE library.\n\nThe project website is https://github.com/gbevin/ReceiveMIDI\n\n## Community\n\nJoin the Forums: https://forum.uwyn.com\n\nChat on Discord: https://discord.gg/sKM6pE575y\n\n## Purpose\nThis tool is mainly intended for quickly monitoring the messages that are sent to your computer from a particular MIDI device. By providing filter commands, it's possible to only focus on particular MIDI messages.\n\nHere's a tutorial video about both SendMIDI and ReceiveMIDI, including some tips and tricks of how to use the command-line on macOS:\n\n\u003ca href=\"https://www.youtube.com/watch?v=_o1kg0IbetY\" target=\"_blank\"\u003e\u003cimg src=\"https://i.ytimg.com/vi/_o1kg0IbetY/maxresdefault.jpg\" alt=\"Tutorial Video\" width=\"640\" border=\"2\" /\u003e\u003c/a\u003e\n\n## ShowMIDI\n\nIf you're looking for a beautiful GUI to effortlessly visualize MIDI activity without having to wade through log files, please take a look at my other tool ShowMIDI:\nhttps://github.com/gbevin/ShowMIDI\n\n\u003cp\u003e\u003ca href=\"https://github.com/gbevin/ShowMIDI\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/gbevin/ShowMIDI/main/Design/showmidi-0.5.0.png\" width=\"480\" border=\"0\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n## Download\n\nYou can download pre-built ReceiveMIDI binaries from the release section:\nhttps://github.com/gbevin/ReceiveMIDI/releases\n\nSince ReceiveMIDI is free and open-source, you can also easily build it yourself. Just take a look into the Builds directory when you download the sources.\n\nIf you're using the macOS Homebrew package manager, you can install ReceiveMIDI with:\n```\nbrew install gbevin/tools/receivemidi\n```\n\n## Usage\nTo use it, simply type \"receivemidi\" or \"receivemidi.exe\" on the command line and follow it with a series of commands that you want to execute. These commands have purposefully been chosen to be concise and easy to remember, so that it's extremely fast and intuitive to quickly receive or monitor MIDI messages.\n\nThese are all the supported commands:\n```\n  dev   name       Set the name of the MIDI input port\n  virt  (name)     Use virtual MIDI port with optional name (Linux/macOS)\n  pass  name       Set name of MIDI output port for MIDI pass-through\n  list             Lists the MIDI input ports\n  file  path       Loads commands from the specified program file\n  dec              Interpret the next numbers as decimals by default\n  hex              Interpret the next numbers as hexadecimals by default\n  ch    number     Set MIDI channel for the commands (0-16), defaults to 0\n  ts               Output a timestamp for each received MIDI message\n  nn               Output notes as numbers instead of names\n  omc   number     Set octave for middle C, defaults to 3\n  voice            Show all Channel Voice messages\n  note             Show all Note messages\n  on    (note)     Show Note On, optionally for note (0-127)\n  off   (note)     Show Note Off, optionally for note (0-127)\n  pp    (note)     Show Poly Pressure, optionally for note (0-127)\n  cc    (number)   Show Control Change, optionally for controller (0-127)\n  cc14  (number)   Show 14-bit CC, optionally for controller (0-63)\n  nrpn  (number)   Show NRPN, optionally for parameter (0-16383)\n  nrpnf (number)   Show full NRPN (MSB+LSB), optionally for parameter (0-16383)\n  rpn   (number)   Show RPN, optionally for parameter (0-16383)\n  rpnf  (number)   Show full RPN (MSB+LSB), optionally for parameter (0-16383)\n  pc    (number)   Show Program Change, optionally for program (0-127)\n  cp               Show Channel Pressure\n  pb               Show Pitch Bend\n  sr               Show all System Real-Time messages\n  clock            Show Timing Clock\n  start            Show Start\n  stop             Show Stop\n  cont             Show Continue\n  as               Show Active Sensing\n  rst              Show Reset\n  sc               Show all System Common messages\n  syx              Show System Exclusive\n  syf   path       Store SysEx into a .syx file\n  tc               Show MIDI Time Code Quarter Frame\n  spp              Show Song Position Pointer\n  ss               Show Song Select\n  tun              Show Tune Request\n  q                Don't show the received messages on standard output\n  dump             Dump the received messages 1:1 on standard output\n  js    code       Execute this script for each received MIDI message\n  jsf   path       Execute the script in this file for each message\n  mpp   name       Configure responder MPE Profile creating virtual MIDI input\n        manager    and output ports with the provided name, available manager\n        members    channel (1-15 or 0 for any) and desired member channel\n                   count (1-15, or 0 for any) (Linux/macOS)\n  mcr   flag       Sets MPE Profile channel response feature (0-1)\n  mpb   flag       Sets MPE Profile pitch bend feature (0-1)\n  mcp   flag       Sets MPE Profile channel pressure feature (0-2)\n  m3d   flag       Sets MPE Profile 3rd dimension feature (0-2)\n  -h  or  --help   Print Help (this message) and exit\n  --version        Print version information and exit\n  --               Read commands from standard input until it's closed\n```\n\nAlternatively, you can use the following long versions of the commands:\n```\n  device virtual pass-through decimal hexadecimal channel timestamp\n  note-numbers octave-middle-c note-on note-off poly-pressure control-change\n  control-change-14 nrpn-full rpn-full program-change channel-pressure\n  pitch-bend system-realtime continue active-sensing reset system-common\n  system-exclusive system-exclusive-file time-code song-position song-select\n  tune-request quiet javascript javascript-file mpe-profile mpe-channel-reponse\n  mpe-pitch-bend mpe-channel-pressure mpe-3rd-dimension\n```\n\nBy default, numbers are interpreted in the decimal system, this can be changed to hexadecimal by sending the \"hex\" command.\nAdditionally, by suffixing a number with \"M\" or \"H\", it will be interpreted as a decimal or hexadecimal respectively.\n\nThe MIDI device name doesn't have to be an exact match.\nIf ReceiveMIDI can't find the exact name that was specified, it will pick the first MIDI output port that contains the provided text, irrespective of case.\n\nWhere notes can be provided as arguments, they can also be written as note names, by default from C-2 to G8 which corresponds to note numbers 0 to 127. By setting the octave for middle C, the note name range can be changed. Sharps can be added by using the \"#\" symbol after the note letter, and flats by using the letter \"b\".\n\nFor details on how to use the \"javascript\" and \"javascript-file\" commands, please refer to the JAVASCRIPT.md documentation file.\n\n## Examples\n  \nHere are a few examples to get you started:\n\nList all the available MIDI output ports on your system\n\n```\nreceivemidi list\n```\n\nReceive all the MIDI messages coming from LinnStrument:\n\n```\nreceivemidi dev \"LinnStrument MIDI\"\n```\n\nReceive only notes coming from LinnStrument:\n\n```\nreceivemidi dev \"LinnStrument MIDI\" note\n```\n\nReceive all voice messages coming from LinnStrument, and also MIDI clock start and stop, all displayed with a timestamp:\n\n```\nreceivemidi dev \"LinnStrument MIDI\" ts voice start stop\n```\n\nReceive all messages from LinnStrument and pipe them to the SendMIDI tool in order to forward them to Bidule:\n\n```\nreceivemidi dev linnstrument | sendmidi dev \"Bidule  1\" --\n```\n\nReceive all messages from LinnStrument.\nThrough the JavaScript feature, each note on will execute the `test.sh` command with the note number as argument.\n\n```\nreceivemidi dev linnstrument\n  js \"if (MIDI.isNoteOn()) Util.command('/path/to/test.sh ' + MIDI.noteNumber());\"\n```\n\nReceive all messages from LinnStrument and don't print them out.\nThrough the JavaScript feature, each note on message will send an OSC message to 127.0.0.1:12800.\n\n```\nreceivemidi dev linnstrument quiet\n  javascript \"if (MIDI.isNoteOn()) OSC.connect('127.0.0.1', 12800).send('/note-on', MIDI.noteNumber());\"\n```\n\n## Text File Format\n\nThe text file that can be read through the \"file\" command can contain a list of commands and options, just like when you would have written them manually on the console (without the \"sendmidi\" executable). You can insert new lines instead of spaces and any line that starts with a hash (#) character is a comment.\n\nFor instance, this is a text file for one of the examples above:\n```\ndev \"LinnStrument MIDI\"\n# timestamp the output\nts\n# show all voice messages\nvoice\n# show MIDI clock start and stop\nstart stop\n```\n\n## Building on Linux\n\nTo build ReceiveMIDI on Linux you need a minimal set of packages installed beforehand, on Ubuntu this can be done with:\n\n```\nsudo apt install build-essential pkg-config libasound2-dev\n```\n\nAfter that, go to the `LinuxMakeFile` directory\n\n```\ncd Builds/LinuxMakeFile\n```\n\nand build the binary by typing `make`\n\n```\nmake\n```\n\nThe resulting binary will be in the `Build/LinuxMakeFile/build` directory and can be moved anywhere appropriate on your system, for instance into `/usr/local/bin`:\n\n```\nsudo mv build/receivemidi /usr/local/bin\n```\n\n## SendMIDI compatibility\n\nThe output of the ReceiveMIDI tool is compatible with the SendMIDI tool, allowing you to store MIDI message sequences and play them back later. By using Unix-style pipes on the command-line, it's even possible to chain the receivemidi and sendmidi commands in order to forward MIDI messages.\n\nIf you changed the octave for middle C or are outputting hexadecimal numbers instead of the default decimal numbers, make sure that you set up SendMIDI with the same parameters.\n\nSendMIDI can be downloaded from https://github.com/gbevin/SendMIDI\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbevin%2FReceiveMIDI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgbevin%2FReceiveMIDI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbevin%2FReceiveMIDI/lists"}