NAME
Music::MelodicDevice::Arpeggiation - Apply arpeggiation patterns to groups of notes
VERSION
version 0.0302
SYNOPSIS
use Music::MelodicDevice::Arpeggiation ();
my $arp = Music::MelodicDevice::Arpeggiation->new;
# set a new pattern type
$arp->arp_type('my_type', sub { my ($notes); return [0,2,1] });
# arpeggiate the 'updown' pattern
my $arped = $arp->arp(['C4','E4','G4'], 1, 'updown');
# [['d24', 'C4'],['d24', 'E4'],['d24', 'G4'],['d24', 'E4']]
$arped = $arp->arp([60,64,67], 1, 'updown', 3); # midinums repeated 3 times
DESCRIPTION
Music::MelodicDevice::Arpeggiation
applies arpeggiation patterns to groups of notes that can be used with MIDI-Perl.
ATTRIBUTES
type
$arp->type($type);
$type = $arp->type;
Default: up
Arpeggiation named type.
Known types:
up
down
updown
random
duration
$arp->duration($duration);
$duration = $arp->duration;
Default: 1
(quarter-note)
Duration over which to distribute the arpeggiated pattern of notes.
repeats
$arp->repeats($repeats);
$repeats = $arp->repeats;
Default: 1
Number of times to repeat the arpeggiated pattern of notes.
verbose
$arp->verbose($verbose);
$verbose = $arp->verbose;
Default: 0
Show progress.
METHODS
new
$x = Music::MelodicDevice::Arpeggiation->new(
type => $type,
duration => $duration,
repeats => $repeats,
verbose => $verbose,
);
Create a new Music::MelodicDevice::Arpeggiation
object.
arp
$notes = $arp->arp(\@pitches); # use object defaults
$notes = $arp->arp(\@pitches, $duration);
$notes = $arp->arp(\@pitches, $duration, $type);
$notes = $arp->arp(\@pitches, $duration, $type, $repeats);
Return a list of lists of d#
MIDI-Perl strings with the pitches indexed by the arpeggiated pattern built from the given type
. These MIDI-Perl duration strings are distributed evenly across the given duration
.
arp_type
$all_types = $self->arp_type # get everything
$coderef = $self->arp_type($type); # get the value
$self->arp_type($type, $coderef); # set a new type
For no arguments, return the full hash reference of all arpeggiation types. For a single argument, return the code-reference value of that type, of known. If two arguments are given, add the named type
to the known arpeggiation types with its code-reference value.
Known types and their code-ref values are:
up => sub { my ($notes) = @_; return [ 0 .. $#$notes ] },
down => sub { my ($notes) = @_; return [ reverse(0 .. $#$notes) ] },
updown => sub { my ($notes) = @_; return [ 0 .. $#$notes, reverse(1 .. $#$notes - 1) ] },
random => sub { my ($notes) = @_; return [ map { rand @$notes } @$notes ] },
SEE ALSO
The t/01-methods.t program in this distribution
AUTHOR
Gene Boggs <gene.boggs@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2025 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.