summaryrefslogtreecommitdiff
path: root/ly
diff options
context:
space:
mode:
authorMichael Ellis <michael.f.ellis@gmail.com>2011-02-17 11:06:14 +0000
committerTrevor Daniels <t.daniels@treda.co.uk>2011-02-17 11:06:14 +0000
commitfd7ad42f98d7e6117958a41e74cd736e396fb933 (patch)
tree8850d26f1f6564859cc3f093ef5020fb7d409592 /ly
parent37b7e122c049a954e5c5a91d5cac78004e77bb35 (diff)
Add modal transformations
Diffstat (limited to 'ly')
-rw-r--r--ly/music-functions-init.ly40
1 files changed, 31 insertions, 9 deletions
diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly
index fc49725f07..34261c114b 100644
--- a/ly/music-functions-init.ly
+++ b/ly/music-functions-init.ly
@@ -214,14 +214,14 @@ clef =
compoundMeter =
#(define-music-function (parser location args) (pair?)
- (_i "Create compound time signatures. The argument is a Scheme list of
-lists. Each list describes one fraction, with the last entry being the
-denominator, while the first entries describe the summands in the
-enumerator. If the time signature consists of just one fraction,
+ (_i "Create compound time signatures. The argument is a Scheme list of
+lists. Each list describes one fraction, with the last entry being the
+denominator, while the first entries describe the summands in the
+enumerator. If the time signature consists of just one fraction,
the list can be given directly, i.e. not as a list containing a single list.
-For example, a time signature of (3+1)/8 + 2/4 would be created as
-@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8
-as @code{\\compoundMeter #'((3 2 8))} or shorter
+For example, a time signature of (3+1)/8 + 2/4 would be created as
+@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8
+as @code{\\compoundMeter #'((3 2 8))} or shorter
@code{\\compoundMeter #'(3 2 8)}.")
(let* ((mlen (calculate-compound-measure-length args))
(beat (calculate-compound-base-beat args))
@@ -462,13 +462,29 @@ makeClusters =
(_i "Display chords in @var{arg} as clusters.")
(music-map note-to-cluster arg))
+modalInversion =
+#(define-music-function (parser location around to scale music)
+ (ly:music? ly:music? ly:music? ly:music?)
+ (_i "Invert @var{music} about @var{around} using @var{scale} and
+transpose from @var{around} to @var{to}.")
+ (let ((inverter (make-modal-inverter around to scale)))
+ (change-pitches music inverter)
+ music))
+
+modalTranspose =
+#(define-music-function (parser location from to scale music)
+ (ly:music? ly:music? ly:music? ly:music?)
+ (_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}
+using @var{scale}.")
+ (let ((transposer (make-modal-transposer from to scale)))
+ (change-pitches music transposer)
+ music))
+
musicMap =
#(define-music-function (parser location proc mus) (procedure? ly:music?)
(_i "Apply @var{proc} to @var{mus} and all of the music it contains.")
(music-map proc mus))
-
-
%% noPageBreak and noPageTurn are music functions (not music indentifiers),
%% because music identifiers are not allowed at top-level.
noPageBreak =
@@ -780,6 +796,12 @@ resetRelativeOctave =
reference-note))
+retrograde =
+#(define-music-function (parser location music)
+ (ly:music?)
+ (_i "Return @var{music} in reverse order.")
+ (retrograde-music music))
+
revertTimeSignatureSettings =
#(define-music-function
(parser location time-signature)