NAME

Music::Chord::Progression - Create network transition chord progressions

VERSION

version 0.0204

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 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:

{ 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 names 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

Please see "SCALES" in Music::Scales for the allowed scale names.

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 last chord is chosen. If given as -1 a random vertex is chosen.

Default: 1

substitute

Whether to perform jazz chord substitution.

Default: 0

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

sub_cond

The subroutine to execute to determine if a chord substitution should happen.

Default: sub { int rand 4 == 0 } (25% of the time)

flat

Whether to use flats instead of sharps in the generated chords or not.

Default: 0

graph

The network transition graph.

Default: Graph::Directed

verbose

Show the progress of the generate and substitution methods.

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    => -1,
  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.

SEE ALSO

The t/01-methods.t test and eg/* example files

Data::Dumper::Compact

Graph::Directed

Moo

Music::Chord::Note

Music::Scales

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.