Music::Duration::Partition - Partition a musical duration into rhythmic phrases
version 0.0512
use MIDI::Simple; use Music::Duration::Partition; use Music::Scales; my $mdp = Music::Duration::Partition->new( size => 8, pool => [qw/ qn en sn /], weights => [ 0.2, 0.3, 0.5 ], # Optional ); $mdp->pool_select( sub { ... } ); # Optional my $motif = $mdp->motif; my @scale = get_scale_MIDI( 'C', 4, 'major' ); my $score = MIDI::Simple->new_score; for my $n ( 0 .. 31 ) { # 4 loops over the motif $score->n( $motif->[$n % @$motif], $scale[int rand @scale] ); } $score->write_score('motif.mid'); # The size and pool may also be made of MIDI durations $mdp = Music::Duration::Partition->new( size => 100, pool => [qw/ d50 d25 /], );
Music::Duration::Partition partitions a musical duration into rhythmic phrases, given by the size, into smaller durations drawn from the pool of possibly weighted durations.
Music::Duration::Partition
$durations = $mdp->durations;
A hash reference of duration lengths (keyed by duration name).
Default: \%MIDI::Simple::Length
\%MIDI::Simple::Length
$size = $mdp->size;
The value, in quarter notes, of the duration to partition.
Default: 4
4
$pool = $mdp->pool;
The list of possible note durations to use in constructing a rhythmic motif.
Default: [ keys %MIDI::Simple::Length ] (wn, hn, qn, ...)
[ keys %MIDI::Simple::Length ]
This can be either a list of duration names, as in the default example, or duration values, specified with a preceding 'd'. A mixture of both is not well defined. YMMV
$code = $mdp->pool_select->(); $mdp->pool_select( sub { ... } );
A code reference used to select an item from the given duration pool.
Default: Random item from pool
$weights = $mdp->weights;
Specification of the frequency of pool item selection.
The number of weights must equal the number of pool entries. The weights do not have to sum to 1 and can be any relative numbers.
Default: Equal probability for each pool entry
$verbose = $mdp->verbose;
Show the progress of the motif method.
Default: 0
0
$mdp = Music::Duration::Partition->new(%arguments);
Create a new Music::Duration::Partition object.
$motif = $mdp->motif;
Generate a rhythmic phrase of the given size.
This method returns a possibly different rhythmic motif each time it is called.
The default pool_select used constructs this by selecting a pool duration at random, that fits into the size remaining after each application, in a loop until the size is met.
The eg/* and t/01-methods.t programs in this distribution.
List::Util
Math::Random::Discrete
MIDI::Simple
Moo
Gene Boggs <gene@cpan.org>
This software is copyright (c) 2020 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.
To install Music::Duration::Partition, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Music::Duration::Partition
CPAN shell
perl -MCPAN -e shell install Music::Duration::Partition
For more information on module installation, please visit the detailed CPAN module installation guide.