The beat
setting specifies what rhythmic value is equal to one durational unit or “beat.” By default this value is 1/4,
which means a duration of 1 is notated with a quarter note.
beat
must always be an integer or rational number whose denominator is a power of two (e.g., 1/8, 1/4, 1/2, 1 and 2 are valid values).
The following example shows the effect of changing beat
to 1/8 (an eighth note).
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1, pitch: p) wait 1 end begin with sets = {:beat 1/8}, parts = {{:id "pno" :inst "piano"}} sprout(myproc-notes(16), *filename*, sets: sets, parts: parts) end |
|
Figure 8.54: Beats Setting
If you change beat
in the middle of a passage, FOMUS
adjusts by changing the time signature (i.e., FOMUS does not change the times or durations of measures to compensate—it changes the notation).
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-beats (n) with m = make-cycle({1/2 1/4 1/8}) repeat n fms:meas(dur: 4, beat: next(m)) wait 4 end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(29), myproc-beats(4)), *filename*, parts: parts) end |
|
Figure 8.55: Beats Setting in the Middle of a Passage
Measures in FOMUS are defined in a way similar to note events by specifying time and duration along with settings and values. Measures only need to be defined when a change occurs (e.g., a change in the time or key signature) or you want to insure that a downbeat occurs at some specific time. FOMUS fills in the remaining measures by repeating the measure defined by you and adjusting any that overlap or don't fit.
process myproc-notes (n) repeat n for p = 60 then drunk(p, 2) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-meas () repeat 1 fms:meas(dur: 3) end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-meas(), myproc-notes(24)), *filename*, parts: parts) end |
|
Figure 8.56: Specifying a Measure
The duration of this measure is 3+1/2 instead of 3. This is notated as an 7/8 measure:
process myproc-notes (n) repeat n for p = 60 then drunk(p, 2) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-meas () repeat 1 fms:meas(dur: 3 + 1/2) end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-meas(), myproc-notes(24)), *filename*, parts: parts) end |
|
Figure 8.57: Specifying a 7/8 Measure
In the following example each small phrase begins on a downbeat. FOMUS begins a new series of 3/4 measures at all of the specified locations while fitting and adjusting the remaining measures in the best way possible.
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-chunk () repeat 5 fms:meas(dur: 3) sprout(myproc-notes(ran(8) + 1)) wait ran(8) + 1 end begin with parts = {{:id "pno" :inst "piano"}} sprout(myproc-chunk(), *filename*, parts: parts) end |
|
Figure 8.58: Measures at Arbitrary Locations
When FOMUS needs to create a new measure or delete one to work around the user's explicitly defined measures, it does so
according to the min-measdur
setting. min-measdur
represents the duration of the smallest measure FOMUS is allowed to create.
process notes () with pit = make-cycle({60 62 64 65 64 62 60 59}) while ( elapsed() < 16 ) fms:note(dur: 1/2, pitch: next(pit)) wait 1/2 end process meass () while ( elapsed() <= 12 ) if ( elapsed() != 9 ) fms:meas(dur: 4) end wait 3 end begin sprout(list(notes(), meass()), *filename*, sets: {:min-measdur 3}) end |
|
Figure 8.59: Minimum Measure Duration
Compound meter is specified by setting comp
to ‘#t’.
The beat
setting is then interpretted as a dotted value.
For example, in compound meter a beat
setting of 1/4 means a duration of 1 is notated as a dotted quarter note.
process myproc-notes (n) repeat n for p = 60 then drunk(p, 2) fms:note(part: "pno", dur: 1/3, pitch: p) wait 1/3 end process myproc-meas () repeat 1 fms:meas(dur: 4, comp: #t) end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-meas(), myproc-notes(24)), *filename*, parts: parts) end |
|
Figure 8.60: Specifying Compound Meter
FOMUS automatically calculates the time signature that appears in the score.
This calcaulation can be influenced by changing the value of timesig-den
.
Setting this to 8 (and beat
to 1/4), for example,
causes measures of duration 2 to be notated with 4/8 time signatures, measures of duration 3 to be notated with 6/8, etc..
FOMUS changes this to a higher multiple of two if necessary. For example, if timesig-den
is 4 then measures of duration 4+1/4 are notated
with 17/16 time signatures.
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-meass (n) with m = make-cycle({2 4 8}) repeat n fms:meas(dur: 4, timesig-den: next(m)) wait 4 end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(29), myproc-meass(4)), *filename*, parts: parts) end |
|
Figure 8.61: Time Signature Denominator Setting
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-meass () with tim = 0 for dur in list(2, 3 + 1/2, 4 + 1/4) fms:meas(dur: dur) wait dur end begin with sets = {:timesig-den 8}, parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(18), myproc-meass()), *filename*, sets: sets, parts: parts) end |
|
Figure 8.62: Another Time Signature Denominator Setting
Use the timesig
setting if you want to explicitly specify a time signature.
When you do this, FOMUS ignores the duration attribute and calculates the duration of the measure from the time signature.
process myproc-notes (n) repeat n for p = 60 then drunk(p, 3) fms:note(part: "pno", dur: 1/2, pitch: p) wait 1/2 end process myproc-timesigs (n) with m = make-cycle({{2 2} {4 4} {8 8}}) repeat n fms:meas(timesig: next(m)) wait 4 end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(29), myproc-timesigs(4)), *filename*, parts: parts) end |
|
Figure 8.63: Explicit Time Signatures
FOMUS uses two settings, meas-divs
and default-measdivs
to determine how a measure is split or “divided” up
into smaller subdivisions. These subdivisions have a direct influence on how notes are split, tied and beamed, and can
be controlled so that the right meter is represented in the score.
meas-divs
and default-measdivs
both contain lists of durations that specify two or more divisions (one division doesn't make any sense).
For example, the list ‘(2 2)’ specifies that a measure with a duration of 4 should be divided in half (this represents a typical duple meter).
‘(3 2)’ specifies that a measure with a duration of 5 be divided into a 3 + 2 measure. In meas-divs
you can actually specify one or more of these
lists—FOMUS then chooses the division that produces the least complex result (i.e., the least number of tied notes and tuplets).
For example, setting meas-divs
to ‘((3 2) (2 3))’ tells FOMUS that it may choose to divide 5 beats into 3 + 2 or 2 + 3 depending
on which one is most suitable.
process myproc-notes () with pit = make-cycle({60 61 62 63 64 65 64 63 62 61}) while elapsed() < 10 fms:note(part: "pno", dur: 1/2, pitch: next(pit)) wait 1/2 end process myproc-meass () with dvs = make-cycle({{{3 2}} {{2 3}}}) while elapsed() < 10 fms:meas(dur: 5/2, meas-divs: next(dvs)) wait 5 end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(), myproc-meass()), *filename*, parts: parts) end |
|
Figure 8.64: Measure Divisions
meas-divs
should usually be placed in a measure definition and should only specify divisions specific to that measure.
To modify all possible divisions for any measure of any duration use the default-measdivs
setting.
process myproc-notes () with pit = make-cycle({60 61 62 63 64 65 64 63 62 61}) while elapsed() < 10 fms:note(part: "pno", dur: 1/2, pitch: next(pit)) wait 1/2 end process myproc-meass () with dur = make-cycle({5/2 7/2}) while elapsed() < 10 fms:meas(dur: next(dur)) wait 5 end begin with sets = {:default-measdivs {{3 2} {4 3}}}, parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(), myproc-meass()), *filename*, sets: sets, parts: parts) end |
|
Figure 8.65: Default Measure Divisions
To change FOMUS's default measure divisions you can also set default-measdivs
in
your .fomus file located in your home directory.
In most cases, FOMUS uses the same settings to subdivide a measure further after it has initially divided it.
For example, once it has divided 5 beats into 3 + 2 beats, it should further subdivide the 3 beats into either 2 + 1, 1 + 2 or 1 + 1 + 1 beats (according
to FOMUS's built-in choices).
If FOMUS can't find a suitable list of divisions (i.e., the right duration is missing from meas-divs
or default-measdivs
) it multiplies and/or
divides by 2 until it does find one. For example, it might use ‘(3 2)’
to divide 2+1/2 beats into 1+1/2 + 1 if no other list of divisions is provided for a duration of 2+1/2 beats.
This allows ‘(3 2)’ to cover measures with 5/8, 5/4 and 5/2 time signatures, for example, regardless of what the value of beat
is.
If you are trying to notate any unusual metrical divisions, these features might cause a few subtle quirks.
In the first example below, the 1+1/2 + 1+1/2 division specified in meas-divs
causes two further 3/4 + 3/4 subdivisions. Since FOMUS does not
have a built-in rule for dividing 1+1/2 beats it derives ‘(3/4 3/4)’ from ‘(1+1/2 1+1/2)’ and from this divides each 1+1/2 beat division in half.
This is what is causing the strange pattern of rests in the measure below. The problem can be alleviated by providing instructions on how to divide 1+1/2 beats.
process myproc-notes () with pit = make-cycle({60 61 62 63 64 65 64 63 62 61}) while elapsed() < 10 fms:note(part: "pno", dur: 1/2, pitch: next(pit)) wait 1/2 end process myproc-meass () repeat 1 fms:meas(dur: 3, meas-divs: {{3/2 3/2}}) end begin with parts = {{:id "pno" :inst "piano"}} sprout(list(myproc-notes(), myproc-meass()), *filename*, parts: parts) end |
|
Figure 8.66: Strange Measure Divisions
If there is more than one part, FOMUS tries to divide simultaneous measures the same way. For example, 10 measures starting at time 0 with 5/4 time signatures are
all notated as either 3 + 2 or 2 + 3. If you want the possibility of different parts being divided differently, you can assign parts to special metrical groups
using the setting divgroup
. Basically, all parts with the same divgroup
ID are divided the same way, and parts with different divgroup
IDs
can be divided differently.
TODO: not implemented yet