MIDI::RtMidi::FFI - Perl bindings for RtMidi.
version 0.01
use MIDI::RtMidi::FFI ':all'; use MIDI::Event; my $device = rtmidi_out_create( RTMIDI_API_UNIX_JACK, 'perl-jack' ); my $port_count = rtmidi_get_port_count( $device ); my $synth_port = grep { rtmidi_get_port_name( $device, $_ ) =~ /synth/i } 0..($port_count-1); rtmidi_open_port( $device, $synth_port, 'my synth' ); rtmidi_out_send_message( $device, ${ MIDI::Event::encode([[ note_on => 0, 0, 0x40, 0x5a ]], { never_add_eot => 1 }) } );
RtMidi provides a common API for realtime MIDI input/output supporting ALSA, JACK, CoreMIDI and Windows Multimedia.
MIDI::RtMidi::FFI provides a more-or-less direct binding to RtMidi's C Interface. MIDI::RtMidi::FFI should work with v3.0.0, v4.0.0 and possibly later versions of librtmidi.
Check out MIDI::RtMidi::FFI::Device for an OO interface to this module.
RTMIDI_API_UNSPECIFIED, RTMIDI_API_MACOSX_CORE, RTMIDI_API_LINUX_ALSA, RTMIDI_API_UNIX_JACK, RTMIDI_API_WINDOWS_MM, RTMIDI_API_RTMIDI_DUMMY, RTMIDI_API_NUM
RTMIDI_ERROR_WARNING, RTMIDI_ERROR_DEBUG_WARNING, RTMIDI_ERROR_UNSPECIFIED, RTMIDI_ERROR_NO_DEVICES_FOUND, RTMIDI_ERROR_INVALID_DEVICE, RTMIDI_ERROR_MEMORY_ERROR, RTMIDI_ERROR_INVALID_PARAMETER, RTMIDI_ERROR_INVALID_USE, RTMIDI_ERROR_DRIVER_ERROR, RTMIDI_ERROR_SYSTEM_ERROR, RTMIDI_ERROR_THREAD_ERROR
rtmidi_get_compiled_api( $return_apis ); rtmidi_get_compiled_api( 1 );
Returns available APIs.
Pass a true value to return an array ref of available APIs as RT_API constants, otherwise a count of available APIs is returned.
rtmidi_api_display_name( $api );
From v4.0.0. Returns the associated display name for a RTMIDI_API constant.
rtmidi_api_name( $api );
From v4.0.0. Returns the associated name for a given RTMIDI_API constant.
rtmidi_compiled_api_by_name( $name );
From v4.0.0. Returns the associated RTMIDI_API constant for a given name.
rtmidi_open_port( $device, $port, $name );
Open a MIDI port.
rtmidi_open_virtual_port( $device, $name );
Creates a virtual MIDI port to which other software applications can connect.
rtmidi_close_port( $device );
Close a MIDI connection.
rtmidi_get_port_count( $device );
Return the number of available MIDI ports.
rtmidi_get_port_name( $device, $port );
Return the name for the specified MIDI input port number.
rtmidi_in_create_default();
Create a default MIDI in device with no initial values.
rtmidi_in_create( $api, $name, $queuesize );
Create a MIDI in device with initial values.
rtmidi_in_free( $device );
Free the given MIDI in device.
rtmidi_in_get_current_api( $device );
Return the RTMIDI_API constant for the given device.
rtmidi_in_set_callback( $device, $coderef, $data );
Set a callback function to be invoked for incoming MIDI messages.
Your callback receives the timestamp of the event, the message and the data you set while defining the callback. Due to the way params are packed, this data can only be a simple scalar, not a reference.
NB This is not recommended in the current implementation. If a message arrives while the callback is already running, your program will segfault!
rtmidi_in_cancel_callback( $device );
Cancel use of the current callback function (if one exists).
rtmidi_in_ignore_types( $device, $ignore_sysex, $ignore_timing, $ignore_sensing );
Specify whether certain MIDI message types should be queued or ignored during input.
rtmidi_out_create_default();
Create a default MIDI out device with no initial values.
rtmidi_out_create( $api, $name );
Create a MIDI out device with initial values.
rtmidi_out_free( $device );
Free the given MIDI out device.
rtmidi_out_get_current_api( $device );
rtmidi_out_send_message( $device, $message );
Send a single message out an open MIDI output port.
RtMidi
MIDI::RtMidi::FFI::Device
MIDI::ALSA
Win32API::MIDI
Mac::CoreMIDI
MIDI::Music
MIDI::Realtime
John Barrett, <john@jbrt.org>
https://github.com/jbarrett/MIDI-RtMidi-FFI
All comments and contributions welcome.
Please direct all requests to https://github.com/jbarrett/MIDI-RtMidi-FFI/issues
Copyright 2019 John Barrett.
This application is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install MIDI::RtMidi::FFI, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MIDI::RtMidi::FFI
CPAN shell
perl -MCPAN -e shell install MIDI::RtMidi::FFI
For more information on module installation, please visit the detailed CPAN module installation guide.