NAME

MIDI::Util - MIDI Utilities

VERSION

version 0.1101

SYNOPSIS

use MIDI::Util qw(midi_dump midi_format set_chan_patch set_time_signature setup_score);

my $dump = midi_dump('volume'); # length, etc.
print Dumper $dump;

my $size = dura_size('dqn'); # 1.5

my $score = setup_score( bpm => 120, etc => '...', );

my $ticks = ticks($score);
my $half = 'd' . ( $size / 2 * $ticks );

set_time_signature( $score, '5/4' );

set_chan_patch( $score, 0, 1 );

my @notes = midi_format('C','C#','Db','D'); # C, Cs, Df, D

$score->n( $half, @notes );      # MIDI::Simple functionality
$score->write_score('some.mid'); # "

DESCRIPTION

MIDI::Util comprises handy MIDI utilities.

Nothing is exported by default.

FUNCTIONS

setup_score

$score = setup_score;  # Use defaults

$score = setup_score(  # Override defaults
  lead_in   => $beats,
  volume    => $volume,
  bpm       => $bpm,
  channel   => $channel,
  patch     => $patch,
  octave    => $octave,
  signature => $signature,
);

Set basic MIDI parameters and return a MIDI::Simple object. If given a lead_in, play a hi-hat for that many beats. Do not include a lead_in by passing 0 as its value.

Named parameters and defaults:

lead_in:   4
volume:    120
bpm:       100
channel:   0
patch:     0
octave:    4
signature: 4/4

set_chan_patch

set_chan_patch( $score, $channel );  # Just set the channel

set_chan_patch( $score, $channel, $patch );

Set the MIDI channel and patch.

Positional parameters and defaults:

score:   undef (required)
channel: 0
patch:   undef

midi_dump

$dump = midi_dump($name);

Return a hash or array reference of the following MIDI, MIDI::Simple, and MIDI::Event internal lists:

Hashes:
  Volume
  Length
  TICKS
  Note
  note2number
  number2note
  patch2number
  number2patch
  notenum2percussion
  percussion2notenum
Arrays:
  All_events
  MIDI_events
  Meta_events
  Text_events
  Nontext_meta_events

reverse_dump

$by_value = reverse_dump($name);
$by_value = reverse_dump($name, $precision); # for name = length

Return the reversed hashref from the midi_dump routine hashes section.

midi_format

@formatted = midi_format(@notes);

Change sharp # and flat b, in the list of named notes, to the MIDI::Simple s and f respectively.

Also change accidentals and double-accidentals into their note equivalents, e.g. Cb to B, C## to D, etc.

set_time_signature

set_time_signature( $score, $signature );

Set the score time_signature based on the given string.

dura_size

$size = dura_size($duration);
$size = dura_size($duration, $ppqn);

Return the duration size based on the MIDI::Simple Length value (e.g. hn, ten) or number of ticks (if given as d###).

If a ppqn value is not given, we use the MIDI::Simple value of 96 ticks.

ticks

$ticks = ticks($score);

Return the score ticks.

SEE ALSO

The t/01-functions.t test file and eg/* in this distribution

Exporter

MIDI

MIDI::Simple

Music::Tempo

AUTHOR

Gene Boggs <gene@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2022 by Gene Boggs.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.