{ "info": { "author": "mike wakerly", "author_email": "opensource@hoho.com", "bugtrack_url": null, "classifiers": [], "description": "# pymidi\n\nA python RTP-MIDI / AppleMIDI implementation. You can use this library to build a network attached virtual MIDI device.\n\n[![Build Status](https://travis-ci.org/mik3y/pymidi.svg?branch=master)](https://travis-ci.org/mik3y/pymidi)\n\n**Latest release:** v0.4.0 (2018-12-26) ([changelog](https://github.com/mik3y/pymidi/blob/master/CHANGELOG.md))\n\n\n\n**Table of Contents**\n\n- [Quickstart](#quickstart)\n- [Developer Setup](#developer-setup)\n - [Compatibility](#compatibility)\n - [Running tests](#running-tests)\n - [Developing against something else](#developing-against-something-else)\n- [Demo Server](#demo-server)\n- [Using in Another Project](#using-in-another-project)\n- [Project Status](#project-status)\n- [References and Reading](#references-and-reading)\n\n\n\n## Quickstart\n\n```\n$ pip install pymidi\n```\nor\n\n```\npipenv install pymidi\n```\n\nSee [Using in Another Project](#using-in-another-project) and the [Developer Setup wiki](wiki/Developer-MIDI-Setup) for more information.\n\n## Developer Setup\n\nSet up your workspace with the very excellent [Pipenv](https://pipenv.readthedocs.io/en/latest/):\n\n```\n$ pipenv install\n```\n\nOnce installed, you'll probably find it useful to work in a `pipenv shell`, for ease of testing and running things:\n\n```\n$ pipenv shell\n(pymidi-tFFCbXNj)\n$ python pymidi/server.py\n```\n\n### Compatibility\n\n`pymidi` has been tested against Python 2.7 and Python 3.6.\n\n### Running tests\n\nTests are run with nose; either of the following will work:\n\n```\n$ python setup.py test\n$ nosetests\n```\n\n### Developing against something else\n\nIf you're working on a project that uses `pymidi` and want to develop both concurrently, leverage the setuptools `develop` command:\n\n```\n$ cd ~/git/otherproject\n$ pipenv shell\n$ pushd ~/git/pymidi && python setup.py develop && popd\n```\n\nThis creates a link to `~/git/pymidi` within the environment of `~/git/otherproject`.\n\n## Demo Server\n\nThe library includes a simple demo server which prints stuff.\n\n```\n$ python pymidi/server.py\n```\n\nSee `--help` for usage.\n\n## Using in Another Project\n\nMost likely you will want to embed a server in another project, and respond to MIDI commands in some application specific way. The demo serve is an example of what you need to do.\n\nFirst, create a subclass of `server.Handler` to implement your policy:\n\n```py\nfrom pymidi import server\n\nclass MyHandler(server.handler)\n def on_peer_connected(self, peer):\n print('Peer connected: {}'.format(peer))\n\n def on_peer_disconnected(self, peer):\n print('Peer disconnected: {}'.format(peer))\n\n def on_midi_commands(self, command_list):\n for command in command_list:\n if command.command == 'note_on':\n key = command.params.key\n velocity = command.params.velocity\n print('Someone hit the key {} with velocity {}'.format(key, velocity))\n```\n\nThen install it in a server and start serving:\n\n```\nserver = new Server()\nserver.add_handler(MyHandler())\nserver.serve_forever()\n```\n\nSee the [Developer Setup wiki](wiki/Developer-MIDI-Setup) for ways to test with real devices.\n\n## Project Status\n\nWhat works:\n* Exchange packet parsing\n* Timestamp sync packet parsing\n* Exchange & timestamp sync protocol support\n* MIDI message parsing\n\nNot (yet) implemented:\n* Journal contents parsing\n* Verification of peers on the data channel\n* Auto-disconnect peers that stop synchronizing clocks\n\n## References and Reading\n\n* Official docs\n - [RFC 6295: RTP Payload Format for MIDI](https://tools.ietf.org/html/rfc6295)\n - [AppleMIDI Reference Documentation from Apple](https://developer.apple.com/library/archive/documentation/Audio/Conceptual/MIDINetworkDriverProtocol/MIDI/MIDI.html)\n - [RTP-MIDI on Wikipedia](https://en.wikipedia.org/wiki/RTP-MIDI)\n* Other helpful docs/sites\n - [The MIDI Specification](http://midi.teragonaudio.com/tech/midispec.htm)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mik3y/pymidi", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pymidi", "package_url": "https://pypi.org/project/pymidi/", "platform": "", "project_url": "https://pypi.org/project/pymidi/", "project_urls": { "Homepage": "https://github.com/mik3y/pymidi" }, "release_url": "https://pypi.org/project/pymidi/0.4.0/", "requires_dist": null, "requires_python": "", "summary": "Python RTP-MIDI / AppleMIDI driver", "version": "0.4.0" }, "last_serial": 4635915, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fc9b201c2035b7c8e9c1173babd414a0", "sha256": "622f64fa8d72cde974916cd5d594867c52779ec11f40432c5714bf78ab7d8e65" }, "downloads": -1, "filename": "pymidi-0.1.0.tar.gz", "has_sig": false, "md5_digest": "fc9b201c2035b7c8e9c1173babd414a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8203, "upload_time": "2018-09-16T23:43:41", "url": "https://files.pythonhosted.org/packages/9b/ba/c78bc89b7a339c23335cc619c821fda672f1e69fb66d7ffa19a65d0bf844/pymidi-0.1.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "cae9e13f4dd7724c4d931e0608109c0b", "sha256": "79bc6d8ebb115c67811326c7ea44a1e45d96068d77cf52af2325b27a5bb63078" }, "downloads": -1, "filename": "pymidi-0.2.1.tar.gz", "has_sig": false, "md5_digest": "cae9e13f4dd7724c4d931e0608109c0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11008, "upload_time": "2018-09-17T03:29:39", "url": "https://files.pythonhosted.org/packages/45/85/355da3c85f3ea44b74e9f9d71695184d99573964d8e63e2d68491351e712/pymidi-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2f5cea08fb5c99245dcf45706095d4e1", "sha256": "80537181710a2a5a967984e5ec763345d24f15b34c31405c33e55da8e256333a" }, "downloads": -1, "filename": "pymidi-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2f5cea08fb5c99245dcf45706095d4e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11196, "upload_time": "2018-10-20T22:56:15", "url": "https://files.pythonhosted.org/packages/3b/fc/da425d521e4daca306960eb6cb47a17c6e23443a06fc30fc941c6153e331/pymidi-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "56c88ab3fb886d652ffda310c38fb634", "sha256": "b1b05970ea67aabb9f04b88373929041926906d06f9f84c26dedf9608979365c" }, "downloads": -1, "filename": "pymidi-0.4.0.tar.gz", "has_sig": false, "md5_digest": "56c88ab3fb886d652ffda310c38fb634", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12682, "upload_time": "2018-12-26T19:09:11", "url": "https://files.pythonhosted.org/packages/4f/bc/8599287347bc3228738074d80bb15c6cd62b7d48bf12812c5419a49b716a/pymidi-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "56c88ab3fb886d652ffda310c38fb634", "sha256": "b1b05970ea67aabb9f04b88373929041926906d06f9f84c26dedf9608979365c" }, "downloads": -1, "filename": "pymidi-0.4.0.tar.gz", "has_sig": false, "md5_digest": "56c88ab3fb886d652ffda310c38fb634", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12682, "upload_time": "2018-12-26T19:09:11", "url": "https://files.pythonhosted.org/packages/4f/bc/8599287347bc3228738074d80bb15c6cd62b7d48bf12812c5419a49b716a/pymidi-0.4.0.tar.gz" } ] }