Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rtmidi2

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rtmidi2

Python wrapper for RtMidi written in Cython. Allows sending raw messages, multi-port input and sending multiple messages in one call.

  • 1.4.0
  • PyPI
  • Socket score

Maintainers
1

======= rtmidi2

|sh-downloads|

.. |sh-downloads| image:: https://static.pepy.tech/badge/rtmidi2

Python wrapper for RtMidi_, the lightweight, cross-platform MIDI I/O library. For Linux, Mac OS X and Windows.

Based on rtmidi-python, uses rtmidi version 6.0

Installation

pip install rtmidi2

This module is compatible with Python 3 >= 3.9

Documentation

https://rtmidi2.readthedocs.io


Usage Examples

rtmidi2 uses a very similar API as RtMidi

Print all in and out ports


.. code-block:: python

   import rtmidi2
   print(rtmidi2.get_in_ports())
   print(rtmidi2.get_out_ports())


Send messages
~~~~~~~~~~~~~

.. code-block:: python

   import rtmidi2
  
   midi_out = rtmidi2.MidiOut()
   # open the first available port
   midi_out.open_port(0) 
   # send C3 with vel. 100 on channel 1
   midi_out.send_noteon(0, 48, 100)



Get incoming messages - blocking interface

.. code-block:: python

import time
midi_in = rtmidi.MidiIn()
midi_in.open_port(0)

while True:
    message = midi_in.get_message()
    if message:
        print(message, delta_time)
    else:
        time.sleep(0.01)

Get incoming messages using a callback -- non blocking


.. code-block:: python

    def callback(message, time_stamp):
        print(message, time_stamp)

    midi_in = rtmidi2.MidiIn()
    midi_in.callback = callback
    midi_in.open_port(0)


Open multiple ports at once
~~~~~~~~~~~~~~~~~~~~~~~~~~~
   
.. code-block:: python

    # get messages from all available ports
    midi_in = MidiInMulti()
    midi_in.open_ports("*")

    def callback(msg, timestamp):
        msgtype, channel = splitchannel(msg[0])
        print(msgtype2str(msgtype), msg[1], msg[2])

    midi_in.callback = callback


You can also get the device which generated the event by changing your callback to:

.. code-block:: python

    def callback(src, msg, timestamp):
        # src will hold the name of the device
        print("got message from", src)

               
Send multiple notes at once
~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

    # send a cluster of ALL notes with a duration of 1 second
    midi_out = MidiOut()
    midi_out.open_port()
    notes = range(127)
    velocities = [90] * len(notes)
    midi_out.send_noteon_many(0, notes, velocities)
    time.sleep(1)
    midi_out.send_noteon_many(0, notes, [0] * len(notes))


----


License
-------

`rtmidi2` is licensed under the MIT License, see `LICENSE`.

It uses RtMidi, licensed under a modified MIT License, see `RtMidi/RtMidi.h`.


.. _RtMidi: http://www.music.mcgill.ca/~gary/rtmidi/
.. _Cython: http://www.cython.org

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc