Skip to main content

Python interface for ALSA MIDI sequencer

Project description

This project provides Python interface to ALSA sequencer API.

Features

  • Pythonic API to most of the ALSA sequencer functionality

  • Access to ALSA sequencer features not available when using other (‘portable’) Python MIDI libraries:

    • Precise timestamping of messages sent and received

    • Port connection management, including connection between ports on different clients

    • Access to non-MIDI events, like announcements about new clients, ports and connections

  • Python 3.7 – 3.11 compatibility

  • Both synchronous (blocking) and asynchronous (asyncio) I/O

  • Only Python code, no need to compile a binary module. Requires cffi, though.

  • MIDO backend provided

Installation

This package requires ALSA library to be installed (libasound.so.2 – ‘libasound2’ package on Debian-like systems). On a typical Linux system it is probably already installed for some other audio or MIDI software.

python-alsa-midi package may be installed with pip:

python3 -m pip install alsa-midi

This should normally install a binary wheel compiled on a compatible system or pure-python wheel working without compilation.

If no compatible wheel is found build from source package will be triggered, which will also require ALSA library development files (libasound2-dev).

To force installing from source (and compiling the binary extension) use:

python3 -m pip install --no-binary=alsa-midi alsa-midi

To force installing from source without compiling the extension:

PY_ALSA_MIDI_NO_COMPILE=1 python3 -m pip install --no-binary=alsa-midi alsa-midi

Alternatively one can just add the source directory (as checked out from https://github.com/Jajcus/python-alsa-midi.git) to $PYTHONPATH and use the packages directly, with no compilation.

Usage

Detailed documentation is available at https://python-alsa-midi.readthedocs.io/

Simple example:

import time
from alsa_midi import SequencerClient, READ_PORT, NoteOnEvent, NoteOffEvent

client = SequencerClient("my client")
port = client.create_port("output", caps=READ_PORT)
dest_port = client.list_ports(output=True)[0]
port.connect_to(dest_port)
event1 = NoteOnEvent(note=60, velocity=64, channel=0)
client.event_output(event1)
client.drain_output()
time.sleep(1)
event2 = NoteOffEvent(note=60, channel=0)
client.event_output(event2)
client.drain_output()

Using with MIDO

python-alsa-midi can be used as a MIDO back-end too:

export MIDO_BACKEND=alsa_midi.MIDO_BACKEND
mido/examples/midifiles/play_midi_file.py file.mid

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

alsa-midi-1.0.2.tar.gz (299.2 kB view hashes)

Uploaded Source

Built Distributions

alsa_midi-1.0.2-py3-none-any.whl (43.1 kB view hashes)

Uploaded Python 3

alsa_midi-1.0.2-cp311-cp311-manylinux_2_28_x86_64.whl (395.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

alsa_midi-1.0.2-cp311-cp311-manylinux_2_17_x86_64.whl (395.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

alsa_midi-1.0.2-cp311-cp311-manylinux_2_17_i686.whl (354.2 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

alsa_midi-1.0.2-cp310-cp310-manylinux_2_28_x86_64.whl (396.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

alsa_midi-1.0.2-cp310-cp310-manylinux_2_17_x86_64.whl (395.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

alsa_midi-1.0.2-cp310-cp310-manylinux_2_17_i686.whl (354.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

alsa_midi-1.0.2-cp310-cp310-manylinux_2_12_x86_64.whl (372.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

alsa_midi-1.0.2-cp310-cp310-manylinux_2_12_i686.whl (320.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

alsa_midi-1.0.2-cp39-cp39-manylinux_2_28_x86_64.whl (395.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

alsa_midi-1.0.2-cp39-cp39-manylinux_2_17_x86_64.whl (395.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

alsa_midi-1.0.2-cp39-cp39-manylinux_2_17_i686.whl (354.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

alsa_midi-1.0.2-cp39-cp39-manylinux_2_12_x86_64.whl (373.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

alsa_midi-1.0.2-cp39-cp39-manylinux_2_12_i686.whl (320.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

alsa_midi-1.0.2-cp38-cp38-manylinux_2_28_x86_64.whl (396.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

alsa_midi-1.0.2-cp38-cp38-manylinux_2_17_x86_64.whl (395.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

alsa_midi-1.0.2-cp38-cp38-manylinux_2_17_i686.whl (354.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

alsa_midi-1.0.2-cp38-cp38-manylinux_2_12_x86_64.whl (373.6 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

alsa_midi-1.0.2-cp38-cp38-manylinux_2_12_i686.whl (320.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

alsa_midi-1.0.2-cp37-cp37m-manylinux_2_28_x86_64.whl (393.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.28+ x86-64

alsa_midi-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.whl (392.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

alsa_midi-1.0.2-cp37-cp37m-manylinux_2_17_i686.whl (351.7 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

alsa_midi-1.0.2-cp37-cp37m-manylinux_2_12_x86_64.whl (370.3 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

alsa_midi-1.0.2-cp37-cp37m-manylinux_2_12_i686.whl (318.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

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