NAME
Test2::Tools::MIDI - test MIDI file contents
SYNOPSIS
use Test2::Tools::MIDI;
open my $fh, '<', 'foo.midi' or die "open 'foo.midi': $!\n";
binmode $fh;
midi_header( $fh, 1, 3, 96 ); # format 1, 3 tracks, 96 tick
...
DESCRIPTION
This module offers functions that test whether MIDI files (or an in-memory string) contain particular MIDI structures and events.
FUNCTIONS
The various midi_* functions are exported by default; the other utility functions are not.
- midi_header file-handle format ntracks division
-
Test for a MIDI header which among other things will have a particular format (
0for a single track,1for multiple tracks, or possibly other values), some number of tracks ntracks, and a particular division (usually a positive number of ticks such as96).A MIDI header is generally followed by some number of tracks (that ideally should agree with ntracks), each of which containing some number of events.
-
Check that there is a MIDI footer event with the given dtime (usually
0) in the file-handle. (The MIDI::Opus module hides the footer in dumps though does parse it.) - midi_note_off file-handle dtime channel pitch velocity
-
Check that there is a MIDI note_off event with the given details in the file-handle. See the MIDI::Event module for more documentation on the fields.
- midi_note_on file-handle dtime channel pitch velocity
-
Check that there is a MIDI note_on event with the given details in the file-handle.
- midi_skip file-handle size
-
Skips over size bytes in the file-handle. Good for any pesky MIDI events that are not (yet?) supported by this module.
- midi_track file-handle length event-callback
-
Test that a MIDI track is of a certain length in bytes. Calls the event-callback to handle any MIDI events in the track; there should be length bytes of events and the file-handle will have been advanced to the first of them.
midi_track( $fh, 64, 0, sub ( $fh, $length ) { # test MIDI events including the track footer here ... } ); - read_vlq file-handle
-
Reads a variable length quantity (VLQ) from the file-handle, or failing that throws an error. VLQ are used for MIDI durations (dtime). The
wtemplate to thepackorunpackfunctions is a more efficient way to convert such quantities, though does not work on a file handle.
BUGS
None known. However, the module is very incomplete.
SEE ALSO
COPYRIGHT AND LICENSE
Copyright 2024 Jeremy Mates
This program is distributed under the (Revised) BSD License: https://opensource.org/licenses/BSD-3-Clause