@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @ignore Translation of GIT committish: 18cfd801fa7fcd698e924f3b530862714f3e3013 When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.15.32" @node Entrada y salida generales @chapter Entrada y salida generales @translationof General input and output Esta sección trata de asuntos relacionados con la entrada y salida generales de LilyPond, más que con la notación específica. @menu * Estructura del código de entrada:: * Títulos y cabeceras:: * Trabajar sobre los archivos de entrada:: * Controlar la salida:: * Salida MIDI:: * Extraer información musical:: @end menu @node Estructura del código de entrada @section Estructura del código de entrada @translationof Input structure El formato principal de entrada para LilyPond son archivos de texto. Por convenio, el nombre de estos archivos termina en @file{.ly}. @menu * Estructura de una partitura:: * Varias partituras en un libro:: * Varios archivos de salida a partir de uno de entrada:: * Nombres de los archivos de salida:: * Estructura del archivo:: @end menu @node Estructura de una partitura @subsection Estructura de una partitura @translationof Structure of a score @funindex \score Un bloque @code{\score} debe contener una expresión musical única delimitada por un par de llaves: @example \score @{ ... @} @end example @c outer? @warning{Sólo puede haber @strong{una} expresión musical dentro del bloque @code{\score}, y @strong{debe} estar encerrada entre llaves.} Esta expresión musical única puede tener cualquier tamaño, y puede contener otras expresiones musicales hasta cualquier grado de complejidad. Todos los siguientes ejemplos son expresiones musicales: @example @{ c'4 c' c' c' @} @end example @lilypond[verbatim,quote] { { c'4 c' c' c' } { d'4 d' d' d' } } @end lilypond @lilypond[verbatim,quote] << \new Staff { c'4 c' c' c' } \new Staff { d'4 d' d' d' } >> @end lilypond @example @{ \new GrandStaff << \new StaffGroup << \new Staff @{ \flute @} \new Staff @{ \oboe @} >> \new StaffGroup << \new Staff @{ \violinI @} \new Staff @{ \violinII @} >> >> @} @end example Los comentarios son una excepción a esta regla general (para ver otras excepciones, consulte @ref{Estructura del archivo}). Tanto los comentarios de una línea como los que están delimitados por @code{%@{ .. %@}} se pueden escribir en cualquier lugar dentro del archivo de entrada. Se pueden escribir dentro o fuera del bloque @code{\score}, y dentro o fuera de la expresión musical única dentro del bloque @code{\score}. Recuerde que incluso dentro de un archivo que contenga solamente un bloque @code{\score}, éste se encuentra incluido implícitamente dentro de un bloque @code{\book}. Un bloque @code{\book} dentro de un archivo fuente produce al menos un archivo de salida, y de forma predeterminada el nombre del archivo de salida que se produce está derivado del nombre del archivo de entrada, de forma que @file{fandangoforelephants.ly} da como resultado @file{fandangoforelephants.pdf}. (Para ver más detalles acerca de los bloques @code{\book}, consulte @ref{Varias partituras en un libro}, @ref{Varios archivos de salida a partir de uno de entrada} y @ref{Estructura del archivo}.) @seealso Manual de aprendizaje: @rlearning{Trabajar sobre los archivos de entrada}, @rlearning{Explicación de las expresiones musicales}, @rlearning{La partitura es una (única) expresión musical compuesta}. @node Varias partituras en un libro @subsection Varias partituras en un libro @translationof Multiple scores in a book @funindex \book @cindex movimientos, varios Un documento puede contener varias piezas de música y texto. Son ejemplos un libro de estudios o una parte orquestal con varios movimientos. Cada movimiento se introduce con un bloque @code{\score}: @example \score @{ @var{..música..} @} @end example y los textos se introducen con un bloque @code{\markup}: @example \markup @{ @var{..texto..} @} @end example @funindex \book Todos los movimientos y textos que aparecen en el mismo archivo @file{.ly} se tipografían normalmente en la forma de un solo archivo de salida. @example \score @{ @var{..} @} \markup @{ @var{..} @} \score @{ @var{..} @} @end example Una excepción importante se da dentro de los documentos de lilypond-book, en los que tenemos que escribir explícitamente un bloque @code{\book}, pues en caso contrario sólo aparecerá en la salida el primer @code{\score} o @code{\markup}. El encabezamiento de cada pieza se puede poner dentro del bloque @code{\score}. Antes de cada movimiento, se imprime el nombre de la pieza (@code{piece}) extraído del encabezamiento. El título del libro entero se puede poner dentro del bloque @code{\book}, pero si no está presente se inserta el encabezamiento @code{\header} que está al principio del archivo. @example \header @{ title = "Ocho miniaturas" composer = "Igor Stravinsky" @} \score @{ @dots{} \header @{ piece = "Romanze" @} @} \markup @{ ..texto de la segunda estrofa.. @} \markup @{ ..texto de la tercera estrofa.. @} \score @{ @dots{} \header @{ piece = "Menuetto" @} @} @end example @funindex \bookpart Se pueden agrupar distintas piezas de música en partes de un libro utilizando bloques @code{\bookpart}. Las partes de libro se separan por medio de saltos de página, y pueden dar comienzo con un título, como el libro propiamente dicho, mediante la especificación del bloque @code{\header}. @example \bookpart @{ \header @{ title = "Título del libro" subtitle = "Primera parte" @} \score @{ @dots{} @} @dots{} @} \bookpart @{ \header @{ subtitle = "Segunda parte" @} \score @{ @dots{} @} @dots{} @} @end example @node Varios archivos de salida a partir de uno de entrada @subsection Varios archivos de salida a partir de uno de entrada @translationof Multiple output files from one input file Si queremos varios archivos de salida a partir del mismo archivo @file{.ly}, podemos escribir varios bloques @code{\book}, donde cada uno de estos bloques @code{\book} dará como resultado un archivo de salida distinto. Si no especificamos ningún bloque @code{\book} en el archivo, LilyPond trata implícitamente todo el archivo como un solo bloque @code{\book}, véase @ref{Estructura del archivo}. Al producir varios archivos a partir de un solo archivo fuente, Lilypond se asegura de que ninguno de los archivos de salida de ningún bloque @code{\book} sobreescribe el archivo de salida producido por un @code{\book} anterior del mismo archivo de entrada. Lo hace añadiendo un sufijo al nombre de la salida para cada libro @code{\book} que utiliza el nombre del archivo de salida predeterminado, derivado del archivo fuente de entrada. El comportamiento predeterminado es añadir un sufijo con el número de versión para cada nombre que pueda coincidir; así: @example \book @{ \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \score @{ @dots{} @}   \layout @{ @dots{} @} @} @end example en el archivo fuente @file{eightminiatures.ly}, produce @itemize @item @file{eightminiatures.pdf}, @item @file{eightminiatures-1.pdf} y @item @file{eightminiatures-2.pdf}. @end itemize @node Nombres de los archivos de salida @subsection Nombres de los archivos de salida @translationof Output file names @funindex \bookOutputSuffix @funindex \bookOutputName Lilypond le ofrece unos mecanismos que le permiten controlar los nombres de archivo que se utilizan por parte de los diversos motores finales al producir los archivos de salida. En la sección anterior vimos cómo Lilypond evita las coincidencias de nombres al producir varias salidas a partir de un único archivo fuente de entrada. También podemos especificar nuestros propios sufijos para cada bloque @code{\book}, de manera que podemos producir, por ejemplo, archivos con los nombres @file{eightminiatures-Romanze.pdf}, @file{eightminiatures-Menuetto.pdf} y @file{eightminiatures-Nocturne.pdf} añadiendo una declaración @code{\bookOutputSuffix} dentro de cada bloque @code{\book}. @example \book @{ \bookOutputSuffix "Romanze" \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \bookOutputSuffix "Menuetto" \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \bookOutputSuffix "Nocturne" \score @{ @dots{} @}   \layout @{ @dots{} @} @} @end example También podemos especificar un nombre de archivo de salida diferente para cada bloque @code{book}, mediante la utilización de declaraciones @code{\bookOutputName}: @example \book @{ \bookOutputName "Romanze" \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \bookOutputName "Menuetto" \score @{ @dots{} @}   \layout @{ @dots{} @} @} \book @{ \bookOutputName "Nocturne" \score @{ @dots{} @}   \layout @{ @dots{} @} @} @end example El código anterior produce los siguientes archivos de salida: @itemize @item @file{Romanze.pdf}, @item @file{Menuetto.pdf} y @item @file{Nocturne.pdf}. @end itemize @node Estructura del archivo @subsection Estructura del archivo @translationof File structure @funindex \paper @funindex \midi @funindex \layout @funindex \header @funindex \score @funindex \book @funindex \bookpart Un archivo @file{.ly} puede contener cualquier número de expresiones del nivel superior, donde una expresión del nivel superior es una de las siguientes posibilidades: @itemize @item Una definición de salida, como @code{\paper}, @code{\midi} y @code{\layout}. Tal definición en el nivel más alto cambia los ajustes predeterminados para todo el libro. Si se introduce más de una de estas definiciones del mismo tipo en el nivel más alto, cualquier definición en una expresión posterior tiene prioridad. @item Una expresión directa de Scheme, como @code{#(set-default-paper-size "a7" 'landscape)} o @code{#(ly:set-option 'point-and-click #f)}. @item Un bloque @code{\header}. Esto establece el bloque de encabezamiento global. Es el bloque que contiene las definiciones de los ajustes para todo el libro, como el compositor, título, etc. @item Un bloque @code{\score}. Esta partitura se reúne con otras partituras del nivel superior, y se combina con ellas formando un @code{\book} (libro) único. Este comportamiento se puede cambiar estableciendo el valor de la variable @code{toplevel-score-handler} en el nivel superior. El @emph{handler} predeterminado se define en el archivo de inicio @file{../scm/lily.scm}. @item Un bloque @code{\book} combina lógicamente varios movimientos (es decir, varios bloques @code{\score}) en un solo documento. Si hay varias partituras @code{\score}, se crea un solo archivo de salida para cada bloque @code{\book}, en el que se concatenan todos los movimientos correspondientes. La única razón para especificar explícitamente bloques @code{\book} en un archivo de entrada @file{.ly} es si queremos crear varios archivos de salida a partir de un único archivo de entrada. Una excepción se da dentro de los documentos de lilypond-book, en los que tenemos que escribir explícitamente un bloque @code{\book} si queremos tener más de una única partitura @code{\score} o marcado @code{\markup} en el mismo ejemplo. Se puede cambiar este comportamiento estableciendo el valor de la variable @code{toplevel-book-handler} en el nivel superior. El @emph{handler} predeterminado se define en el archivo de inicio @file{../scm/lily.scm}. @item Un bloque @code{\bookpart}. Un libro puede dividirse en varias partes, utilizando bloques @code{\bookpart}, con objeto de facilitar la inserción de saltos de página o usar distintos ajustes de @code{\paper} en las distintas partes. @item Una expresión musical compuesta, como @example @{ c'4 d' e'2 @} @end example Esto añade la pieza al @code{\score} y la conforma dentro de un libro único junto a todas las demás partituras @code{\score} y expresiones musicales del nivel superior. En otras palabras, un archivo que contiene sólo la expresión musical anterior se traduce a @example \book @{ \score @{ \new Staff @{ \new Voice @{ @{ c'4 d' e'2 @} @} @} \layout @{ @} @} \paper @{ @} \header @{ @} @} @end example Se puede cambiar este comportamiento estableciendo el valor de la variable @code{toplevel-music-handler} en el nivel más alto. El @emph{handler} predeterminado se define en el archivo de inicio @file{../scm/lily.scm}. @item Un texto de marcado, por ejemplo una estrofa @example \markup @{ 2. Estrofa dos, línea uno @} @end example Los textos de marcado se colocan encima, en medio o debajo de las partituras o expresiones musicales, según donde aparezcan escritos. @cindex variables @item Una variable, como @example fulano = @{ c4 d e d @} @end example Esto se puede utilizar más tarde en el archivo escribiendo @code{\fulano}. El nombre de las variables ha de ser exclusivamente alfabético; sin números, guiones ni barras bajas. @end itemize El ejemplo siguiente muestra tres cosas que se pueden introducir en el nivel superior: @example \layout @{ % No justificar la salida ragged-right = ##t @} \header @{ title = "Do-re-mi" @} @{ c'4 d' e2 @} @end example En cualquier punto del archivo se pueden introducir cualquiera de las instrucciones léxicas siguientes: @itemize @item @code{\version} @item @code{\include} @item @code{\sourcefilename} @item @code{\sourcefileline} @item Un comentario de una línea, determinado por un símbolo @code{%} al principio. @item Un comentario de varias líneas, delimitado por @code{%@{ .. %@}}. @end itemize @cindex espacios en blanco Por lo general se ignoran los espacios entre elementos del flujo de entrada, y se pueden omitir o aumentar tranquilamente para mejorar la legibilidad. Sin embargo, los espacios se deben utilizar siempre para evitar errores, en las siguientes situaciones: @itemize @item Alrededor de todas y cada una de las llaves curvas de apertura y cierre. @item A continuación de las instrucciones y variables, es decir, todos los elementos que comienzan con un signo @code{\} de barra invertida. @item A continuación de todo elemento que se deba interpretar como expresión de Scheme, es decir, todo elemento que comience por un signo@tie{}@code{#}. @item Para separar los elementos de una expresión de Scheme. @item Dentro de @code{lyricmode} para separar todos los términos de las instrucciones @code{\override} y @code{\set}. Concretamente, hay que usar espacios alrededor del punto y el signo igual en instrucciones como @code{\override Score . LyricText #'font-size = #5} y antes y después de la instrucción completa. @end itemize @seealso Manual de aprendizaje: @rlearning{Cómo funcionan los archivos de entrada de LilyPond}. @node Títulos y cabeceras @section Títulos y cabeceras @translationof Titles and headers Casi toda la música impresa tiene un título y el nombre del compositor; ciertas piezas tienen mucha más información. @menu * Crear títulos cabeceras y pies de página:: * Cabeceras pies y títulos personalizados:: * Crear notas al pie:: * Referencia a números de página:: * Índice general:: @end menu @node Crear títulos cabeceras y pies de página @subsection Crear títulos, cabeceras y pies de página @translationof Creating titles headers and footers @menu * Explicación de los bloques de títulos:: * Presentación predeterminada de los bloques de título del libro y la partitura:: * Disposición predeterminada de las cabeceras y pies de página:: @end menu @node Explicación de los bloques de títulos @unnumberedsubsubsec Explicación de los bloques de títulos @translationof Title blocks explained @c TODO: figure out how \bookpart titles work Existen dos clases de bloques de títulos: el bloque principal de títulos que aparece encima del primer bloque @code{\score} de un libro, y los bloques individuales de título que aparecen dentro de cada bloque @code{\score}. Los campos de texto para los dos tipos de bloque se introducen mediante un bloque @code{\header}. Si el libro tiene una única partitura, el bloque @code{\header} se puede situar dentro o fuera del bloque @code{\score}. @warning{Recuerde que al añadir un bloque @bs{}@code{header} dentro de un bloque @bs{}@code{score}, la expresión musical debe aparecer antes del bloque @bs{}@code{header}.} @lilypond[papersize=a5,quote,verbatim,noragged-right] \header { title = "SUITE I." composer = "J. S. Bach." } \score { \new Staff \relative g, { \clef bass \key g \major \repeat unfold 2 { g16( d' b') a b d, b' d, } | \repeat unfold 2 { g,16( e' c') b c e, c' e, } | } \header { piece = "Prélude." } } \score { \new Staff \relative b { \clef bass \key g \major \partial 16 b16 | 4 b'16 a( g fis) g( d e fis) g( a b c) | d16( b g fis) g( e d c) b(c d e) fis( g a b) | } \header { piece = "Allemande." } } @end lilypond Los campos de texto extraídos del bloque prinicipal de título de un libro se pueden imprimir en todos los bloques @code{\score}, o suprimirse manualmente: @lilypond[papersize=a5,quote,verbatim,noragged-right] \book { \paper { print-all-headers = ##t } \header { title = "DAS WOHLTEMPERIRTE CLAVIER" subtitle = "TEIL I" % Do not display the tagline for this book tagline = ##f } \markup { \vspace #1 } \score { \new PianoStaff << \new Staff { s1 } \new Staff { \clef "bass" s1 } >> \header { title = "PRAELUDIUM I" opus = "BWV 846" % Do not display the subtitle for this score subtitle = ##f } } \score { \new PianoStaff << \new Staff { s1 } \new Staff { \clef "bass" s1 } >> \header { title = "FUGA I" subsubtitle = "A 4 VOCI" opus = "BWV 846" % Do not display the subtitle for this score subtitle = ##f } } } @end lilypond @seealso Referencia de la notación: @ref{Estructura del archivo}, @ref{Personalización de los bloques de título}. @node Presentación predeterminada de los bloques de título del libro y la partitura @unnumberedsubsubsec Presentación predeterminada de los bloques de título del libro y la partitura @translationof Default layout of book and score title blocks La disposición y formato de los bloques de título están controlados por medio de dos variables de @code{\paper}: @code{bookTitleMarkup} para el bloque de título @code{\header} principal y @code{scoreTitleMarkup} para los bloques @code{\header} individuales dentro de un bloque @code{\score}. @lilypond[papersize=a6,quote,verbatim,noragged-right] \header { % The following fields are centered dedication = "Dedication" title = "Title" subtitle = "Subtitle" subsubtitle = "Subsubtitle" instrument = "Instrument" % The following fields are left-aligned on the left side poet = "Poet" meter = "Meter" % The following fields are right-aligned on the right side composer = "Composer" arranger = "Arranger" } \score { { s1 } \header { % The following fields are placed at opposite ends of the same line piece = "Piece" opus = "Opus" } } @end lilypond @c Is the bit about \null markups true? -mp Los campos de texto que se dejan sin establecer dentro de un bloque @code{\header} se sustituyen por elementos de marcado nulos @code{\null} de manera que no ocupen espacio innecesariamente. Los ajustes predeterminados para @code{scoreTitleMarkup} sitúan los campos de texto @code{piece} y @code{opus} en extremos opuestos de la misma línea. @cindex breakbefore Utilice la variable @code{breakbefore} dentro de un bloque @code{\header} que está propiamente dentro de un bloque @code{\score} para hacer que los títulos del bloque @code{\header} del nivel superior aparezcan ocupando toda la primera página, empezando la música (definida en el bloque @code{\score}) en la página siguiente. @lilypond[papersize=a8landscape,verbatim,noragged-right] \book { \header { title = "This is my Title" subtitle = "This is my Subtitle" copyright = "This is the bottom of the first page" } \score { \repeat unfold 4 { e'' e'' e'' e'' } \header { piece = "This is the Music" breakbefore = ##t } } } @end lilypond @seealso Manual de aprendizaje: @rlearning{Cómo funcionan los archivos de entrada de LilyPond} Referencia de la notación: @ref{Estructura del archivo}. Archivos de inicio: @file{ly/titling-init.ly}. @node Disposición predeterminada de las cabeceras y pies de página @unnumberedsubsubsec Disposición predeterminada de las cabeceras y pies de página @translationof Default layout of headers and footers Las @emph{cabeceras} y los @emph{pies} de página son líneas de texto que aparecen en la parte más alta y en la más baja de las páginas separadas del texto principal de un libro. Se controlan mediante las siguientes variables de @code{\paper}: @itemize @item @code{oddHeaderMarkup} (marcado de cabecera impar) @item @code{evenHeaderMarkup} (marcado de cabecera par) @item @code{oddFooterMarkup} (marcado de pie impar) @item @code{evenFooterMarkup} (marcado de pie par) @end itemize Estas variables de marcado sólo pueden acceder a los campos de texto extraídos de bloques @code{\header} del nivel superior (que se aplican a todas las partituras del libro) y se definen en el archivo @file{ly/titling-init.ly}. De forma predeterminada: @itemize @item los números de página se sitúan automáticamente en el extremo superior izquierdo (si es par) o superior derecho (si es impar), a partir de la segunda página. @item el campo de texto @code{instrument} se sitúa en el centro en cada página, a partir de la segunda página. @item el texto de @code{copyright} se centra en la parte baja de la primera página. @item la línea @code{tagline} se centra al final de la última página, y debajo del texto de @code{copyright} si sólo hay una página. @end itemize @lilypond[papersize=a8landscape] \book { \score { \relative c' { c4 d e f } } } @end lilypond La línea de etiqueta tagline predeterminada se puede cambiar añadiendo un campo @code{tagline} en el bloque @code{\header} del nivel superior. @lilypond[papersize=a8landscape,verbatim] \book { \header { tagline = "... music notation for Everyone" } \score { \relative c' { c4 d e f } } } @end lilypond Para eliminar la línea @code{tagline}, establezca su valor a @code{##f}. @node Cabeceras pies y títulos personalizados @subsection Cabeceras, pies y títulos personalizados @translationof Custom headers footers and titles @c TODO: somewhere put a link to header spacing info @c (you'll have to explain it more in NR 4). @menu * Formateo personalizado del texto de los bloques de título:: * Personalización de los bloques de título:: * Disposición personalizada de cabeceras y pies de página:: @end menu @node Formateo personalizado del texto de los bloques de título @unnumberedsubsubsec Formateo personalizado del texto de los bloques de título @translationof Custom text formatting for title blocks Se pueden usar instrucciones @code{\markup} estándar para personalizar el texto de cualquier cabecera, pie o título dentro del bloque @code{\header}. @lilypond[quote,verbatim,noragged-right] \score { { s1 } \header { piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" } subtitle = \markup { \italic "(Excerpt)" } } } @end lilypond @seealso Referencia de la notación: @ref{Formatear el texto}. @node Personalización de los bloques de título @unnumberedsubsubsec Personalización de los bloques de título @translationof Custom layout for title blocks Las instrucciones @code{\markup} dentro del bloque @code{\header} son útiles para dar un formato simple al texto, pero no permiten un control preciso sobre la colocación de los títulos. Para personalizar la colocación de los campos de texto, use una o las dos variables de @code{\paper} siguientes: @itemize @item @code{bookTitleMarkup} (marcado de título del libro) @item @code{scoreTitleMarkup} (marcado de título de la partitura) @end itemize Estas variables de marcado se estudian en @ref{Presentación predeterminada de los bloques de título del libro y la partitura}. Los ajustes predeterminados para @code{scoreTitleMarkup} tal y como están definidos en el archivo @file{ly/titling-init.ly} son: @example scoreTitleMarkup = \markup @{ \column @{ \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @} \fill-line @{ \fromproperty #'header:piece \fromproperty #'header:opus @} @} @} @end example Esto sitúa los campos de texto @code{piece} y @code{opus} en extremos opuestos de la misma línea: @lilypond[quote,verbatim,noragged-right] \score { { s1 } \header { piece = "PRAELUDIUM I" opus = "BWV 846" } } @end lilypond Este ejemplo redefine @code{scoreTitleMarkup} de manera que el campo de texto @code{piece} aparece centrado y en un tipo de letra grande y en negrita. @lilypond[papersize=a5,quote,verbatim,noragged-right] \book { \paper { indent = 0\mm scoreTitleMarkup = \markup { \fill-line { \null \fontsize #4 \bold \fromproperty #'header:piece \fromproperty #'header:opus } } } \header { tagline = ##f } \score { { s1 } \header { piece = "PRAELUDIUM I" opus = "BWV 846" } } } @end lilypond Los campos de texto reservados normalmente para el bloque principal de título se pueden insertar dentro de los bloques de título de las partituras individuales con la variable @code{print-all-headers} establecida dentro del bloque @code{\paper}. Una desventaja de la utilización de este método es que los campos de texto que están orientados específicamente para el bloque @code{\header} del nivel superior han de suprimirse manualmente en cada uno de los bloques @code{\score}. Véase @ref{Explicación de los bloques de títulos}. Para evitarlo, añada el campo de texto deseado a la definición de @code{scoreTitleMarkup}. En el ejemplo siguiente, el campo de texto @code{composer} (asociado normalmente con @code{bookTitleMarkup}) se añade a @code{scoreTitleMarkup}, permitiendo que cada partitura muestre un compositor diferente: @lilypond[papersize=a5,quote,verbatim,noragged-right] \book { \paper { indent = 0\mm scoreTitleMarkup = \markup { \fill-line { \null \fontsize #4 \bold \fromproperty #'header:piece \fromproperty #'header:composer } } } \header { tagline = ##f } \score { { s1 } \header { piece = "MENUET" composer = "Christian Petzold" } } \score { { s1 } \header { piece = "RONDEAU" composer = "François Couperin" } } } @end lilypond También podemos crear nuestros propios campos de texto personalizados, y referirnos a ellos en la definición del elemento de marcado. @lilypond[papersize=a5,quote,verbatim,noragged-right] \book { \paper { indent = 0\mm scoreTitleMarkup = \markup { \fill-line { \null \override #`(direction . ,UP) { \dir-column { \center-align \fontsize #-1 \bold \fromproperty #'header:mycustomtext %% User-defined field \center-align \fontsize #4 \bold \fromproperty #'header:piece } } \fromproperty #'header:opus } } } \header { tagline = ##f } \score { { s1 } \header { piece = "FUGA I" mycustomtext = "A 4 VOCI" %% User-defined field opus = "BWV 846" } } } @end lilypond @seealso Referencia de la notación: @ref{Explicación de los bloques de títulos}. @node Disposición personalizada de cabeceras y pies de página @unnumberedsubsubsec Disposición personalizada de cabeceras y pies de página @translationof Custom layout for headers and footers @c can make-header and make-footer be removed from @c paper-defaults-init.ly? -mp Las instrucciones @code{\markup} dentro del bloque @code{\header} son de utilidad para dar formato al texto de una manera sencilla, pero no permiten un control preciso sobre la colocación de las cabeceras y los pies de página. Para personalizar la colocación de los campos de texto, use una o más de las siguientes variables de @code{\paper}: @itemize @item @code{oddHeaderMarkup} (marcado de encabezamiento impar) @item @code{evenHeaderMarkup} (marcado de encabezamiento par) @item @code{oddFooterMarkup} (marcado de pie de página impar) @item @code{evenFooterMarkup} (marcado de pie de página par) @end itemize El ejemplo siguiente centra los números de página en la parte baja de las páginas. En primer lugar, los ajustes predeterminados para @code{oddHeaderMarkup} y @code{evenHeaderMarkup} se eliminan definiéndolos como un marcado @emph{nulo}. Después de esto, se redefine @code{oddFooterMarkup} con el número de página centrado. Finalmente, @code{evenFooterMarkup} recibe la misma disposición definiéndola como @code{\oddFooterMarkup}: @lilypond[papersize=a8,quote,verbatim,noragged-right] \book { \paper { print-page-number = ##t print-first-page-number = ##t oddHeaderMarkup = \markup \null evenHeaderMarkup = \markup \null oddFooterMarkup = \markup { \fill-line { \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string } } evenFooterMarkup = \oddFooterMarkup } \score { \new Staff { s1 \break s1 \break s1 } } } @end lilypond @seealso Notation Reference: @ref{Explicación de los bloques de títulos}, @ref{Presentación predeterminada de los bloques de título del libro y la partitura}. @node Crear notas al pie @subsection Crear notas al pie @translationof Creating footnotes Se pueden crear dos tipos de notas al pie: automáticas y manuales. @menu * Panorámica de las notas al pie:: * Notas al pie automáticas:: * Notas al pie manuales:: @end menu @node Panorámica de las notas al pie @unnumberedsubsubsec Panorámica de las notas al pie @translationof Footnotes overview Las notas al pie automáticas crean indicadores numéricos incrementales; las notas al pie manuales, en cambio, permiten crear un indicador personalizado. Se pueden anotar todos los grobs (objetos gráficos), elementos @code{\markup} del nivel superior y las notas de los acordes. El orden en que se dibuja cada grob determina el orden en que se crean los indicadores (y por tanto las notas al pie) durante la compilación. @node Notas al pie automáticas @unnumberedsubsubsec Notas al pie automáticas @translationof Automatic footnotes Las notas al pie automáticas aceptan tres argumentos; el @var{Objeto de presentación} que anotar, la posición @samp{(x . y)} del indicador y un elemento de @code{\markup} que aparecerá en la nota, en la parte inferior de la página. La instrucción @code{\footnote} debe ir @emph{antes} del grob al que se adjunta la nota al pie: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \relative c' { \footnote #'(0.5 . -2) #'NoteHead \markup { The first note } a'4 b8 \footnote #'(0.5 . 1) #'NoteHead \markup { The third note } e c4 d4 } } @end lilypond Para anotar las notas de un acorde, la instrucción @code{\footnote} debe ir @emph{después} de la nota a la que se quiere adjuntar la nota al pie como un @code{TextScript}: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \relative c' { < c-\footnote #'(1 . -1.25) "Here is a C" es-\footnote #'(2 . -0.25) \markup { \italic "An E-flat" } g-\footnote #'(2 . 3) \markup { \bold "This is a G" } >1 } } @end lilypond @warning{Cuando las notas al pie tienen la misma posición vertical, se imprimen en orden de descendencia: cuando más alta es la nota al pie, más arriba está en la lista.} He aquí unos ejemplos más de grobs con notas al pie, que muestran también la posición relativa de las notas respecto de la línea informativa y la línea de copyright. @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { copyright = \markup { "Copyright 1970" } } \relative c' { \footnote #'(-3 . 0) #'DynamicText \markup { \bold Forte } \footnote #'(0 . 1.5) #'Slur \markup { A slur } a'4\f( \footnote #'(0 . -2) #'Beam \markup { Beam } b8)[ e] \footnote #'(1 . -1) #'Stem \markup { \teeny { This is a stem } } c4 \footnote #'(0 . 0.5) #'AccidentalCautionary \markup \italic { A cautionary accidental } \footnote #'(0.5 . -0.5) #'TextScript \markup \italic { Slow Down } dis?4_"rit." } } @end lilypond Para los elementos @code{\markup} del nivel superior, se requiere el uso de la instrucción @code{\auto-footnote}: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \markup { \auto-footnote "A simple tune" \italic "By me" } \relative c' { a'4 b8 e c4 d } } @end lilypond @node Notas al pie manuales @unnumberedsubsubsec Notas al pie manuales @translationof Manual footnotes @cindex notas al pie manuales Las notas al pie manuales toman cuatro argumentos; el @var{objeto de presentación} que se va a anotar, la posición @samp{(x . y)} del indicador, y dos instrucciones @code{\markup}; la primera es el indicador adjunto a la nota o grob, y la segunda es la nota al pie, en la parte inferior de la página. Como las notas al pie automáticas, las instrucciones @code{\footnote} manuales deben ir @emph{después} del grob que la nota al pie está anotando y adjuntada como un @code{TextScript}: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \relative c' { a'4-\footnote "1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" } b8 e-\footnote \markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note" c4 d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano" } } @end lilypond Para anotar notas de acordes con notas al pie manuales: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \relative c' { < c-\footnote "1" #'(1 . -1.25) "1. C" es-\footnote \markup { \bold "b" } #'(2 . -0.25) "b. E-flat" g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" } >1 } } @end lilypond @warning {Cuando las notas al pie tienen la misma posición vertical, las anotaciones se imprimen en orden de descendencia; cuanto más alta es la nota al pie, más arriba está en la lista.} He aquí algunos ejemplos de grobs anotados manualmente, mostrando también la posición relativa de las notas al pie respecto a la línea informativa a la de copyright: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \relative c' { \footnote \markup { \teeny 1 } #'(-3 . 0) #'DynamicText \markup { 1. \bold Forte } \footnote \markup { \teeny b } #'(0 . 1.5) #'Slur \markup { b. A slur } a'4\f( \footnote \markup { \teeny 3 } #'(0 . -2) #'Beam \markup { 3. Beam } b8)[ e] \footnote \markup { 4 } #'(1 . -1) #'Stem \markup { \bold 4. { This is a stem } } c4 \footnote \markup \concat \teeny { "sharp (v)" } #'(0 . 0.5) #'AccidentalCautionary \markup \italic { v. A cautionary accidental } \footnote \markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript \markup \italic { a. Slow Down } dis?4_"rit." \breathe \footnote \markup { \teeny \musicglyph #"rests.4" } #'(1.5 . -0.25) #'BreathingSign \markup { \null } } } @end lilypond Para anotar manualmente un elemento @code{\markup} del nivel superior: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \markup { "A simple tune" \footnote "*" \italic "* By me" } \relative c' { a'4 b8 e c4 d4 } } @end lilypond @seealso Manual de aprendizaje: @rlearning{Objetos e interfaces}. Referencia de la notación: @ref{Globos de ayuda}, @ref{Disposición de la página}, @ref{Indicaciones de texto}, @ref{Guiones de texto}, @ref{Títulos y cabeceras}. Referencia de funcionamiento interno: @rinternals{FootnoteEvent}, @rinternals{FootnoteItem}, @rinternals{FootnoteSpanner}, @rinternals{Footnote_engraver}. @knownissues Varias notas al pie en la misma página solo pueden ir apiladas unas sobre otras, y no se pueden imprimir en la misma línea. Las notas al pie no se pueden adjuntar a elementos de silencio multicompás @code{MultiMeasureRests}, y pueden colisionar con el objeto @code{Staff}, objetos de @code{\markup} y otras anotaciones @code{footnote}. Cuando use una cualquiera de las instrucciones @code{footnote} se requiere un bloque @code{\paper} que contenga @code{footnote-auto-number = ##f}. @node Referencia a números de página @subsection Referencia a números de página @translationof Reference to page numbers Un lugar determinado de una partitura puede señalizarse usando la instrucción @code{\label} (etiqueta), ya sea en el nivel superior o dentro de la música. Podemos referirnos a esta etiqueta más tarde dentro de un elemento de marcado, para obtener el número de la página en la que se sitúa el punto señalizado, usando la instrucción de marcado @code{\page-ref}. @lilypond[verbatim] \header { tagline = ##f } \book { \label #'firstScore \score { { c'1 \pageBreak \mark A \label #'markA c'1 } } \markup { The first score begins on page \page-ref #'firstScore "0" "?" } \markup { Mark A is on page \page-ref #'markA "0" "?" } } @end lilypond La instrucción de marcado @code{\page-ref} toma tres argumentos: @enumerate @item la etiqueta, un símbolo de scheme, p.ej. @code{#'firstScore}; @item un elemento de marcado que se usará como medidor para estimar las dimensiones del marcado; @item un elemento de marcado que se utilizará en sustitución del número de página si la etiqueta es desconocida. @end enumerate El motivo de que se necesite un medidor es que en el momento en que se están interpretando los marcados, los saltos de página aún no se han producido y por tanto los números de página no se conocen todavía. Para sortear este inconveniente, la interpretación real del marcado se retrasa hasta un momento posterior; sin embargo, las dimensiones del marcado se tienen que conocer de antemano, así que se usa el medidor para decidir estas dimensiones. Si el libro tiene entre 10 y 99 páginas, el medidor puede ser "00", es decir, un número de dos dígitos. @predefined @funindex \label @code{\label}, @funindex \page-ref @code{\page-ref}. @endpredefined @node Índice general @subsection Índice general @translationof Table of contents Se puede insertar un índice general o tabla de contenidos utilizando la instrucción @code{\markuplist \table-of-contents}. Los elementos que deben aparecer en la tabla de contenidos se introducen con la instrucción @code{\tocItem}, que se puede usar en el nivel más alto de la jerarquía del código, o dentro de una expresión musical. @verbatim \markuplist \table-of-contents \pageBreak \tocItem \markup "Primera partitura" \score { { c'4 % ... \tocItem \markup "Un punto concreto dentro de la primera partitura" d'4 % ... } } \tocItem \markup "Segunda partitura" \score { { e'4 % ... } } @end verbatim Los elementos de marcado que se usan para dar formato al índice general se encuentran definidos dentro del bloque @code{\paper}. Los elementos predeterminados son @code{tocTitleMarkup}, para dar formato al título de la tabla, y @code{tocItemMarkup}, para aplicar formato a los elementos del índice, que consisten en el título del elemento y el número de página. Estas variables se pueden cambiar por parte del usuario: @verbatim \paper { %% Traducir el título del índice al español: tocTitleMarkup = \markup \huge \column { \fill-line { \null "Índice general" \null } \hspace #1 } %% usar una fuente mayor tocItemMarkup = \markup \large \fill-line { \fromproperty #'toc:text \fromproperty #'toc:page } } @end verbatim Observe la forma en que nos referimos al texto y al número de página del elemento de índice, dentro de la definición @code{tocItemMarkup}. También se pueden definir nuevas instrucciones y elementos de marcado para crear índices generales más elaborados: @itemize @item en primer lugar, defina una variable de marcado nueva dentro del bloque @code{\paper} @item luego defina una función de música cuyo propósito es añadir un elemento al índice general utilizando esta variable de marcado del bloque @code{\paper}. @end itemize En el ejemplo siguiente se define un estilo nuevo para introducir los nombres de los actos de una ópera en el índice general: @verbatim \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) @end verbatim @lilypond[line-width=11.0\cm] \header { tagline = ##f } \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) \book { \markuplist \table-of-contents \tocAct \markup { Atto Primo } \tocItem \markup { Coro. Viva il nostro Alcide } \tocItem \markup { Cesare. Presti omai l'Egizzia terra } \tocAct \markup { Atto Secondo } \tocItem \markup { Sinfonia } \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } \markup \null } @end lilypond Se pueden añadir puntos de relleno entre un elemento y su número de página: @lilypond[verbatim,quote] \header { tagline = ##f } \paper { tocItemMarkup = \tocItemWithDotsMarkup } \book { \markuplist \table-of-contents \tocItem \markup { Allegro } \tocItem \markup { Largo } \markup \null } @end lilypond @seealso Archivos de inicio: @file{../ly/toc-init.ly}. @predefined @funindex \table-of-contents @code{\table-of-contents}, @funindex \tocItem @code{\tocItem}. @endpredefined @node Trabajar sobre los archivos de entrada @section Trabajar sobre los archivos de entrada @translationof Working with input files @menu * Inclusión de archivos de LilyPond:: * Distintas ediciones a partir de una misma fuente:: * Caracteres especiales:: @end menu @node Inclusión de archivos de LilyPond @subsection Inclusión de archivos de LilyPond @translationof Including LilyPond files @funindex \include @cindex including files Un proyecto grande se puede dividir en varios archivos. Para referirse a otro archivo, utilice @example \include "otroarchivo.ly" @end example La línea @code{\include "otroarchivo.ly"} equivale a pegar todo el contenido de @file{otroarchivo.ly} en el archivo actual en el lugar en que aparece el @code{\include}. Por ejemplo, en un proyecto grande podríamos querer archivos distintos para cada parte instrumental y crear un archivo de @qq{partitura completa} que reúne los archivos individuales de los instrumentos. Normalmente el archivo incluido define un cierto número de variables que a partir de entonces quedan disponibles para poderlas utilizar en el archivo de la partitura completa. En los archivos incluidos se pueden marcar las secciones etiquetadas para ayudar a hacerlas utilizables en distintos lugares de la partitura, véase @ref{Distintas ediciones a partir de una misma fuente}. Los archivos que están en el directorio de trabajo actual se pueden referenciar simplemente especificando el nombre después de la instrucción @code{\include}. Los archivos en otros lugares se pueden incluir proporcionando una referencia de ruta completa o una ruta relativa (pero utilice la barra inclinada normal del UNIX, /, no la barra invertida de DOS/Windows, \, como separador de directorio). Por ejemplo, si @file{material.ly} está situado un directorio por encima del directorio de trabajo actual, utilice @example \include "../material.ly" @end example @noindent o si los archivos de las partes orquestales incluidas están todos situados en un subdirectorio llamado @file{partes} dentro del directorio actual, use @example \include "partes/VI.ly" \include "partes/VII.ly" ... etc. @end example Los archivos de inclusión también pueden contener enunciados @code{\include} a su vez. De forma predeterminada, estos enunciados @code{\include} de segundo nivel no se interpretan hasta que se incorporan al archivo principal, por lo que los nombres de archivo que especifican deben ser relativos al directorio que contiene el archivo principal, no al directorio que contiene el archivo incluido. Sin embargo, este comportamiento se puede modificar pasando la opción @option{-drelative-includes} en la línea de órdenes (o mediante la adición de @code{#(ly:set-option 'relative-includes #t)} al principio del archivo principal de entrada). Con el valor de @code{relative-includes} establecido, la ruta de cada instrucción @code{\include} se considera relativa al archivo que contiene dicha instrucción. Este comportamiento es el recomendado y se convertirá en el comportamiento predeterminado en una versión futura de lilypond. También se pueden incluir archivos de un directorio que está en una ruta de búsqueda especificada como opción al invocar a LilyPond desde la línea de órdenes. Los archivos incluidos se especifican usando solamente su nombre de archivo. Por ejemplo, para compilar mediante este método un archivo @file{principal.ly} que incluye archivos situados en un subdirectorio llamado @file{partes}, cambie al directorio que contiene @file{principal.ly} e introduzca @example lilypond --include=partes principal.ly @end example y en @file{principal.ly} escriba @example \include "VI.ly" \include "VII.ly" ... etc. @end example Los archivos que se incluyen en muchas partituras se pueden poner en el directorio de LilyPond @file{../ly} (la localización de este directorio depende de la instalación: véase @rlearning{Otras fuentes de información}). Estos archivos se pueden incluir sencillamente por su nombre en un enunciado @code{\include}. De esta forma se incluyen los archivos dependientes del idioma como @file{espanol.ly}. LilyPond incluye de forma predeterminada ciertos archivos cuando se inicia el programa. Estas inclusiones no son visibles para el usuario, pero los archivos se pueden identificar ejecutando @code{lilypond --verbose} desde la línea de órdenes. Esto presentará una lista de rutas y archivos que utiliza LilyPond, junto a muchas otras indicaciones. De forma alternativa, pueden verse explicaciones sobre los archivos más importantes de este conjunto en @rlearning{Otras fuentes de información}. Estos archivos se pueden editar, pero los cambios realizados sobre ellos se perderán al instalar una nueva versión de LilyPond. Pueden verse ejemplos sencillos sobre el uso de @code{\include} en @rlearning{Partituras y particellas}. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}, @rlearning{Partituras y particellas}. @knownissues Si un archivo incluido recibe un nombre igual al de uno de los archivos de instalación de LilyPond, el archivo que tiene prioridad es el de los archivos de instalación de LilyPond. @node Distintas ediciones a partir de una misma fuente @subsection Distintas ediciones a partir de una misma fuente @translationof Different editions from one source Se pueden usar varios métodos para generar la producción de distintas versiones de una partitura a partir de la misma fuente musical. Las variables son quizá el más útil para combinar secciones extensas de música y/o anotaciones. Las etiquetas son más útiles para seleccionar una sección de entre varias secciones de música alternativas, más cortas, y se pueden usar también para dividir piezas de música en distintos trozos. Cualquiera que sea el método utilizado, la separación de la notación de la estructura de la partitura hará que sea más fácil cambiar la estructura dejando intacta la notación. @menu * Uso de las variables:: * Uso de etiquetas:: * Uso de ajustes globales:: @end menu @node Uso de las variables @unnumberedsubsubsec Uso de las variables @translationof Using variables @cindex variables, uso de las Si las secciones de la música se definen dentro de variables, se pueden reutilizar en distintas partes de la partitura, véase @rlearning{Organizar las piezas mediante variables}. Por ejemplo, una partitura vocal @notation{a cappella} con frecuencia incluye una reducción de piano de las partes para ensayar que es idéntica a la música vocal, por lo que ésta sólo se tiene que escribir una vez. Se puede combinar sobre un solo pentagrama la música de dos variables, véase @ref{Combinación automática de las partes}. He aquí un ejemplo: @lilypond[verbatim,quote] sopranoMusic = \relative c'' { a4 b c b8( a) } altoMusic = \relative g' { e4 e e f } tenorMusic = \relative c' { c4 b e d8( c) } bassMusic = \relative c' { a4 gis a d, } allLyrics = \lyricmode {King of glo -- ry } << \new Staff = "Soprano" \sopranoMusic \new Lyrics \allLyrics \new Staff = "Alto" \altoMusic \new Lyrics \allLyrics \new Staff = "Tenor" { \clef "treble_8" \tenorMusic } \new Lyrics \allLyrics \new Staff = "Bass" { \clef "bass" \bassMusic } \new Lyrics \allLyrics \new PianoStaff << \new Staff = "RH" { \set Staff.printPartCombineTexts = ##f \partcombine \sopranoMusic \altoMusic } \new Staff = "LH" { \set Staff.printPartCombineTexts = ##f \clef "bass" \partcombine \tenorMusic \bassMusic } >> >> @end lilypond Se pueden producir partituras distintas que presenten sólo las partes vocales o sólo la parte de piano, cambiando solamente los enunciados estructurales, sin modificar la notación musical. Para partituras extensas, las definiciones de variable se pueden poner en archivos separados que se incluyen más tarde, véase @ref{Inclusión de archivos de LilyPond}. @node Uso de etiquetas @unnumberedsubsubsec Uso de etiquetas @translationof Using tags @funindex \tag @funindex \keepWithTag @funindex \removeWithTag @funindex \pushToTag @funindex \appendToTag @cindex etiqueta @cindex mantener música etiquetada @cindex quitar música etiquetada @cindex división en música etiquetada La instrucción @code{\tag #'@var{parteA}} marca una expresión musical con el nombre @var{parteA}. Las expresiones etiquetadas de esta manera se pueden seleccionar o filtrar más tarde por su nombre, usando bien @code{\keepWithTag #'@var{nombre}} o bien @code{\removeWithTag #'@var{nombre}}. El resultado de la aplicación de estos filtros a la música etiquetada es como sigue: @multitable @columnfractions .5 .5 @headitem Filtro @tab Resultado @item Música etiquetada precedida de @code{\keepWithTag #'@var{nombre}} @tab Se incluye la música no etiquetada y la música etiquetada con @var{nombre}; se excluye la música etiquetada con cualquier otro nombre de etiqueta. @item Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}} @tab Se incluye la música no etiquetada y la música etiquetada con cualquier nombre de etiqueta distinto a @var{nombre}; se excluye la música etiquetada con @var{nombre}. @item Música etiquetada no precedida de @code{\keepWithTag} ni de @code{\removeWithTag} @tab Se incluye toda la música etiquetada y no etiquetada. @end multitable Los argumentos de las instrucciones @code{\tag}, @code{\keepWithTag} y @code{\removeWithTag} deben ser un símbolo (como @code{#'partitura} o @code{#'parte}), seguido de una expresión musical. En el ejemplo siguiente vemos dos versiones de una pieza musical, una que muestra trinos con la notación usual y otra con los trinos expandidos explícitamente: @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music } @end lilypond @noindent De forma alternativa, a veces es más fácil excluir secciones de música: @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills { d8.\trill } \tag #'expand {\repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music } @end lilypond El filtrado con etiquetas se puede aplicar a articulaciones, textos, etc. anteponiendo @example -\tag #'@var{mi-etiqueta} @end example a una articulación. Por ejemplo, esto define una nota con una indicación opcional de digitación y una nota con una anotación condicional: @example c1-\tag #'finger ^4 c1-\tag #'warn ^"¡Ojo!" @end example Se pueden poner varias etiquetas sobre expresiones con varias entradas de @code{\tag}: @lilypond[quote,verbatim] music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'b \tag #'both { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >> @end lilypond Se pueden aplicar varios filtros @code{\removeWithTag} a una sola expresión musical para quitar varias secciones etiquetadas con nombres distintos: @lilypond[verbatim,quote] music = \relative c'' { \tag #'A { a4 a a a } \tag #'B { b4 b b b } \tag #'C { c4 c c c } \tag #'D { d4 d d d } } { \removeWithTag #'B \removeWithTag #'C \music } @end lilypond Dos o más filtros @code{\keepWithTag} aplicados a una sola expresión musical producen la eliminación de @emph{todas} las secciones etiquetadas, porque el primer filtro quita todas las secciones etiquetadas excepto la que se nombra, y el segundo filtro elimina incluso esa sección etiquetada. A vecespodemos desear dividir la música en un determinado lugar dentro de una expresión musical existente. Podemos usar @code{\pushToTag} y @code{\appendToTag} para añadir material delante o al final de los @code{elements} de una construcción musical existente. No toda construcción musical tiene la parte @code{elements}, pero las músicas secuenciaes y simultáneas son dos apuestas seguras: @lilypond[verbatim,quote] test = { \tag #'here { \tag #'here <> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \test \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \test } @end lilypond Las dos instrucciones admiten una etiqueta, el material que dividir en cada ocurrencia de la etiqueta, y la expresión etiquetada. Las instrucciones aseguran que se copia todo lo que cambian, de forma que el código original @code{\test} retiene su significado. @seealso Manual de aprendizaje: @rlearning{Organizar las piezas mediante variables}. Referencia de la notación: @ref{Combinación automática de las partes}, @ref{Inclusión de archivos de LilyPond}. @ignore @c This warning is more general than this placement implies. @c Rests are not merged whether or not they come from tagged sections. @c Should be deleted? -td @knownissues Multiple rests are not merged if you create a score with more than one tagged section at the same place. @end ignore @node Uso de ajustes globales @unnumberedsubsubsec Uso de ajustes globales @translationof Using global settings @cindex include-settings Se pueden incluir ajustes globales a partir de un archivo distinto: @example lilypond -dinclude-settings=MIS_AJUSTES.ly MI_PARTITURA.ly @end example En archivos diferentes se pueden almacenar grupos de ajustes como el tamaño de la página o las fuentes tipográficas. Ello permite hacer diferentes ediciones de la mism a partitura así como aplicar ajustes estándar a muchas partituras, simplemente por medio de la especificación del archivo de ajustes adecuado. Esta técnica también funciona bien con el uso de hojas de estilo, como se estudia en @rlearning{Hojas de estilo}. @seealso Manual de aprendizaje: @rlearning{Organizar las piezas mediante variables}, @rlearning{Hojas de estilo}. Referencia de la notación: @ref{Inclusión de archivos de LilyPond}. @node Caracteres especiales @subsection Caracteres especiales @translationof Special characters @cindex caracteres especiales @cindex caracteres no ASCII @menu * Codificación del texto:: * Unicode:: * Alias de ASCII:: @end menu @node Codificación del texto @unnumberedsubsubsec Codificación del texto @translationof Text encoding @cindex UTF-8 LilyPond usa el conjunto de caracteres definido por el consorcio Unicode y la norma ISO/IEC 10646. Define un nombre único y un código para los conjuntos de caracteres que se utilizan en prácticamente todos los idiomas modernos y también en muchos otros. Unicode se puede implementar utilizando varios esquemas de codificación distintos. LilyPond usa la codificación UTF-8 (UTF son las siglas de @emph{Unicode Transformation Format}, o formato de transformación de Unicode) que representa todos los caracteres comunes de Latin en un solo byte, y representa otros caracteres usando un formato de longitud variable de hasta cuatro bytes. El aspecto visual real de los caracteres viene determinado por los glifos que se definen en las fuentes tipográficas concretas que se tengan disponibles: una fuente tipográfica define la asignación de un subconjunto de los códigos de Unicode a glifos. LilyPond usa la biblioteca Pango para representar y disponer tipográficamente textos multilingües. LilyPond no realiza ninguna conversión en la codificación de la entrada. Esto significa que cualquier text, ya sea el título, la letra de la canción o una instrucción musical que contenga caracteres distintos a los del conjunto ASCII, se deben codificar en UTF-8. La forma más fácil de escribir dicho texto es utilizar un editor preparado para Unicode y guardar el archivo con la codificación UTF-8. Casi todos los editores modernos populares contemplan el UTF-8, por ejemplo lo hacen vim, Emacs, jEdit, y GEdit. Todos los sistemas MS Windows posteriores a NT usan Unicode como codificación de caracteres nativa, de manera que incluso el accesorio Bloc de Notas (Notepad) puede editar y guardar un archivo en el formato UTF-8. Una alternativa más funcional para Windows es BabelPad. Si un archivo de entrada que contiene un carácter que no es ASCII, no se guarda en el formato UTF-8, se genera el mensaje de error @example FT_Get_Glyph_Name () error: argumento inválido @end example He aquí un ejemplo que muestra texto cirílico, hebreo y portugués: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } % Hebrew hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } % Portuguese portuguese = \lyricmode { à vo -- cê uma can -- ção legal } \relative c' { c2 d e f g f e } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \portuguese } @end lilypond @node Unicode @unnumberedsubsubsec Unicode @cindex Unicode Para introducir un carácter aislado para el que se conoce el punto de código Unicode pero no está disponible en el editor que se está usando, use @code{\char ##xhhhh} o bien @code{\char #dddd} dentro de un bloque @code{\markup}, donde @code{hhhh} es el código hexadecimal del carácter en cuestión y @code{dddd} es su valor decimal correspondiente. Pueden omitirse los ceros iniciales, pero es costumbre indicar los cuatro caracteres en la representación hexadecimal (observe que @emph{no} debe utilizarse la codificación UTF-8 del punto de código Unicode después de @code{\char}, pues la codificación UTF-8 contiene bits adicionales que indican el número de octetos). Hay tablas de códigos Unicode y un índice de nombres de caracteres que da el punto de código en hexadecimal para cualquier carácter en el portal del Consorcio Unicode, @uref{http://www.unicode.org/}. Por ejemplo, tanto @code{\char ##x03BE} como @code{\char #958} insertan el carácter Unicode U+03BE, que tiene el nombre Unicode @qq{Letra griega Xi pequeña}. Se puede escribir de esta forma cualquier punto de código Unicode, y si todos los caracteres especiales se escriben en este formato no es necesario guardar el archivo de entrada en formato UTF-8. Por supuesto, debe estar instalada y estar disponible para LilyPond una fuente tipográfica que contenga codificados todos estos caracteres. El ejemplo siguiente muestra valores hexadecimales Unicode que se usan en cuatro lugares: en una llamada de ensayo, como texto de articulación, en la letra y como texto independiente bajo la partitura: @lilypond[quote,verbatim] \score { \relative c'' { c1 \mark \markup { \char ##x03EE } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } \markup { "Copyright 2008--2012" \char ##x00A9 } @end lilypond @cindex copyright, símbolo de Para escribir el símbolo de copyright en la nota de créditos, utilice: @example \header @{ copyright = \markup @{ \char ##x00A9 "2008" @} @} @end example @node Alias de ASCII @unnumberedsubsubsec Alias de ASCII @translationof ASCII aliases Se puede incluir una lista de alias de ASCII para caracteres especiales: @lilypond[quote,verbatim] \paper { #(include-special-characters) } \markup "&flqq; – &OE;uvre incomplète… &frqq;" \score { \new Staff { \repeat unfold 9 a'4 } \addlyrics { This is al -- so wor -- kin'~in ly -- rics: –_&OE;… } } \markup \column { "The replacement can be disabled:" "– &OE; …" \override #'(replacement-alist . ()) "– &OE; …" } @end lilypond También podemos hacer nuestros propios alias, ya sea de forma global: @lilypond[quote,verbatim] \paper { #(add-text-replacements! '(("100" . "hundred") ("dpi" . "dots per inch"))) } \markup "A 100 dpi." @end lilypond o local: @lilypond[quote,verbatim] \markup \replace #'(("100" . "hundred") ("dpi" . "dots per inch")) "A 100 dpi." @end lilypond @seealso Referencia de la notación: @ref{Lista de caracteres especiales}. Archivos instalados: @file{ly/text-replacements.ly}. @node Controlar la salida @section Controlar la salida @translationof Controlling output @menu * Extracción de fragmentos de música:: * Saltar la música corregida:: * Formatos de salida alternativos:: * Sustituir la tipografía de la notación:: @end menu @node Extracción de fragmentos de música @subsection Extracción de fragmentos de música @translationof Extracting fragments of music Es posible citar pequeños fragmentos de una partitura grande directamente a partir de la salida. Puede compararse con la separación de una pieza de una partitura, recortándola con tijeras. Esto se hace definiendo los compases que se deben recortar. Por ejemplo, la inclusión de la siguiente definición @verbatim \layout { clip-regions = #(list (cons (make-rhythmic-location 5 1 2) (make-rhythmic-location 7 3 4))) } @end verbatim @noindent extrae un fragmento empezando por la mitad del quinto compás y finalizando en el séptimo compás. El significado de @code{5 1 2} es: después de una blanca (1/2) en el compás 5, y el de @code{7 3 4} después de tres negras del compás 7. Se pueden definir más zonas de recorte añadiendo más parejas de definición de tiempo rhythmic-location a la lista. Para poder utilizar esta funcionalidad, LilyPond se debe invocar con la opción @option{-dclip-systems}. Los recortes aparecen en la salida como archivos EPS, y se convierten en PDF y PNG si estos formatos también están activados. Para ver más información sobre los formatos de salida, consulte @rprogram{Invocar a LilyPond}. @node Saltar la música corregida @subsection Saltar la música corregida @translationof Skipping corrected music @funindex skipTypesetting @funindex showFirstLength @funindex showLastLength Al escribir o copiar música, normalmente sólo es interesante de ver y corregir la música cercana al final (donde estamos añadiendo las notas). Para acelerar este proceso de corrección, es posible saltar la composición tipográfica de todos excepto unos pocos de los últimos compases. Esto se consigue poniendo @verbatim showLastLength = R1*5 \score { ... } @end verbatim @noindent en nuestro archivo fuente. Esto hará que se tracen sólo los últimos cinco compases (suponiendo un compás de 4/4) de cada una de las partituras @code{\score} del archivo de entrada. Para piezas largas, el tipografiado de únicamente una parte pequeña es con frecuencia un orden de magnitud más rápido que el de la obra completa. Si estamos trabajando sobre el principio de una partitura que ya hemos tipografiado (p.ej., para añadir una parte instrumental nueva), también puede ser útil la propiedad @code{showFirstLength}. Este mecanismo de pasar por alto partes de un partitura se puede controlar con un grano más fino mediante la propiedad @code{Score.skipTypesetting}. Cuando su valor está establecido, no se lleva a cabo ningún tipografiado en absoluto. Esta propiedad se usa también para controlar la salida al archivo MIDI. Observe que pasa por alto todos los eventos, incluidos el tempo y los cambios de instrumento. Está usted advertido. @lilypond[quote,relative=2,ragged-right,verbatim] c8 d \set Score.skipTypesetting = ##t e8 e e e e e e e \set Score.skipTypesetting = ##f c8 d b bes a g c2 @end lilypond En música polifónica, @code{Score.skipTypesetting} afecta a todas las voces y pentagramas, ahorrando más tiempo incluso. @node Formatos de salida alternativos @subsection Formatos de salida alternativos @translationof Alternative output formats @cindex salida de gráficos de vector escalables @cindex SVG, salida @cindex salida de PostScript encapsulado @cindex EPS, salida @cindex PostScript encapsulado, salida de Los formatos de salida predeterminados para la partitura impresa son el formato de documento portátil (PDF) y PostScript (PS). Los formatos de salida Gráficos de vector escalables (SVG), PostScript encapsulado (EPS) y Gráficos de red portátiles (PNG) también están disponibles a través de opciones de la línea de órdenes, véase @rprogram{Opciones de la línea de órdenes para lilypond}. @node Sustituir la tipografía de la notación @subsection Sustituir la tipografía de la notación @translationof Replacing the notation font Gonville es una alternativa a la tipografía Feta que se utiliza en LilyPond y se puede descargar de: @example @uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} @end example Aquí presentamos algunos compases de muestra tipografiados con la fuente Gonville: @c NOTE: these images are a bit big, but that's important @c for the font comparison. -gp @sourceimage{Gonville_after,,,} Aquí hay unos compases de muestra tipografiados en la fuente Feta de LilyPond: @sourceimage{Gonville_before,,,} @subsubheading Instrucciones de instalación para MacOS Descargue y extraiga el archivo zip. Copie la carpeta @code{lilyfonts} a @file{@var{SHARE_DIR}/lilypond/current}; para más información, consulte @rlearning{Otras fuentes de información}. Renombre la carpeta @code{fonts} existente a @code{fonts_orig} y la carpeta @code{lilyfonts} a @code{fonts}. Para volver a la fuente Feta, invierta el proceso. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}. @knownissues Gonville no se puede usar para tipografiar notación de @q{Música Antigua} y es probable que cualquier nuevo glifo en versiones posteriores de LilyPond no existan en la familia tipográfica Gonville. Diríjase a la página web del autor para obtener más información sobre éste y otros asuntos, entre ellos el régimen de licencias de Gonville. @node Salida MIDI @section Salida MIDI @translationof MIDI output @cindex sonido @cindex MIDI El MIDI (Musical Instrument Digital Interface, Interfase Digital para Instrumentos Musicales) es un estándar para interconectar y controlar instrumentos musicales electrónicos. Un archivo o secuencia MIDI es una serie de notas dentro de un conjunto de pistas. No es un archivo de sonidos reales; se necesita un programa reproductor especial para traducir la serie de notas en sonidos de verdad. Cualquier música se puede convertir a archivos MIDI, de manera que podamos escuchar lo que hayamos introducido. Esto es muy conveniente para comprobar la corrección de la música; las octavas equivocadas o las alteraciones erróneas se ponen de relieve muy claramente al escuchar la salida MIDI. La salida estándar de MIDI es un poco primitiva; de forma opcional, se encuentra disponible una salida MIDI mejorada y mucho más realista, por medio de @ref{El script Articulate}. La salida MIDI reserva un canal por cada pentagrama, y reserva el canal 10 para la percusión. Sólo hay 16 canales MIDI por cada dispositivo, por lo que si la partitura tiene más de 15 pautas, los canales MIDI se reutilizarán. @menu * Crear archivos MIDI:: * El bloque MIDI:: * ¿Qué sale por el MIDI?:: * Repeticiones y MIDI:: * Control de los matices en el MIDI:: * Percusión en MIDI:: * El script Articulate:: @end menu @node Crear archivos MIDI @subsection Crear archivos MIDI @translationof Creating MIDI files Para crear un MIDI a partir de una pieza de música, escriba un bloque @code{\midi} en la partitura, por ejemplo: @example \score @{ @var{...música...} \midi @{ @} @} @end example Si hay un bloque @code{\midi} dentro de un @code{\score} que no tenga ningún bloque @code{\layout}, solamente se producirá MIDI. Si se necesita una notación impresa, debe haber también un bloque @code{\layout}: @example \score @{ @var{...música...} \midi @{ @} \layout @{ @} @} @end example Se traducen correctamente a la salida MIDI la altura y duración de las notas, las ligaduras de unión, matices y cambios de tempo. Las indicaciones dinámicas, crescendi y decrescendi se traducen a niveles de volumen MIDI. Las marcas dinámicas se traducen a una fracción fija del rango de volumen MIDI disponible. Los crescendi y decrescendi hacen que el volumen varía linealmente entre sus dos extremos. El efecto de las indicaciones dinámicas sobre la salida MIDI se puede eliminar por completo, véase @ref{El bloque MIDI}. El tempo inicial y los cambios de tempo posteriores se pueden especificar utilizando la instrucción @code{\tempo} dentro de la propia notación musical. Se reflejan en cambios de tempo en la salida MIDI. Esta instrucción normalmente hace que se imprima la indicación metronómica, pero esto se puede eliminar, véase @ref{Indicaciones metronómicas}. Más abajo se describe una forma alternativa de especificar el tempo MIDI inicial o global, véase @ref{El bloque MIDI}. Debido a ciertas limitaciones de Windows, la extensión predeterminada para los archivos MIDI en Windows es @code{.mid}. Otros sistemas operativos utilizan la extensión @code{.midi}. Si prefiere una extensión diferente, inserte la siguiente línea en el nivel jerárquico superior del archivo de entrada, antes del inicio de cualquier bloque @code{\book}, @code{\bookpart} o @code{\score}: @example #(ly:set-option 'midi-extension "midi") @end example La línea anterior establece la extensión predeterminada para los archivos MIDI a @code{.midi}. De forma alternativa, esta opción se puede también proporcionar en la línea de órdenes: @example lilypond … -dmidi-extension=midi archivoLily.ly @end example @unnumberedsubsubsec Nombres de instrumentos @cindex instrumento, nombres de @funindex Staff.midiInstrument El nombre del instrumento MIDI se establece mediante la propiedad @code{Staff.midiInstrument}. El nombre del instrumento se debe elegir de entre los que están en la lista que aparece en @ref{Instrumentos MIDI}. @example \new Staff @{ \set Staff.midiInstrument = #"glockenspiel" @var{...notes...} @} @end example @example \new Staff \with @{midiInstrument = #"cello"@} @{ @var{...notes...} @} @end example Si el instrumento elegido no coincide exactamente con uno de los instrumentos de la lista de instrumentos MIDI, se usará el instrumento Piano de Cola (@code{"acoustic grand"}). @snippets @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] {changing-midi-output-to-one-channel-per-voice.ly} @knownissues @c In 2.11 the following no longer seems to be a problem -td @ignore Unterminated (de)crescendos will not render properly in the midi file, resulting in silent passages of music. The workaround is to explicitly terminate the (de)crescendo. For example, @example @{ a4\< b c d\f @} @end example @noindent will not work properly but @example @{ a4\< b c d\!\f @} @end example @noindent will. @end ignore Los cambios del volumen MIDI sólo tienen lugar al principio de la nota, por lo que los crescendi y decrescendi no pueden afectar al volumen de una sola nota. No todos los reproductores de MIDI manejar adecuadamente los cambios de tempo de la salida MIDI. Entre los reproductores que se sabe que funcionan se encuentran el Reproductor de Medios de MS Windows y @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. @node El bloque MIDI @subsection El bloque MIDI @translationof MIDI block @cindex bloque MIDI Si se requiere una salida MIDI, debe aparecer un bloque @code{\midi} dentro de un bloque de partitura. Es análogo al bloque layout de diseño de página, pero algo más simple. Con frecuencia, el bloque @code{\midi} se deja vacío, pero puede contener reorganizaciones de contextos, definiciones de contexto nuevas o código para fijar valores de propiedades. Por ejemplo, en el ejemplo siguiente se establece el tempo inicial exportado al archivo MIDI sin hacer que se imprima una indicación de tempo: @example \score @{ @var{...música...} \midi @{ \tempo 4 = 72 @} @} @end example En este ejemplo, el tempo se establece a 72 pulsos de negra por minuto. Esta clase de especificación de tempo no puede tomar como argumento una figura con puntillo. Si necesitamos una figura con puntillo, dividimos la nota con puntillo en figuras más pequeñas. Por ejemplo, un tempo de 90 negras con puntillo por minuto se puede especificar como 270 corcheas por minuto: @example tempoWholesPerMinute = #(ly:make-moment 270 8) @end example @cindex MIDI, definiciones de contexto Las definiciones de contexto siguen con precisión la misma sintaxis que la de un bloque @code{\layout}. Los módulos de traducción para el sonido reciben el nombre de ejecutantes. Los contextos para la salida MIDI se definen en @file{../ly/performer-init.ly}, véase @rlearning{Otras fuentes de información}. Por ejemplo, para eliminar el efecto de los matices de la salida MIDI, inserte las líneas siguientes en el bloque @code{\midi@{ @}}. @example \midi @{ ... \context @{ \Voice \remove "Dynamic_performer" @} @} @end example La salida MIDI se crea sólo cuando se incluye un bloque @code{\midi} dentro de un bloque de partitura definido con una instrucción @code{\score}. @example \score @{ @{ @dots{}notas@dots{} @} \midi @{ @} @} @end example @node ¿Qué sale por el MIDI? @subsection ¿Qué sale por el MIDI? @translationof What goes into the MIDI output? @unnumberedsubsubsec Contemplado en el MIDI @cindex alturas en MIDI @cindex MIDI, alturas @cindex cuartos de tono en MIDI @cindex MIDI, cuartos de tono @cindex microtonos en MIDI @cindex MIDI, microtonos @cindex acordes, nombres de, en MIDI @cindex MIDI, nombres de @cindex duraciones en MIDI @cindex MIDI, duraciones @cindex Articlulate, scripts @cindex MIDI, articulaciones @cindex articulaciones en MIDI @cindex trinos en MIDI @cindex grupetos en MIDI @cindex rallentando en MIDI @cindex accelerando en MIDI @c TODO etc Los siguientes elementos de notación se reflejan en la salida MIDI: @itemize @item Alturas @item Microtonos (véase @ref{Alteraciones accidentales}. La reproducción necesita un reproductor que contemple la curvatura de tono o @emph{pitch bend}.) @item Acordes escritos como nombres de acorde @item Ritmos escritos como duraciones de las notas, incluidos los grupos de valoración especial @item Trémolos escritos sin @q{@code{:}[@var{número}]} @item Ligaduras de unión @item Matices o indicaciones de dinámica @item Crescendi y decrescendi sobre varias notas @item Cambios de tempo insertados con una marca metronómica @item Letra de las canciones @end itemize Utilizando @ref{El script Articulate}, a la lista anterior se añaden una serie de elementos: @itemize @item Articulaciones (ligaduras de expresión, picados, etc) @item Trinos, mordentes circulares @item Rallentando y accelerando @end itemize @unnumberedsubsubsec No contemplado en el MIDI @c TODO index as above Los siguientes elementos de notación no tienen ningún efecto sobre la salida MIDI, a no ser que utilicemos @ref{El script Articulate}: @itemize @item Duraciones escritas como anotaciones, p.ej. el swing @item Cambios de tempo escritos como anotaciones sin marca de tempo @item Staccato y otras articulaciones y ornamentos @item Ligaduras de expresión y de fraseo @item Crescendi y decrescendi sobre una nota única @item Trémolos introducidos con @q{@code{:}[@var{número}]} @item Bajo cifrado @item Acordes microtonales @end itemize @node Repeticiones y MIDI @subsection Repeticiones y MIDI @translationof Repeats in MIDI @cindex repeticiones, expandir @funindex \unfoldRepeats Con un poco de trucaje, se puede hacer que cualquier tipo de repetición esté presente en la salida MIDI. Esto se consigue mediante la aplicación de la función musical @code{\unfoldRepeats}. Esta función cambia todas las repeticiones a repeticiones desplegadas. @lilypond[quote,verbatim] \unfoldRepeats { \repeat tremolo 8 { c'32 e' } \repeat percent 2 { c''8 d'' } \repeat volta 2 { c'4 d' e' f' } \alternative { { g' a' a' g' } { f' e' d' c' } } } \bar "|." @end lilypond En partituras con varias voces, el desplegado de las repeticiones en la salida MIDI solo se produce correctamente si @emph{todas y cada una} de las voces incluye las repeticiones de manera completa y explícita. Al crear un archivo de partitura que use @code{\unfoldRepeats} para el MIDI, es necesario hacer dos bloques @code{\score}: uno para el MIDI (con repeticiones desplegadas) y otro para la notación impresa (con repeticiones de volta --primera y segunda vez--, tremolo --trémolo--, y percent --repetición de compases--). Por ejemplo, @example \score @{ @var{..música..} \layout @{ .. @} @} \score @{ \unfoldRepeats @var{..música..} \midi @{ .. @} @} @end example @node Control de los matices en el MIDI @subsection Control de los matices en el MIDI @translationof Controlling MIDI dynamics La dinámica en el MIDI está implementada por medio del intérprete Dynamic_performer que reside de forma predeterminada dentro del contexto Voice. Es posible controlar el volumen MIDI general, el volumen relativo de los matices dinámicos y el volumen relativo de los distintos instrumentos. @unnumberedsubsubsec Indicaciones dinámicas Los matices o indicaciones de dinámica se traducen a una fracción fija del rango de volumen MIDI disponible. Las fracciones predeterminadas se extienden desde 0.25 para @notation{ppppp} hasta 0.95 para @notation{fffff}. El conjunto de indicaciones dinámicas y las fracciones asociadas pueden verse en @file{../scm/midi.scm}, véase @rlearning{Otras fuentes de información}. Este conjunto de fracciones se puede cambiar o extender proporcionando una función que toma como argumento una indicación dinámica y devuelve la fracción requerida, y estableciendo @code{Score.dynamicAbsoluteVolumeFunction} a esta función. Por ejemplo, si se requiere una indicación dinámica @notation{rinforzando}, @code{\rfz}, ésta no tiene ningún efecto predeterminado sobre el volumen MIDI, pues no está incluida en el conjunto predeterminado. De igual manera, si se define una indicación dinámica nueva con @code{make-dynamic-script}, ésta tampoco estará incluida en el conjunto predeterminado. El ejemplo siguiente muestra cómo hay que añadir el volumen MIDI para estas indicaciones dinámicas. La función Scheme establece la fracción a 0.9 si se encuentra una indicación dinámica rfz, y en caso contrario llama a la función predeterminada. @lilypond[verbatim,quote] #(define (myDynamics dynamic) (if (equal? dynamic "rfz") 0.9 (default-dynamic-absolute-volume dynamic))) \score { \new Staff { \set Staff.midiInstrument = #"cello" \set Score.dynamicAbsoluteVolumeFunction = #myDynamics \new Voice { \relative c'' { a4\pp b c-\rfz } } } \layout {} \midi {} } @end lilypond Como alternativa, si se necesitara redefinir la tabla completa de fracciones, sería mejor usar el procedimiento @notation{default-dynamic-absolute-volume} que aparece en @file{../scm/midi.scm} y la tabla asociada como modelo. El último ejemplo de esta sección muestra cómo se puede hacer esto. @unnumberedsubsubsec Volumen maestro MIDI El volumen general máximo y mínimo de las indicaciones dinámicas de MIDI se controla estableciendo valores para las propiedades @code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel de @code{Score}. Estas propiedades tienen efecto solamente sobre las indicaciones dinámicas, por ello si queremos que tengan validez desde el comienzo de la partitura, se debe colocar allí una indicación de dinámica. La fracción que corresponde a cada indicación dinámica se modifica con esta fórmula: @example midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fracción @end example En el ejemplo siguiente, el rango de intensidad dinámica del volumen general MIDI está limitado al intervalo desde 0.2 hasta 0.5. @lilypond[verbatim,quote] \score { << \new Staff { \key g \major \time 2/2 \set Staff.midiInstrument = #"flute" \new Voice \relative c''' { r2 g\mp g fis~ fis4 g8 fis e2~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout {} \midi { \context { \Score tempoWholesPerMinute = #(ly:make-moment 72 2) midiMinimumVolume = #0.2 midiMaximumVolume = #0.5 } } } @end lilypond @unnumberedsubsubsec Balance entre instrumentos (i) Si las propiedades de volumen MIDI máximo y mínimo están establecidas en el contexto @code{Staff} se pueden controlar los volúmenes relativos de los instrumentos MIDI. Esto proporciona un ecualizador de instrumentos básico que puede realzar significativamente la calidad de la salida MIDI. En este ejemplo se reduce el volumen del clarinete con relación al de la flauta. Debe haber una indicación dinámica en la primera nota de cada instrumento para que esto funcione correctamente. @lilypond[verbatim,quote] \score { << \new Staff { \key g \major \time 2/2 \set Staff.midiInstrument = #"flute" \set Staff.midiMinimumVolume = #0.7 \set Staff.midiMaximumVolume = #0.9 \new Voice \relative c''' { r2 g\mp g fis~ fis4 g8 fis e2~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \set Staff.midiMinimumVolume = #0.3 \set Staff.midiMaximumVolume = #0.6 \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout {} \midi { \tempo 2 = 72 } } @end lilypond @unnumberedsubsubsec Balance entre instrumentos (ii) Si las propiedades de volumen MIDI máximo y mínimo no están establecidas, de forma predeterminada LilyPond aplica un pequeño grado de ecualización a algunos instrumentos. Los instrumentos y la ecualización que se aplica se muestra en la tabla @notation{instrument-equalizer-alist} en @file{../scm/midi.scm}. El ecualizador básico predeterminado se puede sustituir estableciendo @code{instrumentEqualizer} en el contexto @code{Score} a un procedimiento Scheme nuevo que acepte el nombre de un instrumento MIDI como único argumento y devuelva un par de fracciones que dan los volúmenes máximo y mínimo que se aplican a dicho instrumento. Esta sustitución se hace de la misma forma que mostramos para restablecer la fracción de volumen absoluto @code{dynamicAbsoluteVolumeFunction} al comienzo de esta sección. El ecualizador predeterminado, @notation{default-instrument-equalizer}, en @file{../scm/midi.scm}, muestra cómo se puede escribir tal procedimiento. El ejemplo siguiente establece los volúmenes relativos de la flauta y del clarinete a los mismos valores que el ejemplo anterior. @lilypond[verbatim,quote] #(define my-instrument-equalizer-alist '()) #(set! my-instrument-equalizer-alist (append '( ("flute" . (0.7 . 0.9)) ("clarinet" . (0.3 . 0.6))) my-instrument-equalizer-alist)) #(define (my-instrument-equalizer s) (let ((entry (assoc s my-instrument-equalizer-alist))) (if entry (cdr entry)))) \score { << \new Staff { \key g \major \time 2/2 \set Score.instrumentEqualizer = #my-instrument-equalizer \set Staff.midiInstrument = #"flute" \new Voice \relative c''' { r2 g\mp g fis~ fis4 g8 fis e2~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { \tempo 2 = 72 } } @end lilypond @ignore @c Delete when satisfied this is adequately covered elsewhere -td @n ode Microtones in MIDI @s ubsection Microtones in MIDI @cindex microtones in MIDI Microtones consisting of half sharps and half flats are exported to the MIDI file and render correctly in MIDI players which support pitch bending. See @ref{Nombres de las notas en otros idiomas}. Here is an example showing all the half sharps and half flats. It can be copied out and compiled to test microtones in your MIDI player. @lilypond[verbatim,quote] \score { \relative c' { c4 cih cis cisih d4 dih ees eeh e4 eih f fih fis4 fisih g gih gis4 gisih a aih bes4 beh b bih } \layout {} \midi {} } @end lilypond @end ignore @node Percusión en MIDI @subsection Percusión en MIDI @translationof Percussion in MIDI La notación de los instrumentos de percusión se realiza normalmente en un contexto @code{DrumStaff} y cuando se hace de esta forma se les da salida correctamente por el canal MIDI@tie{}10, pero ciertos instrumentos de percusión de altura determinada, como el xilófono, marimba, vibráfono, timbales, etc., se tratan como instrumentos @qq{normales} y la música para estos instrumentos se debe introducir en contextos de @code{Staff} normales, no en un contexto @code{DrumStaff}, para obtener la salida MIDI correcta. Ciertos sonidos de altura indeterminada que están incluidos en el estándar General MIDI, como el tom melódico, el tambor taiko, los tambores sintéticos, etc., no se pueden acceder a través del canal MIDI@tie{}10, por lo que la notación para dichos instrumentos se debe introducir también en un contexto normal de @code{Staff}, utilizando las alturas normales adecuadas. Muchos instrumentos de percusión no están incluidos dentro del estándar General MIDI, p.ej. las castañuelas. El método más fácil (aunque no satisfactorio) de producir una salida MIDI al escribir para estos instrumentos es sustituirlos por el sonido más parecido del conjunto estándar. @c TODO Expand with examples, and any other issues @knownissues Debido a que el estándar General MIDI no contiene golpes de aro (@emph{rim shots}), para este propósito se utiliza en su lugar el golpe lateral de baqueta (@emph{sidestick}). @node El script Articulate @subsection El script Articulate @translationof The Articulate script Es posible obtener una salida MIDI más real si se utiliza el script Articulate. Éste trata de tener en cuenta las articulaciones (ligaduras de expresión, picados, etc), mediante la sustitución de las notas con secuencias musicales de silencios y notas escaladas en el tiempo de forma apropiada. También trata de desplegar los trinos, grupetos circulares, etc. y responder a las indicaciones de rallentando y accelerando. Para utilizar el script Articulate, tenemos que incluirlo al principio de nuestro archivo de entrada: @example \include "articulate.ly" @end example y en la sección @code{\score}, hacer lo siguiente: @example \unfoldRepeats \articulate << resto de la partitura... >> @end example Después de alterar el código de entrada de esta manera el resultado visual se altera profundamente, pero el bloque @code{\midi} estándar produce un archivo MIDI mejorado. Si bien no es esencial para que funcione el script Articulate, podemos insertar la instrucción @code{\unfoldRepeats} según aparece en el ejemplo anterior, dado que habilita la ejecución de abreviaturas tales como los @notation{trinos}. @knownissues Articulate acorta los acordes, y ciertos fragmentos de música (especialmente la música de órgano) es posible que suene peor. @node Extraer información musical @section Extraer información musical @translationof Extracting musical information Además de crear un resultado visual y MIDI, LilyPond es capaz de presentar información musical en forma de texto. @menu * Impresión del código de notación de LilyPond:: * Impresión de las expresiones musicales de Scheme:: * Guardar los eventos musicales en un archivo:: @end menu @node Impresión del código de notación de LilyPond @subsection Displaying LilyPond notation @translationof Displaying LilyPond notation @funindex \displayLilyMusic La impresión textual de una expresión musical en notación de LilyPond puede hacerse con la función musical @code{\displayLilyMusic}. Para ver el resultado, lo más usual es llamar a LilyPond mediante la línea de órdenes. Por ejemplo, @example @{ \displayLilyMusic \transpose c a, @{ c4 e g a bes @} @} @end example imprime lo siguiente: @example @{ a,4 cis e fis g @} @end example De forma predeterminada, LilyPond imprime estos mensajes en la consola junto al resto de los mensajes de la compilación de LilyPond. Para discernir entre estos mensajes y guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la salida hacia un archivo. @example lilypond archivo.ly >resultado.txt @end example @node Impresión de las expresiones musicales de Scheme @subsection Impresión de las expresiones musicales de Scheme @translationof Displaying scheme music expressions Véase @rextend{Presentación de las expresiones musicales}. @node Guardar los eventos musicales en un archivo @subsection Guardar los eventos musicales en un archivo @translationof Saving music events to a file Los eventos musicales se pueden guardar en un archivo pentagrama a pentagrama mediante la inclusión de un archivo en nuestra partitura principal. @example \include "event-listener.ly" @end example De esta forma se crean uno o más archivos llamados @file{FILENAME-STAFFNAME.notes} ó @file{FILENAME-unnamed-staff.notes} para cada pentagrama. Observe que si tiene más de un pentagrama sin nombre, los eventos de todos los pentagramas se mezclarán entre sí dentro del mismo archivo. El resultado tiene el aspecto siguiente: @example 0.000 note 57 4 p-c 2 12 0.000 dynamic f 0.250 note 62 4 p-c 7 12 0.500 note 66 8 p-c 9 12 0.625 note 69 8 p-c 14 12 0.750 rest 4 0.750 breathe @end example La sintaxis consiste en una línea delimitada por caracteres de tabulación, con dos campos fijos en cada línea seguidos de parámetros opcionales. @example @var{tiempo} @var{tipo} @var{...parámetros...} @end example Esta información se puede leer fácilmente por parte de otros programas como guiones de Python, y pueden ser muy útiles para aquellos investigadores que desean realizar un análisis musical o hacer experimientos de reproducción con LilyPond. @knownissues No todos los eventos musicales de lilypond están contemplados por @file{event-listener.ly}. Se pretende que sea una @qq{prueba de concepto} bien realizada. Si algunos eventos que quiere ver no aparecen incluidos, copie @file{event-listener.ly} en su carpeta de lilypond y modifique el archivo de forma que produzca la información que desea.