Fomus
Text File Interface
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:
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 ...)
(fomus "/directory/file.fms")
(fomus "/directory/file.fms" :output :cmn)
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:
(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))