Class MARK
Prev | Chapter 4. Objects | Next

## Class MARK

The `MARK` objects allow the user to specify marks outside of a `NOTE` or `REST` class. Marks designate extra information that to be applied to a `NOTE` or `REST` object such as articulations, modifications like tremolos or harmonics, printed text, etc.. After voices and staff assignments have been established, information in the `MARK` objects is dumped into the `MARKS` slots of `NOTE` and `REST` objects according to the values in the `OFF` and `PARTID` slots.

There are several advantages to using `MARK` objects as opposed to specifying marks in `NOTE` or `REST` objects. One is that many markings (dynamics, for example) might only need to be attached to notes that are in one voice, such as the bottom voice of a particular staff. Since voice assignments for notes might not be known until FOMUS decides them, `MARK` objects are the only way of insuring that the marks occur in the right place. `MARK` objects are also a convenient way of specifying marks for a range of parts, and make it easier to apply spanners such as slurs without having to juggle `NOTE` objects around.

`MARK` objects are passed to FOMUS by including them either in the `EVENTS` slot list of a `PART` object or in the global `EVENTS` list. The behavior in either case is exactly the same as with `NOTE` or `REST` objects.

Constructor: `(MAKE-MARK &key :ID `id` :PARTID `partid` :VOICE `voice` :OFF `off` :MARKS `marks`)`

Copy Function: `(COPY-MARK `mark` &key :ID `id` :PARTID `partid` :VOICE `voice` :OFF `off` :MARKS `marks`)`

Predicate Function: `(MARKP `obj`)`

Accessors:

`OBJ-ID`

  This slot isn't used by FOMUS.

`EVENT-PARTID`

  This slot is equivalent to the `PARTID` slot in the `NOTE` or `REST` class.

`EVENT-VOICE`

  This slot is equivalent to the `VOICE` slot in the `REST` class, with the exception that a staff or list of staves can be specified instead of voices. Staves are indicated with a list beginning with the symbol `:STAFF` followed by one or more integer values. The integers represent staff choices and can either be negative or positive, negative indicating that the mark be placed in the uppermost voice of the staff (the staff number is the absolute value of the number given in this case) and positive indicating that the mark be placed in the lowermost voice of the staff. FOMUS chooses the option from the list that places the mark the closest to the specified offset. Following is an example of how to specify staves:

  Example 4.7. EVENT-VOICE Slot Setting

      '(:staff 1 -2)

  Specifying a choice of staves like this allows the user to place marks like dynamics that apply to all voices but only need to appear in one place. In the case of the example above, a mark with this value in its `VOICE` slot that is applied to a grand staff is attached to a note in a voice on the inside of the staff.

  As in the case of the `REST` class, when set to a list of voices, the `MARK` object is distributed to all of them.

`EVENT-OFF`

  This slot is equivalent to the `OFF` slot in the `NOTE` or `REST` class, with the exception that offsets may also be wrapped inside a list and given a positive or negative value (for example, `'(3)`, `'(11.5)` or `'(-11.5)`). When this list is used, it indicates that the marks in the `MARKS` slot are applied to events just before or after the given offset depending on its sign. Positive offset values indicate the mark is to applied to the event just following the offset and negative values indicate the mark is to be applied just before it (the absolute value of it). This makes it easier in some cases to place marks that indicate ends of spanners such as slurs, since marks that indicate the end of the spanner can actually be given the offset where the next spanner begins. FOMUS will place the end mark in the proper place (the event that immediately precedes the one at the indicated offset).

`EVENT-MARKS`

  `MARKS` slots contain lists of marks. (In a `NOTE` or `REST` object, these marks are "attached" to that event.) Marks are specified as either symbols or lists of symbols and numbers. If it is a list, then the first element is the mark symbol followed by one or more arguments. Following is an example of what may appear in the `MARKS` slot:

  Example 4.8. EVENT-MARKS Slot Setting 1

      '(:accent :startslur- (:startslur- 2 :dotted) (:texttempo "accelerando"))

  The `MARK` class can contain one extra mark that `NOTE` or `REST` objects can't contain. The symbol itself is `:MARK` and actually specifies another mark that is to be placed in the same voice at a different offset. It has the following format: `'(:MARK `off` `mark` `...`)`, specifying that another mark is to be placed in the same voice at the offset given. This special mark is necessary if the user specifies a staff instead of a voice and the mark is a symbol indicating the start of a spanner. It can also be used as a convenience, since only one `MARK` object needs to be instantiated to specify several marks that belong together. By specifying the end symbol here as part of a `MARK` mark, FOMUS recognizes the start and end marks as belonging to each other and will place them in the same voice. (Starting and ending marks that aren't paired in the same voice cause errors.) The offset argument that is the second element in this list uses the same extended syntax as the `OFF` slot in this class. The rest of the list after the second element is the mark symbol and the arguments that apply to that symbol. Following is an example:

  Example 4.9. EVENT-MARKS Slot Setting 2

      '(:accent (:startslur- 2) (:mark (-101) :endslur- 2))

  The contents of the `MARKS` slots of `MARK` objects are dumped into the `MARKS` slots of `NOTE` and `REST` objects once voices and staves have been decided. See Marks for a more detailed explanation of marks and their usage.

Prev | Up | Next
Class REST | Home | Structure INSTR