Metadata-Version: 2.1
Name: rtmidi2
Version: 1.4.0
Summary: Python wrapper for RtMidi written in Cython. Allows sending raw messages, multi-port input and sending multiple messages in one call.
Home-page: https://github.com/gesellkammer/rtmidi2
Author: originally by Guido Lorenz, modified by Eduardo Moguillansky
Author-email: eduardo.moguillansky@gmail.com
License: MIT
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Cython
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
License-File: LICENSE

=======
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
