The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Music::ModalFunction - Inspect Musical Modal Functions

VERSION

version 0.0307

SYNOPSIS

  use Music::ModalFunction ();

  # What mode(s) have a Dmaj dominant chord?
  my $m = Music::ModalFunction->new(
    chord_note   => 'd',
    chord        => 'maj',
    key_function => 'dominant',
  );
  my $q = $m->chord_key;
  # [['chord_key','d','maj','g','ionian','dominant','r_V'],
  #  ['chord_key','d','maj','g','lydian','dominant','r_V']]

  # In what mode(s) can a Gmaj chord function as a subdominant pivot chord?
  $m = Music::ModalFunction->new(
    chord_note   => 'g',
    chord        => 'maj',
    mode_note    => 'c',
    key_function => 'subdominant',
  );
  $q = $m->pivot_chord_keys;
  # [['pivot_chord_keys','g','maj','c','ionian','dominant','d','dorian','subdominant','r_IV'],
  #  ['pivot_chord_keys','g','maj','c','ionian','dominant','d','ionian','subdominant','r_IV'],
  #  ['pivot_chord_keys','g','maj','c','ionian','dominant','d','mixolydian','subdominant','r_IV'],
  #  ['pivot_chord_keys','g','maj','c','lydian','dominant','d','dorian','subdominant','r_IV'],
  #  ['pivot_chord_keys','g','maj','c','lydian','dominant','d','ionian','subdominant','r_IV'],
  #  ['pivot_chord_keys','g','maj','c','lydian','dominant','d','mixolydian','subdominant','r_IV']]

DESCRIPTION

Music::ModalFunction allows querying of a musical database of Prolog facts and rules that bind notes, chords, modes, keys and diatonic functionality. In this database, the facts are all called chord_key and the rules are pivot_chord_keys and roman_key.

To bind a value to a fact or rule argument, declare it in the object constructor. Unbound arguments will return all the possible values that make the query true.

The essential question is, "Can a chord in one key function in a second?" Any any parts of this open-ended question may be unbound, thereby resulting in all possible truths.

ATTRIBUTES

chord_note

chord

mode_note

mode

mode_function

mode_roman

key_note

key

key_function

key_roman

verbose

METHODS

new

  $m = Music::ModalFunction->new(%args);

Create a new Music::ModalFunction object.

chord_key

  $q = $m->chord_key;

Ask the database a question about what chords are in what keys.

Arguments:

  chord_key(ChordNote, Chord, KeyNote, Key, KeyFunction, KeyRoman)

Here, ChordNote and Chord together are the named chord defined within the context of the KeyNote and Key. The chord's function in the key is the KeyFunction and basically indicates the relative scale position. The chord can be maj, min, or dim, and the KeyRoman serves as an indicator of both the chord quality and the position in the scale.

If defined, argument values will be bound to a variable. Otherwise an unbound variable is used.

pivot_chord_keys

  $q = $m->pivot_chord_keys;

Ask the database a question about what chords share common keys.

Arguments:

  pivot_chord_keys(ChordNote, Chord, ModeNote, Mode, ModeFunction, ModeRoman, KeyNote, Key, KeyFunction, KeyRoman)

Here, ChordNote and Chord together are the named chord defined within the context of the ModeNote and Mode. The chord's function in the mode is the ModeFunction and basically indicates the relative scale position. The chord can be maj, min, or dim, and the ModeRoman serves as an indicator of both the chord quality and the position in the scale. The KeyNote and Key are the final "destination" of the query transformation (often a pivot). As with the ModeRoman, KeyRoman is the resulting chord quality and scale position.

If defined, argument values will be bound to a variable. Otherwise an unbound variable is used.

roman_key

  $q = $m->roman_key;

Ask the database a question about what Roman numeral functional chords share common keys.

Arguments:

  roman_key(Mode, ModeRoman, Key, KeyRoman)

If defined, argument values will be bound to a variable. Otherwise an unbound variable is used.

SEE ALSO

The t/01-methods.t and eg/* files in this distribution

Moo

AI::Prolog

MIDI::Util

Music::Note

Music::Scales

https://en.wikipedia.org/wiki/Prolog

https://en.wikipedia.org/wiki/Common_chord_(music)

AUTHOR

Gene Boggs <gene@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2023 by Gene Boggs.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)