NAME

MIDI::Ngram - Find the top repeated note phrases of a MIDI file

VERSION

version 0.0901

SYNOPSIS

use MIDI::Ngram;
my $mng = MIDI::Ngram->new(
  in_file      => [ 'eg/twinkle_twinkle.mid' ],
  ngram_size   => 3,
  patches      => [qw( 68 69 70 71 72 73 )],
  random_patch => 1,
  gestalt      => 1,
);
my $analysis = $mng->process;
my $playback = $mng->populate;
$mng->write;

DESCRIPTION

MIDI::Ngram parses a given list of MIDI files and finds the top repeated note phrases.

ATTRIBUTES

in_file

Required. An ArrayRef of MIDI files to process.

ngram_size

Ngram phrase size. Default: 2

max_phrases

The maximum number of phrases to play. Default: 10

bpm

Beats per minute. Default: 100

durations

The note durations to choose from (at random). Default: [qn tqn]

patches

The patches to choose from (at random) if given the random_patch option. Otherwise 0 (piano) is used. Default: [0 .. 127]

out_file

MIDI output file. Default: midi-ngram.mid

pause_duration

Insert a rest of the given duration after each phrase. Default: '' (no resting)

analyze

ArrayRef of the channels to analyze. If not given, all channels are analyzed.

loop

The number of times to choose a weighted phrase. * Only works with the weight option. Default: 4

weight

Boolean. Play phrases by their ngram repetition occurrence. Default: 0

random_patch

Boolean. Choose a random patch from patches for each channel. Default: 0 (piano)

shuffle_phrases

Boolean. Shuffle the non-weighted phrases before playing them. Default: 0

single_phrases

Boolean. Allow single occurrence ngrams. Default: 0

one_channel

Boolean. Accumulate phrases into a single list. Default: 0

gestalt

Boolean. Include pitch range in the analysis.

score

The MIDI score object. Constructed at runtime. Constructor argument if given will be ignored.

notes

The bucket of ngrams. Constructed at runtime. Constructor argument if given will be ignored.

METHODS

new()

$mng = MIDI::Ngram->new(%arguments);

Create a new MIDI::Ngram object.

process()

my $analysis = $mng->process;

Find all ngram phrases and return the note analysis.

populate()

my $playback = $mng->populate;

Add notes to the MIDI score and return the playback notes.

write()

$mng->write;

Write out the MIDI file.

TO DO

Preserve note durations instead of random assignment.

SEE ALSO

Moo

Lingua::EN::Ngram

List::Util

List::Util::WeightedChoice

Music::Note

MIDI::Simple

Music::Tempo

Music::Gestalt

AUTHOR

Gene Boggs <gene@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 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.