You may also create a text file where each line of the file executes one of the commands listed in Interface 2. A simple example file is given below:
Example 3.7. FOMUS Text Input File
init :output (:lilypond :view t)
(init
:filename "outfile"
:quality 2)
;; remark
part 1 :name "Piano" :instr :piano
note 1 :off 0 :dur 1 :note 60
note 1 :off 1 :dur 1 :note 62 \
:marks (:accent) ; remark
(note 1
:off 2
:dur 1
:note 64
:marks (:marcato (:textnote "Text")))
off +2
note 1 :off 2 :dur 1/2 :note c4 ; actual offset is 4
off -1
note 1 :off 10 :dur 1/2 :note c4 ; actual offset is 9
off
note 1 :off 20 :dur 2 :notes (c4 e4 g4 c5)
Each element is read using the Lisp READ command (nothing is evaluated), with the exception of expressions that begin with
MAKE-. These are evaluated to avoid having to specify FOMUS classes and/or structures with
#S or #Z syntax (the Z reader macro is defined by FOMUS).
INIT lines specify values for FOMUS settings and can contain multiple keyword/arguments on a line.
As many INIT lines as needed may appear.
The \ character may be used at the end of a line to concatenate it with the following line.
Also, as shown in the example above, any "entry" may be surrounded by a set of parenthesis to indicate that all elements inside them are read/parsed together
(like an ordinary Lisp expression)--this can also be used to spread entries across several lines.
A few extra things are possible with input files to facilitate editing. Any section of the file may contain an OFF
tag optionally followed by a number. This tag shifts the offsets of everything that follows by the specified amount.
An OFF tag with no number resets the offset shift to 0. Also, a :NOTES keyword is available
for specifying chords. A chord is then specified as a list of notes as shown above. When FOMUS
reads this it creates a separate note object for each note in the list.
To process this file, use the FOMUS command as follows:
(FOMUS filename &key value ...)
Keyword/argument pairs passed to this function override the settings stored in the input file.
The FOMUS-FILE function may be used to parse an input file and return the objects specified in that file without processing them:
(FOMUS-FILE filename &key value ...)
Four return values are returned: a list of PART objects, a sorted list of
NOTE, REST and
MARK objects, a list of TIMESIG
objects (and KEYSIG objects when implemented),
and a list of keyword/argument pairs representing the keywords and values found in the INIT lines.
The following example show how you can edit and resave data using these files:
Example 3.10. FOMUS Usage 9
(multiple-value-bind (parts events globals args)
(fomus-file "/directory/myfomusfile.fms")
;; user processing...
(apply #'fomus "/directory/myfomusfile.fms"
:global globals :parts parts :events events
args))