NAME MIDI::Praxis::Variation - Interface for variation techniques commonly used in music composition. SYNOPSIS use MIDI::Praxis::Variation DESCRIPTION Melodic variation techniques, as implemented here, expect an array of MIDI::Simple style note names as input. They return an array of Midi note numbers. These returned note representations can be printed directly or used, perhaps in MIDI::Simple fashion, as input to functions/methods that accept midi note number input. BUGS Any that still exist have eluded our testing. This software is supplied as is with no representations as to its fitness for use. Use it at your own risk. If your system, your data, or all the forces of good in the universe are corrupted or destroyed as a result of your use of this software -- so it goes. SUPPORT None AUTHOR Craig Bourne cbourne@cpan.org COPYRIGHT Copyright (c) Craig Bourne 2004 All rights reserved This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. SEE ALSO MIDI::Simple(3). note_name_to_number Usage : note_name_to_number($note_name) Purpose : Map a single note name to a midi note number. Returns : An equivalent midi note number. Comments : Expects to see a MIDI::Simple style note name. original Usage : original(@array) Purpose : Map note names to midi note numbers. Returns : An equivalent array of midi note numbers. Argument : @array - an array of note names. Comments : Expects to see a an array of MIDI::Simple style note names, : e.g., C5, Fs6, Bf3. It returns equivilent midi note : numbers leaving the array of note names untouched. retrograde Usage : retrograde(@array) Purpose : Form the retrograde of an array of note names. Returns : The retrograde equivalent array as midi note numbers. Argument : @array - an array of note names. Comments : Expects to see a an array of MIDI::Simple style note names. transposition Usage : transposition($distance, @array) Purpose : Form the transposition of an array of notes. Returns : Midi note numbers equivalent by transposition to : an array of note names. Arguments : $distance - an integer giving distance and direction. : @array - an array of note names. Comments : Expects to see an integer followed an array of : MIDI::Simple style note names. The integer specifies : the direction and distance of transposition. For : example, 8 indicates 8 semitones up while -7 asks : for 7 semitones down. The array argument specifies : the notes to be transposed. inversion Usage : inversion($axis, @array) Purpose : Form the inversion of an array of notes. Returns : Midi note numbers equivalent by inversion to : an array of note names. Arguments : $axis - a note to use as the axis of this inversion. : @array - an array of note names. Comments : Expects to see a MIDI::Simple style note name. : followed by an array of such names. These give : the axis of inversion and the notes to be inverted. retrograde_inversion Usage : retrograde_inversion($axis, @array) Purpose : Form the retrograde inversion of an array of notes. Returns : Midi note numbers equivalent by retrograde inversion to : an array of note names. Argument : @array - an array of note names. Comments : Expects to see a an array of MIDI::Simple style note names. : Inverts about the supplied $axis. dur Usage : dur($dur_or_len) Purpose : Compute duration of a note. Returns : Duration as an integer. Argument : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected and integer output : is returned. tye Usage : tye($dur_or_len) Purpose : Compute the sum of the durations of notes. As with a tie : in music notation. This odd spelling is used to avoid : conflict with the perl reserved word tie. Returns : Duration as an integer. Argument : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected and integer output : is returned. raugmentation Usage : raugmentation($ratio, $dur_or_len) Purpose : Augment duration of a note multiplying it by $ratio. Returns : Duration as an integer. Argument : $ratio - an integer multiplier : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected for $dur_or_len and : integer output is returned. rdiminution Usage : rdiminution($ratio, $dur_or_len) Purpose : Diminish duration of a note dividing it by $ratio. Returns : Duration as an integer. Argument : $ratio - an integer divisor : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected for $dur_or_len and : integer output is returned. This integer is the aproximate : result of dividing the original duration by $ratio. augmentation Usage : augmentation($dur_or_len) Purpose : Augment duration of a note multiplying it by 2, : (i.e., double it). Returns : Duration as an integer. Argument : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected for $dur_or_len and : integer output is returned. diminution Usage : diminution($dur_or_len) Purpose : Diminish duration of a note dividing it by 2, : (i.e., halve it). Returns : Duration as an integer. Argument : $dur_or_len - a string consisting of a numeric MIDI::Simple : style numeric duration spec ( e.g., d48, or d60 ) or length : spec ( e.g., qn or dhn ) Comments : Note that string input is expected for $dur_or_len and : integer output is returned. This integer is the aproximate : result of dividing the original duration by 2. ntup Usage : ntup($nelem, @subject) Purpose : Catalog tuples of length $nelem in @subject. Returns : An array of tuples of length $nelem. Argument : $nelem - number of elements in each tuple : @subject - subject array to be scanned for tuples Comments : Scan begins with the 0th element of @subject looking for : a tuple of length $nelem. Scan advances by one until it : has found all tuples of length $nelem. For example: : given the array @ar = qw( 1 2 3 4 ) and $nelem = 2 : ntup(2, @ar) would return @ret = qw( 1 2 2 3 3 4 ). Note : that for $nelem == any of -1, 0, 5 using the same @ar as : its subject array ntup returns qw();