NAME
scalemogrifier - generate notes of named or arbitrary scales
SYNOPSIS
$ scalemogrifier
c d e f g a b c'
The list of accepted lilypond note names and other elements include:
c cis des d dis ees e f fis ges g gis aes a ais bes b nl
Available named modes include:
aeolian amdorian dorian hminor hunminor ionian locrian lydian
major minor mixolydian mminor phrygian
DESCRIPTION
Generates notes of arbitrary scales (subsets of the Western 12-tone chromatic system) from a specified starting note in a specified direction and so forth from other options.
The output is in lilypond absolute format. The default scale is The Major Scale, but that's easy to adjust to say C Minor:
$ scalemogrifier --minor --flats
By default, scales loop back to the starting note. If this is not the case, suffix nl
to a custom interval series:
$ scalemogrifier --intervals=c,cis,dis,e,g,nl --length=15
c cis dis e g gis ais b d' dis' f' fis' a' ais' c''
The output is based on the assumption that c
equals 0. The output can be transposed via:
$ scalemogrifier --mode=mixolydian --transpose=-5
Integer interval numbers can be used instead of note names or the --mode option, for example the Major Scale:
$ scalemogrifier --intervals='2 2 1 2 2 2 1' --raw
Or to form a -P4,+P5 sequence:
$ scalemogrifier --intervals=-5,7 --len=24
Or just plain made up:
$ scalemogrifier --intervals=1,2,3,5,7 --dir=53 --relative --len=24
Scales can also be rendered backwards:
$ scalemogrifier --dir=-1
Or with the interval order reversed:
$ scalemogrifier --rev
The scale generated can be fed back into a different output scale (the direction and reverse options only apply to the --intervals option scale, not the --ois scale):
$ scalemogrifier --intervals=c,cis,dis,e,g,nl --ois=aes,bes,ces,ees,fes \
--len=48 --flats --rel
Practical application of the results to music theory or composition left as an exercise to the user. The output can be fed to ly-fu
for playback and display, for example:
$ ly-fu --abs -l --open $(scalemogrifier ...)
$ ly-fu -l --open $(scalemogrifier --relative ...)
OPTIONS
This script currently supports the following command line switches:
- --direction=integer
-
Positive, the scale goes up, negative, down. Magnitudes greater than 1 multiply the interval.
- --flats
-
Use flats instead of sharps in the output note names.
- --help
-
Displays help and exits program.
- --intervals=interval list
-
List (comma or space delimited) of intervals (integers) or notes of the scale (lilypond note names) or
nl
for non-loop-back-to-start- pitch scales. - --length=positive integer
-
How many notes to generate in the output.
- --listmodes
-
List available named scale modes and then exit. Used by ZSH compdef script.
- --mode=mode
-
Specify named scale mode instead of using --intervals. Available modes can be listed with the --listmodes option.
- --ois=interval list
-
"Output interval sequence" -- the custom scale or interval set that the output will be mapped into.
- --ors=string
-
"Output record separator" -- text to print between each output element. Defaults to a space character.
- --raw
-
Emit raw pitch numbers instead of note names.
- --relative
-
Generate relative lilypond output (default: absolute). Good fun can be had by using absolute in relative mode, or otherwise letting the chance of the lilypond algorithm take the music in unexpected directions.
- --reverse
-
Reverses the order of the intervals.
- --transpose=pitch or note
-
Value by which to transpose the output by (integer) or to (note name).
FILES
ZSH completion script available in the zsh-compdef directory of the App::MusicTools distribution.
BUGS
Reporting Bugs
If the bug is in the latest version, send a report to the author. Patches that fix problems or add new features are welcome.
http://github.com/thrig/App-MusicTools
Known Issues
None at this time but probably lots.
SEE ALSO
http://www.lilypond.org/
Consider http://oeis.org/ to lookup interesting interval series; for example, search by the major interval sequence for numeric sequences that contain it:
http://oeis.org/search?q=2,2,1,2,2,2,1
AUTHOR
Jeremy Mates
COPYRIGHT
Copyright (C) 2012 by Jeremy Mates
This script is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.16 or, at your option, any later version of Perl 5 you may have available.