“Spanner marks” are marks that span across one or more notes in score.
Examples are slurs, crescendo/decrescendo wedges and text marks followed by dashed lines.
There are several ways of entering these types of marks, all of which involve the use of either a begin, end, or “continue” mark.
A ellipsis with two dots (‘..’) (or single dots in the case of a continue mark) is used to denote which part of the spanner a mark represents—for example,
(..
, ..)
and .(.
are the begin, end and continue marks of a slur.
A straightforward method of specifying spanner marks is to indicate where they start and stop.
In this example, (..
and ..)
marks are used to signify the beginnings and ends of slurs:
(fms:with-score (:filename *filename* :parts '((:id pno :inst :piano))) (loop with sluron for off from 0 to 10 by 1/2 do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (+ 60 (random 25)) :marks (when (< (random 1.0) 0.5) (prog1 (if sluron '("..)") '("(..")) (setf sluron (not sluron))))))) |
|
Figure 7.24: Slurs
Only the begin marks are given in the next example. In this example, each end occurs before the beginning of the next slur or on the very last note if there is no next slur. Slurs spanning only a single note are removed (though they may still affect the placement of other slurs). FOMUS considers each voice separately when calculating spanners (with the exception of a few marks like octave change signs, which need to be calculcated separately for each staff).
(fms:with-score (:filename *filename* :parts '((:id pno :inst :piano))) (loop for v from 1 to 2 do (loop for off from 0 to 10 by 1/2 do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (ecase v (1 (+ 60 (random 25))) (2 (+ 35 (random 25)))) :voice v :marks (if (< (random 1.0) 0.5) '("(..") '()))))) |
|
Figure 7.25: Slurs using Begin Marks
End marks may also be used by themselves:
(fms:with-score (:filename *filename* :parts '((:id pno :inst :piano))) (loop for v from 1 to 2 do (loop for off from 0 to 10 by 1/2 do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (ecase v (1 (+ 60 (random 25))) (2 (+ 35 (random 25)))) :voice v :marks (if (< (random 1.0) 0.5) '("..)") '()))))) |
|
Figure 7.26: Slurs using End Marks
By default, spanner marks do not touch, span rests or span across single notes.
This behavior can be changed at any level (in a note, measure, part or the entire score) with settings.
The settings controlling default slur behavior, for example, are slurs-canspanrests
and slurs-cantouch
.
(fms:with-score (:filename *filename* :sets '(:slurs-cantouch t) :parts '((:id pno :inst :piano))) (loop for v from 1 to 2 do (loop for off from 0 to 10 by 1/2 do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (ecase v (1 (+ 60 (random 25))) (2 (+ 35 (random 25)))) :voice v :marks (if (< (random 1.0) 0.5) '("(..") '()))))) |
|
Figure 7.27: Touching Slurs
Individual spanner behavior can also be changed by appending character “flags” to the mark ids. Appending an ‘r’, for example, indicates that the mark can span rests ‘n’ indicates it should span notes only. ‘1’ indicates that the mark can span a single note, while ‘m’ indicates it can only span multiple notes. The example below uses ‘-’ and ‘|’ to indicate whether the slurs can touch or not. Not all of these flags are valid for every spanner mark (you cannot append ‘1’ or ‘m’ to slur marks, for example).
(fms:with-score (:filename *filename* :parts '((:id pno :inst :piano))) (loop for v from 1 to 2 do (loop for off from 0 to 10 by 1/2 do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (ecase v (1 (+ 60 (random 25))) (2 (+ 35 (random 25)))) :voice v :marks (if (< (random 1.0) 0.5) (ecase v (1 '("(-..")) (2 '("(|.."))) '()))))) |
|
Figure 7.28: Marks with Flags
The following example shows how crescendo/decrescendo wedges can be made to span single notes.
wedges-cantouch
is also set to allow the marks to begin and end on the same note.
(fms:with-score (:filename *filename* :sets '(:transpose-keysigs nil :wedges-canspanone t :wedges-cantouch t) :parts '((:id tpt :inst :bflat-trumpet))) (loop with cresc = t for off from 0 to 10 by 2 do (fms:note :time off :dur 2 :pitch (+ 70 (random 5)) :marks (when (< (random 1.0) 0.5) (prog1 (if cresc '("<..") '(">..")) (setf cresc (not cresc))))))) |
|
Figure 7.29: Wedges
The beginnings and ends of these spanner marks are attached to noteheads. A few spanners, like crescendo/decrescendo wedges, can be “detached” or separated from noteheads and appear independently in the score. See Mark Events (Lisp) for examples of how to do this.
Another way to specify where spanners begin and end is to use “continue” marks. Continue marks simplify specifying spanners in programming environments such as Lisp. To use them, place a continue mark over every note event that falls under a spanner and, if necessary, include begin or end marks to resolve any ambiguities. FOMUS places begin or end marks where they are missing at the beginnings or ends of any contiguous set of continue marks within a single voice.
Continue marks are indicated by surrounding the base spanner mark symbol with two dots, one on either side.
For example, .(.
signifies a slur continue mark while .<.
signifies a crescendo continue mark.
(fms:with-score (:filename *filename* :parts '((:id pno :inst :piano))) (loop for off from 0 to 10 by 1/2 for slurend = (< (random 1.0) 0.333) for sluron = (if slurend (< (random 1.0) 0.5) sluron) do (fms:note :time off :dur (if (< off 10) 1/2 1) :pitch (+ 60 (random 25)) :marks (append (when (and slurend sluron) '(("(.."))) (when sluron '((".(."))))))) |
|
Figure 7.30: Continue Marks