A.3.1 Presentació de les expressions musicals (Extender LilyPond)

#### A.3.1 Presentació de les expressions musicals

Si s’està escrivint una funció musical, pot ser molt instructiu examinar com s’emmagatzema internament una expressió musical. Això es pot fer amb la funció musical `\displayMusic`.

    {
      \displayMusic { c'4\f }
    }

imprimeix el següent:

    (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))))

De manera predeterminada, el LilyPond imprimeix aquests missatges sobre la consola junt a la resta dels missatges. Per separar aquests missatge i desar el resultat de `\display{ELQUESIGUI}`, podeu especificar que s’usi un port de sortida opcional:

    {
      \displayMusic #(open-output-file "display.txt") { c'4\f }
    }

Això sobreescriu el fitxer de sortida anterior cada cop que es crida; si ens cal escriure més d’una expressió, hem d’usar una variable per al port i reutilitzar-la:

    {
      port = #(open-output-file "display.txt")
      \displayMusic \port { c'4\f }
      \displayMusic \port { d'4 }
      #(close-output-port port)
    }

El manual del Guile descriu els ports detalladament. Sols es realment necessari tancar el port si ens cal llegir el fitxer abans que acabi el LilyPond; en el primer exemple, no ens hem molestat de fer-ho.

Una mica d’ajustament del format fa que sigui més fàcil de llegir la informació anterior:

    (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))))

Una seqüència musical `{ … }` té el nom `SequentialMusic`, i les seves expressions internes s’emmagatzemen com a una llista dins de la seva propietat `'elements`. Una nota es representa com un objecte `NoteEvent` (que emmagatzema les propietats de duració i altura) amb informació adjunta (en aquest cas, un esdeveniment `NoteEvent` (que emmagatzema propietats de duració i altura) com informació adjunta (en aquest cas, un esdeveniment `AbsoluteDynamicEvent` amb una propietat `"f"` de text) emmagatzemada en la seva propietat `articulations`.

`\displayMusic` retorna la música que s’imprimeix a la consola, i per això s’interpretarà al mateix moment que s’imprimeix a la consola. Per evitar la interpretació, escriviu `\void` antes de `\displayMusic`.

#### Extender LilyPond v2.26.0 (stable-branch).

- Appendix A Tutorial de l’Scheme
  - A.1 Introducció a l’Scheme
    - A.1.1 Banc de sorra de l’Scheme
    - A.1.2 Variables de l’Scheme
    - A.1.3 Tipus de dades simples de l’Scheme
    - A.1.4 Tipus de dades compostes de l’Scheme
      - Parelles
      - Llistes
      - Llistes associatives (llistes-A)
      - Taules de hash
    - A.1.5 Càlculs a l’Scheme
    - A.1.6 Procediments de l’Scheme
      - Definició de procediments
      - Predicats
      - Valors de retorn
    - A.1.7 Condicionals de l’Scheme
      - if
      - cond
  - A.2 Scheme dins del LilyPond
    - A.2.1 Sintaxi de l’Scheme del LilyPond
    - A.2.2 Variables del LilyPond
    - A.2.3 Variables d’entrada i l’Scheme
    - A.2.4 Importació de l’Scheme dins del LilyPond
    - A.2.5 Propietats dels objectes
    - A.2.6 Variables del LilyPond compostes
      - Desplaçaments
      - Fraccions
      - Dimensions
      - Llistes-A de propietats
      - Cadenes de llistes-A
    - A.2.7 Representació interna de la música
  - A.3 Construcció de funcions complicades
    - A.3.1 Presentació de les expressions musicals
    - A.3.2 Propietats musicals
    - A.3.3 Duplicació una nota amb lligadures (exemple)
    - A.3.4 Afegir articulacions a les notes (exemple)
- B Interfícies per a programadors
  - B.1 Blocs de codi del LilyPond
  - B.2 Funcions de l’Scheme
    - B.2.1 Definició de funcions de l’Scheme
    - B.2.2 Ús de les funcions de l’Scheme
    - B.2.3 Funcions de l’Scheme buides
  - B.3 Funcions musicals
    - B.3.1 Definicions de funcions musicals
    - B.3.2 Ús de les funcions musicals
    - B.3.3 Funcions de substitució senzilles
    - B.3.4 Funcions de substitució intermèdies
    - B.3.5 Matemàtiques dins de les funcions
    - B.3.6 Funcions sense arguments
    - B.3.7 Funcions musicals buides
  - B.4 Funcions d’esdeveniments
  - B.5 Funcions de marcatge
    - B.5.1 Construcció d’elements de marcatge a l’Scheme
    - B.5.2 Com funcionen internament els elements de marcatge
    - B.5.3 Definició d’una ordre nova de marcatge
      - Sintaxi de la definició d’ordre de marcatge
      - Quant a les propietats
      - Un exemple complet
      - Adaptació d’ordres incorporades
    - B.5.4 Definició de noves ordres de llista de marcatge
  - B.6 Contextos per a programadors
    - B.6.1 Avaluació de contextos
    - B.6.2 Execució d’una funció sobre tots els objectes de la presentació
  - B.7 Funcions de callback
  - B.8 Ajustaments difícils
- C Interfícies de l’Scheme del LilyPond
- Appendix D GNU Free Documentation License
- Appendix E Índex del LilyPond