[ << Scheme tutorial ] | [Top][Contents][Index] | [ Interfaces for programmers >> ] |
[ < Building complicated functions ] | [ Up : Building complicated functions ] | [ Music properties > ] |
1.3.1 Displaying music expressions
When writing a music function it is often instructive to inspect how
a music expression is stored internally. This can be done with the
music function \displayMusic
.
{ \displayMusic { c'4\f } }
will display
(make-music 'SequentialMusic 'elements (list (make-music 'NoteEvent 'articulations (list (make-music 'AbsoluteDynamicEvent 'text "f")) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 0 0))))
By default, LilyPond will print these messages to the console along
with all the other messages. To split up these messages and save
the results of \display{STUFF}
, you can specify an optional
output port to use:
{ \displayMusic #(open-output-file "display.txt") { c'4\f } }
This will overwrite a previous output file whenever it is called; if you need to write more than one expression, you would use a variable for your port and reuse it:
{ port = #(open-output-file "display.txt") \displayMusic \port { c'4\f } \displayMusic \port { d'4 } #(close-output-port port) }
Guile’s manual describes ports in detail. Closing the port is actually only necessary if you need to read the file before LilyPond finishes; in the first example, we did not bother to do so.
A bit of reformatting makes the above information easier to read:
(make-music 'SequentialMusic 'elements (list (make-music 'NoteEvent 'articulations (list (make-music 'AbsoluteDynamicEvent 'text "f")) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 0 0))))
A { … }
music sequence has the name
SequentialMusic
, and its inner expressions are stored as a list
in its 'elements
property. A note is represented as a
NoteEvent
object (storing the duration and pitch properties) with
attached information (in this case, an AbsoluteDynamicEvent
with
a "f"
text property) stored in its articulations
property.
\displayMusic
returns the music it displays, so it will get
interpreted as well as displayed. To avoid interpretation, write
\void
before \displayMusic
.
[ << Scheme tutorial ] | [Top][Contents][Index] | [ Interfaces for programmers >> ] |
[ < Building complicated functions ] | [ Up : Building complicated functions ] | [ Music properties > ] |