NAME
MIDI::Ngram - Find the top repeated note phrases of a MIDI file
VERSION
version 0.08
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 MIDI file and finds the top repeated note phrases.
ATTRIBUTES
in_file
Required. The MIDI file 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
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.