NAME
Music::Chord::Progression - Create network transition chord progressions
VERSION
version 0.0100
SYNOPSIS
use Music::Chord::Progression;
my $prog = Music::Chord::Progression->new;
my $chords = $prog->generate;
my $chord = $prog->substitution('m'); # m7
DESCRIPTION
Music::Chord::Progression
creates network transition chord progressions.
ATTRIBUTES
max
The maximum number of chords to generate.
Default: 8
net
The network transitions between chords of the progression.
Default:
{ 1 => [qw( 1 2 3 4 5 6 )],
2 => [qw( 3 4 5 )],
3 => [qw( 1 2 4 6 )],
4 => [qw( 1 3 5 6 )],
5 => [qw( 1 4 6 )],
6 => [qw( 1 2 4 5 )] }
Alternative example:
{ 1 => [qw( 1 2 3 4 5 6 )],
2 => [qw( 3 5 )],
3 => [qw( 2 4 6 )],
4 => [qw( 1 2 3 5 )],
5 => [qw( 1 )],
6 => [qw( 2 4 )] }
The keys must start with 1
and end on a number less than or equal to 7
. If you do not wish a scale note, that is located in the middle of the range, to be chosen, include it among the keys, but do not refer to it and do not give it any neighbors.
For example, the chord for the 5th degree of the scale will not be chosen here, because no key refers to it and it has no neighbors:
{ 1 => [qw( 1 2 3 4 6 7)],
2 => [qw( 3 )],
3 => [qw( 2 4 6 )],
4 => [qw( 1 2 3 )],
5 => [],
6 => [qw( 2 4 )],
7 => [qw( 1 4 )] }
chords
The chord name parts of each scale position.
The number of items in this list must be equal and correspond to the number of keys in the net.
Default: [ '', 'm', 'm', '', '', 'm' ]
Here ''
refers to the major chord and 'm'
means minor.
Alternative example:
[ 'M7', 'm7', 'm7', 'M7', '7', 'm7' ]
The different chord names are listed in the source of Music::Chord::Note.
scale_name
The name of the scale.
Default: major
scale_note
The name of the scale starting note.
Default: C
octave
The octave number of the scale.
Default: 4
tonic
Whether to start the progression with the tonic chord or not.
If this is given as 1
the tonic chord starts the progression. If given as 0
a neighbor of the tonic is chosen. If given as -1
a random vertex is chosen.
Default: 1
resolve
Whether to end the progression with the tonic chord or not.
If this is given as 1
the tonic chord ends the progression. If given as 0
a neighbor of the tonic is chosen. If given as -1
a random vertex is chosen.
Default: 1
substitute
Whether to perform jazz chord substitution.
Default: 0
flat
Whether to use flats instead of sharps in the chords or not.
Default: 0
graph
The network transition graph.
Default: Graph::Directed
verbose
Show the progress of the generate method.
METHODS
new
$prog = Music::Chord::Progression->new; # Use the defaults
$prog = Music::Chord::Progression->new( # Override the defaults
max => 4,
net => { 1 => [...], ... },
chords => ['m','','m','m','',''],
scale_name => 'minor',
scale_note => 'A',
octave => 5,
tonic => 0,
resolve => 0,
substitute => 1,
verbose => 1,
);
Create a new Music::Chord::Progression
object.
generate
$chords = $prog->generate;
Generate a new chord progression.
substitution
$substitute = $prog->substitution($chord_name);
Perform a jazz substitution on the given the chord_name.
Rules:
* Any chord can be changed to a dominant
* Any dominant chord can be changed to a 9, 11, or 13
* Any chord can be changed to a chord a tritone away (not implemented)
SEE ALSO
The t/01-methods.t test and eg/* example files
AUTHOR
Gene Boggs <gene@cpan.org>
COPYRIGHT AND LICENSE
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.