Skip to main content

Python RTP-MIDI / AppleMIDI driver

Project description

pymidi

A python RTP-MIDI / AppleMIDI implementation. You can use this library to build a network attached virtual MIDI device.

Build Status

Latest release: v0.4.0 (2018-12-26) (changelog)

Table of Contents

Quickstart

$ pip install pymidi

or

pipenv install pymidi

See Using in Another Project and the Developer Setup wiki for more information.

Developer Setup

Set up your workspace with the very excellent Pipenv:

$ pipenv install

Once installed, you'll probably find it useful to work in a pipenv shell, for ease of testing and running things:

$ pipenv shell
(pymidi-tFFCbXNj)
$ python pymidi/server.py

Compatibility

pymidi has been tested against Python 2.7 and Python 3.6.

Running tests

Tests are run with nose; either of the following will work:

$ python setup.py test
$ nosetests

Developing against something else

If you're working on a project that uses pymidi and want to develop both concurrently, leverage the setuptools develop command:

$ cd ~/git/otherproject
$ pipenv shell
$ pushd ~/git/pymidi && python setup.py develop && popd

This creates a link to ~/git/pymidi within the environment of ~/git/otherproject.

Demo Server

The library includes a simple demo server which prints stuff.

$ python pymidi/server.py

See --help for usage.

Using in Another Project

Most 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.

First, create a subclass of server.Handler to implement your policy:

from pymidi import server

class MyHandler(server.handler)
    def on_peer_connected(self, peer):
        print('Peer connected: {}'.format(peer))

    def on_peer_disconnected(self, peer):
        print('Peer disconnected: {}'.format(peer))

    def on_midi_commands(self, command_list):
        for command in command_list:
            if command.command == 'note_on':
                key = command.params.key
                velocity = command.params.velocity
                print('Someone hit the key {} with velocity {}'.format(key, velocity))

Then install it in a server and start serving:

server = new Server()
server.add_handler(MyHandler())
server.serve_forever()

See the Developer Setup wiki for ways to test with real devices.

Project Status

What works:

  • Exchange packet parsing
  • Timestamp sync packet parsing
  • Exchange & timestamp sync protocol support
  • MIDI message parsing

Not (yet) implemented:

  • Journal contents parsing
  • Verification of peers on the data channel
  • Auto-disconnect peers that stop synchronizing clocks

References and Reading

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymidi-0.4.0.tar.gz (12.7 kB view details)

Uploaded Source

File details

Details for the file pymidi-0.4.0.tar.gz.

File metadata

  • Download URL: pymidi-0.4.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for pymidi-0.4.0.tar.gz
Algorithm Hash digest
SHA256 b1b05970ea67aabb9f04b88373929041926906d06f9f84c26dedf9608979365c
MD5 56c88ab3fb886d652ffda310c38fb634
BLAKE2b-256 4fbc8599287347bc3228738074d80bb15c6cd62b7d48bf12812c5419a49b716a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page