@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @ignore Translation of GIT committish: 1e5c6b0f54079eb3285dcc4c7e53f17d8bb03933 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.19.22" @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 encabezamientos:: * Trabajar sobre los archivos de entrada:: * Controlar la salida:: * Creación de 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 @{ @dots{} @} @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{%@{ @dots{} %@}} 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{@dots{}música@dots{}} @} @end example y los textos se introducen con un bloque @code{\markup}: @example \markup @{ @var{@dots{}texto@dots{}} @} @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{@dots{}} @} \markup @{ @var{@dots{}} @} \score @{ @var{@dots{}} @} @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 @{ @dots{}texto de la segunda estrofa@dots{} @} \markup @{ @dots{}texto de la tercera estrofa@dots{} @} \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{} @}   \paper @{ @dots{} @} @} \book @{ \score @{ @dots{} @}   \paper @{ @dots{} @} @} \book @{ \score @{ @dots{} @}   \paper @{ @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{} @} \paper @{ @dots{} @} @} \book @{ \bookOutputSuffix "Menuetto" \score @{ @dots{} @} \paper @{ @dots{} @} @} \book @{ \bookOutputSuffix "Nocturne" \score @{ @dots{} @} \paper @{ @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{} @} \paper @{ @dots{} @} @} \book @{ \bookOutputName "Menuetto" \score @{ @dots{} @} \paper @{ @dots{} @} @} \book @{ \bookOutputName "Nocturne" \score @{ @dots{} @} \paper @{ @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, las definiciones se combinan, pero en situaciones de conflicto las definiciones más tardías tienen preferencia. Para ver los detalles sobre cómo afecta al bloque @code{\layout}, consulte @ref{El bloque layout,,El bloque @code{@bs{}layout}}. @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 decir, al principio del archivo). Es el bloque que contiene los ajustes predeterminados de los campos de encabezamientos como el compositor, título, etc. para todos los libros que están dentro del archivo (véase @ref{Explicación de los títulos}). @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 @file{../scm/lily-library.scm} y su valor se establece en el archivo @file{../ly/declarations-init.ly}.) @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{%@{ @dots{} %@}}. @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} antes y después de las instrucciones @code{\set} y @code{\override}. @end itemize @seealso Manual de aprendizaje: @rlearning{Cómo funcionan los archivos de entrada de LilyPond}. Referencia de la notación: @ref{Explicación de los títulos}, @ref{El bloque layout,,El bloque @code{@bs{}layout}}. @node Títulos y encabezamientos @section Títulos y encabezamientos @translationof Titles and headers @cindex títulos @cindex encabezamientos @cindex pies de página 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 encabezamientos y pies de página:: * Títulos encabezamientos y pies de página personalizados:: * Crear metadatos en los archivos de salida:: * Crear notas al pie:: * Referencia a números de página:: * Índice general:: @end menu @node Crear títulos encabezamientos y pies de página @subsection Crear títulos, encabezamientos y pies de página @translationof Creating titles headers and footers @menu * Explicación de los títulos:: * Presentación predeterminada de los títulos de partes de libro y partitura:: * Disposición predeterminada de las cabeceras y pies de página:: @end menu @node Explicación de los títulos @unnumberedsubsubsec Explicación de los títulos @translationof Titles explained Cada bloque @code{\book} de un solo archivo de entrada produce un archivo de salida distinto, véase @ref{Estructura del archivo}. Dentro de cada archivo de salida están disponibles tres tipos de zonas para títulos: @emph{Títulos de libro} al principio de cada libro, @emph{Títulos de parte de libro} al principio de cada parte de un libro y @emph{Títulos de partitura} al comienzo de una partitura. Los valores de los campos para encabezamientos tales como @code{title} (para el título) y @code{composer} (para el autor) se establecen en bloques @code{\header} (para ver la sintaxis de los bloques @code{\header} y una lista completa de los campos disponibles de forma predeterminada, consulte @ref{Presentación predeterminada de los títulos de partes de libro y partitura}). Tanto los títulos de libro como los títulos de parte de libro y los títulos de partitura pueden contener los mismos campos, aunque de forma predeterminada los campos de los títulos de partitura se limitan a @code{piece} (pieza) y @code{opus}. Los bloques @code{\header} se pueden situar en cuatro lugares distintos para formar una jerarquía descendente de bloques @code{\header}: @itemize @item Al principio del archivo de entrada, antes de cualquier otro bloque @code{\book}, @code{\bookpart} o @code{\score}. @item Dentro de un bloque @code{\book} pero fuera de los bloques @code{\bookpart} y @code{\score} que están dentro de ese libro. @item Dentro de un bloque @code{\bookpart} pero fuera de cualquier bloque @code{\score} dentro de dicha parte de libro. @item Después de la expresión musical de un bloque @code{\score}. @end itemize Los valores de los campos se filtran a través de esta jerarquía, persistiendo aquellos que se establecen más arriba a no ser que se sobreescriban por un valor establecido más abajo en la jerarquía, y así: @itemize @item El título de un libro deriva de los campos establecidos al principio del archivo de entrada, modificado por campos establecidos en el bloque @code{\book}. Los campos resultantes se usan para imprimir el título de libro para dicho libro, siempre y cuando haya otro material que genere una página al comienzo del libro, antes de la primera parte de libro. Es suficiente una sola instrucción @code{\pageBreak}. @item Un título de parte de libro se deriva de los campos fijados al principio del archivo de entrada, modificado por los campos establecidos dentro del bloque @code{\book}, y posteriormente modificado por los campos que se fijan dentro del bloque @code{\bookpart}. Los valores resultantes se usan para imprimir el título de parte de libro para esa parte. @item Un título de partitura se deriva de los campos que se fijan al principio del archivo de entrada, modificados por los campos fijados dentro del bloque @code{\book}, posteriormente modificados por los campos que se fijan dentro del bloque @code{\bookpart} y finalmente modificados por los campos establecidos dentro del bloque @code{\score}. Los valores resultantes se utilizan para imprimir el título de partitura. Observe, sin embargo, que de forma predeterminada solamente se imprimen los campos @code{piece} y @code{opus} en los títulos de partitura a no ser que la variable de @code{\paper}, @code{print-all-headers}, tenga el valor @code{#t}. @end itemize @warning{Recuerde que al poner un bloque @bs{}@code{header} dentro de un bloque @bs{}@code{score}, la expresión musical debe aparecer antes del bloque @bs{}@code{header}.} No es necesario aportar bloques @code{\header} en los cuatro lugares: cualquiera de ellos o incluso todos pueden omitirse. De forma similar, los archivos de entrada sencillos pueden omitir los bloques @code{\book} y @code{\bookpart}, dejando que se creen de forma implícita. Si el libro solamente tiene una partitura, el bloque @code{\header} debiera situarse normalmente al principio del archivo de forma que solamente se produce una zona de título de parte de libro, haciendo que estén disponibles para su uso todos los títulos de encabezamientos. Si el libro tiene varias partituras, son posibles distintas combinaciones de bloques @code{\header}, según los distintos tipos de publicaciones musicales. Por ejemplo, si la publicación contiene varias piezas del mismo autor, un bloque @code{\header} colocado al principio del archivo que especifique el título del libro y el autor, con bloques @code{\header} en cada bloque @code{\score} que especifique la @code{piece} y/o el @code{opus} sería lo más adecuado, como aquí: @lilypond[papersize=a5,quote,verbatim,noragged-right] \header { title = "SUITE I." composer = "J. S. Bach." } \score { \new Staff \relative { \clef bass \key g \major \repeat unfold 2 { g,16( 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 { \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 Son posibles disposiciones más complejas. Por ejemplo, los campos de texto extraídos del bloque @code{\header} de un libro se pueden imprimir en todos los títulos de partitura, con ciertos campos sobreescritos y otros suprimidos 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 default LilyPond footer 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{Presentación predeterminada de los títulos de partes de libro y partitura}, @ref{Personalización de los títulos}. @node Presentación predeterminada de los títulos de partes de libro y partitura @unnumberedsubsubsec Presentación predeterminada de los títulos de partes de libro y partitura @translationof Default layout of bookpart and score titles Este ejemplo muestra todas las variables impresas de @code{\header}: @c KEEP LY @lilypond[papersize=a6landscape,quote,verbatim,noragged-right] \book { \header { % Los siguientes campos están centrados dedication = "Dedication (dedicatoria)" title = "Title (título)" subtitle = "Subtitle (subtítulo)" subsubtitle = "Subsubtitle (sub-subtítulo)" % Los siguientes campos se distribuyen regularmente sobre una línea % el campo "instrument" también aparece en las siguientes páginas instrument = \markup \with-color #green "Instrument (instrumento)" poet = "Poet (poeta)" composer = "Composer (autor)" % Los siguientes campos se sitúan en los extremos opuestos de la misma línea meter = "Meter (metro)" arranger = "Arranger (arreglista)" % Los siguientes campos están centrados en la parte inferior tagline = "La tagline o línea de etiqueta va al final de la última página" copyright = "El copyright va al final de la primera página" } \score { { s1 } \header { % Los siguientes campos se colocan en los extremos de una línea piece = "Piece (pieza) 1" opus = "Opus 1" } } \score { { s1 } \header { % Los siguientes campos se sitúan en los extremos de una línea piece = "Piece (pieza) 2 en la misma página" opus = "Opus 2" } } \pageBreak \score { { s1 } \header { % Los siguientes campos se sitúan en los extremos de una línea piece = "Piece (pieza) 3 en una página nueva" opus = "Opus 3" } } } @end lilypond Observe que @itemize @item El nombre de instrumento se repite en todas las páginas. @item Solamente @code{piece} (la pieza) y @code{opus} se imprimen en una @code{\score} cuando la variable de papel @code{print-all-headers} se establece a @code{##f} (el valor predeterminado). @item @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. @item 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. @end itemize Para cambiar la disposición predeterminada, véase @ref{Personalización de los títulos}. @cindex breakbefore Si un bloque @code{\book} comienza inmediatamente con un bloque @code{\bookpart}, no se imprime ningún título de libro, pues no existe ninguna página en que imprimirlo. Si es necesario un título de libro, inicie el bloque @code{\book} con algún material de marcado o con una instrucción @code{\pageBreak}. 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. @c KEEP LY @lilypond[papersize=c7landscape,verbatim,noragged-right] \book { \header { title = "Este es mi Title (título)" subtitle = "Este es mi Subtitle (subtítulo)" copyright = "Este es el final de la primera página" } \score { \repeat unfold 4 { e'' e'' e'' e'' } \header { piece = "Esto es la música" breakbefore = ##t } } } @end lilypond @seealso Manual de aprendizaje: @rlearning{Cómo funcionan los archivos de entrada de LilyPond} Referencia de la notación: @ref{Personalización de los títulos}, @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 La línea predeterminada de pie de página de LilyPond 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'4 d e f } } } @end lilypond Para eliminar la línea de pie de página predeterminada de LilyPond, establezca el valor de @code{tagline} a @code{##f}. @node Títulos encabezamientos y pies de página personalizados @subsection Títulos, encabezamientos y pies de página personalizados @translationof Custom titles headers and footers @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 títulos:: * Personalización de los títulos:: * Disposición personalizada de cabeceras y pies de página:: @end menu @node Formateo personalizado del texto de los títulos @unnumberedsubsubsec Formateo personalizado del texto de los bloques de título @translationof Custom text formatting for titles 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" } opus = \markup { \italic "BWV 846" } } } @end lilypond @seealso Referencia de la notación: @ref{Formatear el texto}. @node Personalización de los títulos @unnumberedsubsubsec Personalización de los títulos @translationof Custom layout for titles @cindex bookTitleMarkup @cindex scoreTitleMarkup @funindex bookTitleMarkup @funindex scoreTitleMarkup 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, cambie 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 La colocación de los títulos cuando se utilizan los valores predeterminados de estas variables de @code{\markup} se muestra en los ejemplos de @ref{Presentación predeterminada de los títulos de partes de libro y 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 que normalmente no son efectivos dentro de los bloques @code{\header} de una partitura se pueden imprimir el la zona del Título de la partitura si se coloca @code{print-all-headers} 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 la zona del título de parte de libro han de suprimirse manualmente en cada uno de los bloques @code{\score}. Véase @ref{Explicación de los 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 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 @cindex marcado condicional @cindex on-the-fly @funindex \on-the-fly La instrucción de marcado @code{\on-the-fly} se puede utilizar para añadir elementos de forma condicional al texto de encabezamiento y pie de página definido dentro del bloque @code{\paper}, usando la sintaxis siguiente: @example variable = \markup @{ @dots{} \on-the-fly \@var{procedimiento} @var{marcado} @dots{} @} @end example El @var{procedimiento} se llama cada vez que se evalúa la instrucción @code{\markup} en que ésta aparece. El @var{procedimiento} debería comprobar si se cumple una condición determinada e interpretar (es decir: imprimir) el argumento @var{marcado} si, y sólo si, la condición es verdadera. Se proveen un cierto número de procedimientos ya hechos para la comprobación de diversas condiciones: @quotation @multitable {print-page-number-check-first-----} {¿es el núm. de páginas en la parte de libro > 1?-----} @headitem Nombre del procedimiento @tab Condición que se comprueba @item print-page-number-check-first @tab ¿debería imprimirse este número de página? @item create-page-number-stencil @tab ¿es print-page-numbers verdadero? @item print-all-headers @tab ¿es print-all-headers verdadero? @item first-page @tab ¿es la primera página del libro? @item not-first-page @tab ¿no es la primera página del libro? @item (on-page nmbr) @tab ¿es el número de página = nmbr? @item last-page @tab ¿es la última página del libro? @item part-first-page @tab ¿es la primera página de la parte de libro? @item not-part-first-page @tab ¿no es la primera página de la parte de libro? @item part-last-page @tab ¿es la última página de la parte de libro? @item not-single-page @tab ¿es el núm. de páginas en la parte de libro > 1? @end multitable @end quotation 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 Se pueden combinar varias condiciones de @code{\on-the-fly} con un operador @q{and}, por ejemplo: @example \on-the-fly \first-page \on-the-fly \last-page @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}} @end example determina si la salida es una sola página. @seealso Referencia de la notación: @ref{Explicación de los títulos}, @ref{Presentación predeterminada de los títulos de partes de libro y partitura}. Archivos instalados: @file{../ly/titling-init.ly}. @node Crear metadatos en los archivos de salida @subsection Crear metadatos en los archivos de salida @translationof Creating output file metadata @cindex metadatos de PDF @cindex metadatos de MIDI Además de mostrarse en la salida impresa, las variables de encabezamiento de @code{\header} se usan para establecer los metadatos para los archivos de salida. Por ejemplo, con los archivos PDF, estos metadatos pueden mostrarse por parte de los lectores de documentos como @code{propiedades} del PDF. Para cada tipo de archivo de salida, solamente se consultan las definiciones de @code{\header} de los bloques que definen archivos separados de ese tipo, y los bloques más altos en la jerarquía de bloques. Por tanto, para los archivos PDF, solo afectan a los metadatos de PDF de cada documento las definiciones de @code{\header} de los niveles de @code{\book} y de nivel superior, mientras que para archivos MIDI, se usan todas las cabeceras que están por encima o al nivel de @code{\score}. Por ejemplo, si se establece la propiedad @code{title} del bloque @code{header} como @q{Sinfonía núm. 1}, el documento PDF llevará también este título, y lo usará como el nombre de la secuencia del archivo MIDI. @example \header@{ title = "Sinfonía núm. 1" @} @end example Si quiere fijar el título de la salida impresa con un texto pero quiere que la propiedad de título del PDF tenga un texto diferente, puede usar @code{pdftitle} como se muestra a continuación. @example \header@{ title = "Sinfonía núm. 1" pdftitle = "Sinfonía núm. 1 de Beethoven" @} @end example Todas las variables @code{title}, @code{subject}, @code{keywords}, @code{subtitle}, @code{composer}, @code{arranger}, @code{poet}, @code{author} y @code{copyright} establecen propiedades del PDF y pueden hacerse preceder de @q{pdf} para fijar una propiedad del archivo PDF a un valor distinto del de la salida impresa. La propiedad de PDF @code{Creator} se fija automáticamente a @q{LilyPond} más la versión actual de LilyPond, y las variables @code{CreationDate} y @code{ModDate} se fijan a la fecha y hora actuales. Se puede sobreescribir @code{ModDate} mediante el establecimiento de un valor para la variable de cabecera @code{moddate} (o @code{pdfmoddate}) a una cadena de fecha de PDF válida. La variable @code{title} establece también el nombre de la secuencia para el archivo MIDI. Se puede usar la variable @code{midititle} para fijar el nombre de la secuencia independientemente del valor usado para la salida impresa. @node Crear notas al pie @subsection Crear notas al pie @translationof Creating footnotes @cindex notas al pie Se pueden crear dos tipos de notas al pie: automáticas y manuales. @menu * Notas al pie dentro de expresiones musicales:: * Notas al pie en texto independiente:: @end menu @node Notas al pie dentro de expresiones musicales @unnumberedsubsubsec Notas al pie dentro de expresiones musicales @translationof Footnotes in music expressions @cindex notas al pie dentro de expresiones musicales @funindex \footnote @subsubsubheading Panorámica de las notas al pie Las notas al pie dentro de expresiones musicales caen dentro de dos categorías: @table @emph @item Notas al pie basadas en eventos Se adjuntan a un evento en particular. Son ejemplos de tales eventos las notas sueltas, las articulaciones (como indicaciones de digitación, acentos, indicaciones dinámicas) y los post-eventos (como las ligaduras de expresión y las barras de corchea manuales). La forma general de las notas al pie basadas en eventos es como sigue: @example [@var{dirección}] \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música} @end example @item Notas al pie basadas en tiempo Se ligan a un punto temporal determinado, dentro de un contexto musical. Algunas instrucciones como @code{\time} y @code{\clef} en realidad no usan eventos para crear objetos como la indicación de compás y la clave. Un acorde tampoco crea un evento por sí mismo: su plica o corchete se crea al final de un paso de tiempo (nominalmente, a través de uno de los eventos de nota que contiene). Una nota al pie basada en tiempo permite anotar tales objetos de presentación sin referirse a ningún evento. Una nota al pie basada en tiempo permite que tales objetos de presentación se puedan anotar sin hacer referencia a un evento. La forma general para las notas al pie basadas en tiempo es: @example \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} [@var{Contexto}].@var{Nombre-del-Grob} @end example @end table Los elementos para las dos formas son como sigue: @table @var @item dirección Si (y sólo si) el @code{\footnote} se está aplicando a un post-evento o articulación, debe ir precedida de un indicador de dirección (@code{-, _, ^}) con el objeto de adjuntar la @var{música} (con una marca de nota al pie) a la nota o silencio precedente. @item marca es un elemento de marcado o cadena de caracteres que especifica la marca de nota al pie que se usa para marcar tanto el punto de referencia como la propia nota al pie en la parte inferior de la página. Se puede omitir (o, de forma equivalente, sustituirse por @code{\default}) en cuyo caso se genera un número secuencialmente de forma automática. Tales secuencias numéricas se reinician en cada página que contiene una nota al pie. @item desplazamiento es una pareja de números tal como @samp{#(2 . 1)} que especifica los desplazamientos en X y en Y en unidades de espacios de pentagrama a partir del límite del objeto en que se desea situar la marca. Los valores de desplazamiento positivos se toman a partir del borde superior derecho, los valores negativos a partir del borde inferior izquierdo y cero implica que la marca se centra sobre el borde. @item Contexto es el contexto en que se crea el grob que recibe la nota al pie. Se puede omitir si el grob está en un contexto del nivel inferior, p. ej. un contexto @code{Voice}. @item Nombre-del-Grob especifica un tipo de grob que marcar (como @samp{Flag} para el corchete). Si se da, la nota al pie no se adjunta a una expresión musical en particular, sino a todos los grobs del tipo especificado que ocurren en dicho momento de tiempo musical. @item texto-de-la-nota es el elemento de marcado o cadena de caracteres que especifica el texto de la nota al pie que utilizar en la parte baja de la página. @item música es el evento musical, post-evento o articulación que se está anotando. @end table @subsubsubheading Notas al pie basadas en eventos @cindex Notas al pie, basadas en eventos Una nota al pie se adjunta a un objeto de presentación causado directamente por el evento que corresponde a @var{música}, con la sintaxis siguiente: @example \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música} @end example @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c'' { \footnote #'(-1 . 3) "Una nota" a4 a4 \footnote #'(2 . 2) "Un silencio" r4 a4 } } @end lilypond No es posible marcar un acorde @emph{completo} con una nota al pie basada en evento: un acorde, incluso aquel que contiene una sola nota, no produce un verdadero evento por sí mismo. Sin embargo, las notas individuales que están @emph{dentro} del acorde sí se pueden marcar: @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c'' { \footnote #'(2 . 3) "No funciona" 2 <\footnote #'(-2 . -3) "Funciona" a-3>4 4 } } @end lilypond Si se desea que la nota al pie se adjunte a un post-evento o articulación, la instrucción @code{\footnote} @emph{debe} ir precedida por un indicador de dirección, @code{-, _, ^}, y seguida por el post-evento o articulación que se desea anotar como argumento @var{música}. En esta forma, la @code{\footnote} se puede considerar como una simple copia de su último argumento con una marca de nota al pie adjunta. La sintaxis es: @example @var{dirección} \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música} @end example @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative { a'4_\footnote #'(0 . -1) "Ligadura forzada hacia abajo" ( b8^\footnote #'(1 . 0.5) "Barra manual forzada hacia arriba" [ b8 ] c4 ) c-\footnote #'(1 . 1) "Tenuto" -- } } @end lilypond @subsubsubheading notas al pie basadas en tiempo @cindex notas al pie, basadas en tiempo Si el objeto de presentación que recibe la nota al pie está causado @emph{indirectamente} por un evento (como un objeto @code{Accidental}, alteración, o @code{Stem}, plica, causados por un evento @code{NoteHead}, cabeza de nota), el nombre del grob @var{GrobName} del objeto de presentación es necesario después del texto de la nota al pie, en lugar de @var{música}: @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c'' { \footnote #'(-1 . -3) "Un bemol" Accidental aes4 c \footnote #'(-1 . 0.5) "Otro bemol" Accidental ees \footnote #'(1 . -2) "Una plica" Stem aes } } @end lilypond Sin embargo, observe que cuando se especifica el nombre de un grob, se adjunta una nota al pie a todos los grobs de ese tipo dentro del instante de tiempo actual: @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c' { \footnote #'(-1 . 3) "Un bemol" Accidental 4 \footnote #'(2 . 0.5) "Articulación" Script c'->-. } } @end lilypond Una nota dentro de un acorde puede recibir una nota al pie individual, basada en evento. El único grob causado directamente por una nota de un acorde es @samp{NoteHead}, por lo que la instrucción de nota al pie basada en evento @emph{solamente} es apta para añadir una nota al pie a la @samp{NoteHead} dentro de un acorde. Todos los demás grobs de notas de acorde están causados indirectamente. La propia instrucción @code{\footnote} no ofrece ninguna sintaxis para especificar al mismo tiempo un tipo concreto de grob @emph{y también} un evento concreto al que adjuntar la nota. Sin embargo, se puede usar una instrucción @code{\footnote} basada en tiempo para especificar el tipo de grob, y luego añadir la instrucción @code{\single} como prefijo, con el objeto de que se aplique solamente al evento siguiente: @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c'' { < \footnote #'(1 . -2) "Un La" a \single \footnote #'(-1 . -1) "Un sostenido" Accidental cis \single \footnote #'(0.5 . 0.5) "Un bemol" Accidental ees fis >2 } } @end lilypond @warning{Cuando las notas al pie se adjuntan a varios elementos musicales que están dentro del mismo momento musical, como ocurre en el ejemplo anterior, las notas al pie se numeran desde los elementos más altos a los más bajos tal y como aparecen en la salida impresa, no en el orden en que se escriben en el flujo de entrada.} Los objetos de presentación como las claves y las armaduras de cambio de tonalidad están, más bien, causadas por propiedades que cambian, y no por eventos. Otros, como las líneas divisorias y los números de compás, son una consecuencia directa del paso del tiempo. Por esta razón, las notas al pie sobre tales objetos tienen que basarse en su tiempo musical. Las notas al pie basadas en tiempo so preferibles también cuando se marcan cosas como las plicas y las barras de corchea en @emph{acordes}: dado que estas funcionalidades de cada acorde individual están asignadas normalmente a @emph{un solo} evento dentro del acorde, sería imprudente descansar en una elección particular. En las notas al pie basadas en tiempo, siempre se debe especificar explícitamente el objeto de presentación en cuestión, y si el grob se crea dentro de un contexto distinto al de nivel más bajo, debe especificarse el contexto apropiado. @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c'' { r1 | \footnote #'(-0.5 . -1) "Cambio de compás" Staff.TimeSignature \time 3/4 \footnote #'(1 . -1) "Plica de acorde" Stem 4 q q \footnote #'(-0.5 . 1) "Línea divisoria" Staff.BarLine q q \footnote #'(0.5 . -1) "Cambio de tonalidad" Staff.KeySignature \key c\minor q } } @end lilypond Se pueden usar marcas personalizadas como alternativas a las marcas numéricas, y se puede suprimir la línea de anotación que une el objeto marcado con su marca: @c KEEP LY @lilypond[quote,verbatim,papersize=a8landscape] \book { \header { tagline = ##f } \relative c' { \footnote "*" #'(0.5 . -2) \markup { \italic "* La primera nota" } a'4 b8 \footnote \markup { \super "$" } #'(0.5 . 1) \markup { \super "$" \italic " La segunda nota" } e c4 \once \override Score.FootnoteItem.annotation-line = ##f b-\footnote \markup \tiny "+" #'(0.1 . 0.1) \markup { \super "+" \italic " Editorial" } \p } } @end lilypond Se muestran más ejemplos de marcas personalizadas en @ref{Notas al pie en texto independiente}. @node Notas al pie en texto independiente @unnumberedsubsubsec Notas al pie en texto independiente @translationof Footnotes in stand-alone text @cindex notas al pie en texto independiente Se utilizan dentro de un elemento de marcado fuera de cualquier expresión musical. No se traza una línea hasta el punto de referencia: la marca simplemente sigue al elemento de marcado que se referencia. Se pueden insertar las marcas automáticamente, en cuyo caso son numéricas. De forma alternativa, se pueden aportar manualmente marcas personalizadas. Las notas al pie para texto independiente con marcas automáticas y personalizadas se crean de distintas formas. @subsubsubheading Notas al pie en texto independiente con marcas automáticas La sintaxis de una nota al pie sobre texto independiente con marcas automáticas es @example \markup @{ @dots{} \auto-footnote @var{texto} @var{nota} @dots{} @} @end example Los elementos son: @table @var @item texto es el elemento de marcado o cadena de caracteres que se desea anotar. @item nota es el elemento de marcado o cadena de caracteres que especifica el texto de la nota al pie que utilizar en la parte baja de la página. @end table Por ejemplo: @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \markup { "A simple" \auto-footnote "tune" \italic " By me" "is shown below. It is a" \auto-footnote "recent" \italic " Aug 2012" "composition." } \relative { a'4 b8 e c4 d } } @end lilypond @subsubsubheading Notas al pie sobre texto independiente con marcas personalizadas La sintaxis de una nota al pie sobre texto independiente con marcas personalizadas es @example \markup @{ @dots{} \footnote @var{marca} @var{nota} @dots{} @} @end example Los elementos son: @table @var @item marca es un elemento de marcado o cadena de caracteres que especifica la marca que se usa para señalar el punto de referencia. Observe que esta marca @emph{no} se inserta automáticamente antes de la propia nota al pie. @item nota es el elemento de marcado o cadena de caracteres que especifica el texto de la nota que aparece en la parte baja de la página, precedida por la @var{marca} especificada. @end table Se puede usar como marca un carácter fácil de teclear, como * ó +, según se muestra en @ref{Notas al pie dentro de expresiones musicales}. De forma alternativa, se pueden usar alias en ASCII (véase @ref{Alias de ASCII}): @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \paper { #(include-special-characters) } \header { tagline = ##f } \markup { "A simple tune" \footnote "*" \italic "* By me" "is shown below. It is a recent" \footnote \super † \concat { \super † \italic " Aug 2012" } "composition." } \relative { a'4 b8 e c4 d } } @end lilypond También pueden utilizarse códigos de caracteres Unicode para especificar las marcas (véase @ref{Unicode}): @lilypond[verbatim,quote,ragged-right,papersize=a8] \book { \header { tagline = ##f } \markup { "A simple tune" \footnote \super \char##x00a7 \concat { \super \char##x00a7 \italic " By me" } "is shown below. It is a recent" \footnote \super \char##x00b6 \concat { \super \char##x00b6 \italic " Aug 2012" } "composition." } \relative { a'4 b8 e c4 d } } @end lilypond @seealso Manual de aprendizaje: @rlearning{Objetos e interfaces}. Referencia de la notación: @ref{ASCII aliases}, @ref{Globos de ayuda}, @ref{Lista de caracteres especiales}, @ref{Indicaciones de texto}, @ref{Guiones de texto}, @ref{Unicode}. 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; no se pueden imprimir en la misma línea. Las notas al pie no se pueden adjuntar a @code{MultiMeasureRests} (silencios multicompás), a barras de corchea automáticas ni a la letra de las canciones. Las notas al pie pueden colisionar con las pautas, objetos @code{\markup}, otras marcas de notas al pie y líneas de anotación. @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}. @c KEEP LY @lilypond[verbatim,papersize=a8landscape] \header { tagline = ##f } \book { \label #'firstScore \score { { c'1 \pageBreak \mark A \label #'markA c'1 } } \markup { La primera partitura comienza en la página \page-ref #'firstScore "0" "?" } \markup { La marca A está en la página \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 o tabla de contenidos se encuentran definidos dentro del bloque @code{\paper}. Hay dos elementos de marcado @q{predefinidos} disponibles: @itemize @item @code{tocTitleMarkup} @noindent Utilizado para dar formato al título del índice general. @verbatim tocTitleMarkup = \markup \huge \column { \fill-line { \null "Índice general" \null } \null } @end verbatim @item @code{tocItemMarkup} @noindent Usado para dar formato a los elementos del índice general. @verbatim tocItemMarkup = \markup \fill-line { \fromproperty #'toc:text \fromproperty #'toc:page } @end verbatim @end itemize @noindent Ambas variables pueden modificarse. He aquí un ejemplo que modifica el título del índice general para que aparezca en francés: @verbatim \paper { tocTitleMarkup = \markup \huge \column { \fill-line { \null "Table des matières" \null } \hspace #1 } @end verbatim A continuación aparece un ejemplo que modifica el tamaño de fuente tipográfica de los elementos del índice general: @verbatim 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}. La instrucción @code{\tocItemWithDotsMarkup} se puede incluir dentro de @code{tocItemMarkup} para llenar la línea con puntos entre un elemento del índice general y su número de página correspondiente: @lilypond[verbatim,line-width=10.0\cm] \header { tagline = ##f } \paper { tocItemMarkup = \tocItemWithDotsMarkup } \book { \markuplist \table-of-contents \tocItem \markup { Allegro } \tocItem \markup { Largo } \markup \null } @end lilypond Las instrucciones predefinidas con sus propios marcados pueden definirse también para que construyan un índice general más complejo. En el ejemplo siguiente se define un estilo nuevo para introducir los nombres de los actos de una ópera en el índice general: @noindent Una nueva variable de marcado (llamada @code{tocActMarkup}) se define en el bloque @code{\paper}: @verbatim \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } @end verbatim @noindent A continuación se crea una función musical personalizada (@code{tocAct}), que usa la nueva definición de marcado @code{tocActMarkup}. @verbatim tocAct = #(define-music-function (text) (markup?) (add-toc-item! 'tocActMarkup text)) @end verbatim @noindent Un archivo de entrada de LilyPond que use estas definiciones personalizadas tendría el aspecto siguiente: @lilypond[line-width=10.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 (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'Egizia terra } \tocAct \markup { Atto Secondo } \tocItem \markup { Sinfonia } \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } \markup \null } @end lilypond He aquí un ejemplo de la instrucción @code{\fill-with-pattern} usada dentro del contexto de un índice general: @verbatim \paper { tocItemMarkup = \markup { \fill-line { \override #'(line-width . 70) \fill-with-pattern #1.5 #CENTER . \fromproperty #'toc:text \fromproperty #'toc:page } } } @end verbatim @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" @dots{} 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 globalmente 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). Cuando @code{relative-includes} está establecido al valor @code{#t}, 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. Tanto los archivos relativos al directorio principal como los archivos relativos a algún otro directorio se pueden @code{\include}ar mediante el establecimiento de @code{relative-includes} al valor @code{#t} o a @code{#f} en los lugares apropiados dentro de los archivos. Por ejemplo, si se ha creado una biblioteca genérica, libA, que a su vez utiliza sub-archivos que se @code{\include}an por medio del archivo de entrada de dicha biblioteca, esas instrucciones @code{\include} tendrán que venir precedidas por @code{#(ly:set-option #relative-includes #t)} de manera que se interpreten correctamente al construir el archivo de entrada @code{.ly} principal, de esta forma: @example libA/ libA.ly A1.ly A2.ly @dots{} @end example @noindent entonces el archivo de entrada, @code{libA.ly}, contiene @example #(ly:set-option 'relative-includes #t) \include "A1.ly" \include "A2.ly" @dots{} % vuelta al ajuste predeterminado #(ly:set-option 'relative-includes #f) @end example Cualquier archivo @file{.ly} puede entonces incluir la biblioteca completa, simplemente con @example \include "~/libA/libA.ly" @end example Se pueden usar estructuras de archivo más complejas instando los cambios en los lugares adecuados. 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" @dots{} 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 { a'4 b c b8( a) } altoMusic = \relative { e'4 e e f } tenorMusic = \relative { c'4 b e d8( c) } bassMusic = \relative { 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" { \partcombine \sopranoMusic \altoMusic } \new Staff = "LH" { \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 @cindex etiqueta @cindex mantener música etiquetada @cindex quitar 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}} o de @code{\keepWithTag #'(@var{nombre1} @var{nombre2}@dots{})} @tab Se incluye la música no etiquetada y la música etiquetada con el nombre o nombres de etiqueta dados; se excluye la música etiquetada con cualquier otro nombre de etiqueta. @item Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}} o @code{\removeWithTag #'(@var{nombre1} @var{nombre2}@dots{})} @tab Se incluye la música no etiquetada y la música que no está etiquetada con ninguno de los nombres de etiqueta dados; se excluye la música etiquetada con los nombres de etiqueta dados. @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 o lista de símbolos (como @code{#'score} o @code{#'(violinI violinII}), seguida de una expresión musical. Si @emph{y solo si} los símbolos son identificadores de LilyPond válidos (caracteres alfabéticos solamente, sin números, guiones bajos ni guiones normales) que no puedan confundirse con notas, la porción @code{#'} se puede omitir y, como abreviatura, una lista de símbolos puede usar el separador de punto, es decir: @code{\tag #'(violinI violinII)} se puede escribir como @code{\tag violinI.violinII}. Lo mismo vale para @code{\keepWithTag} y @code{\removeWithTag}. 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'8. 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'8. 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}, o combinando varias etiquetas en una lista de símbolos: @lilypond[quote,verbatim] music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'(b 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. De forma alternativa, podemos usar una sola instrucción @code{\removeWithTag} con una lista de etiquetas. @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 } } \new Voice { \removeWithTag #'B \removeWithTag #'C \music \removeWithTag #'(B C) \music } @end lilypond El uso de dos o más filtros @code{\keepWithTag} sobre una sola expresión musical produce la eliminación de @emph{todas} las secciones etiquetadas. El primer filtro quita todas excepto la que se nombra, y cualquier filtro posterior elimina el resto. Usando una sola instrucción @code{\keepWithTag} con una lista de varias etiquetas se suprimirán solamente las secciones etiquetadas que no aparezcan especificadas en la lista. @lilypond[verbatim,quote] music = \relative c'' { \tag #'violinI { a4 a a a } \tag #'violinII { b4 b b b } \tag #'viola { c4 c c c } \tag #'cello { d4 d d d } } \new Staff { \keepWithTag #'(violinI violinII) \music } @end lilypond @noindent will print @code{\tag}s @var{violinI} and @var{violinII} but not @var{viola} or @var{cello}. @cindex grupos de etiquetas @funindex \tagGroup Aunque @code{\keepWithTag} es útil para el manejo de @emph{un solo} conjunto de alternativas, la eliminación de música etiquetada con otras etiquetas @emph{no relacionadas} es problemática si se utilizan para más de un propósito. En ese caso pueden declararse @q{grupos de etiquetas}: @example \tagGroup #'(violinI violinII viola cello) @end example @noindent Ahora todas las etiquetas pertenecen a un solo @q{grupo de etiquetas}. Observe que las etiquetas individuales no pueden ser miembros de más de un @emph{grupo de etiquetas}. @example \keepWithTag #'violinI @dots{} @end example @noindent mostrará solamente la música etiquetada a partir del grupo de etiquetas de @code{violinI} y cualquier fragmento musical etiquetado con una de las @emph{otras} etiquetas resultará suprimido. @lilypond[verbatim,quote] music = \relative { \tagGroup #'(violinI violinII viola cello) \tag #'violinI { c''4^"violinI" c c c } \tag #'violinII { a2 a } \tag #'viola { e8 e e2. } \tag #'cello { d'2 d4 d } R1^"untagged" } \new Voice { \keepWithTag #'violinI \music } @end lilypond Al usar la instrucción @code{\keepWithTag} solo son visibles las etiquetas de los grupos de aquellas etiquetas se se incluyen en la instrucción. @funindex \pushToTag @funindex \appendToTag @cindex dividir en música etiquetada A veces podemos 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 secuenciales y simultáneas son dos apuestas seguras: @lilypond[verbatim,quote] music = { \tag #'here { \tag #'here <> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \music \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \music } @end lilypond Las dos instrucciones admiten una etiqueta, el material que dividir en cada ocurrencia de la etiqueta, y la expresión etiquetada. @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}. @knownissues Al llamar a @code{\relative} sobre una expresión musical obtenida mediante el filtrado de música con las instrucciones @code{\keepWithTag} o @code{\removeWithTag}, podría ocurrir que cambiaran las relaciones de octava, dado que solo se tendrán en cuenta las alturas de las notas que efectivamente permanecen en la expresión filtrada. La aplicación de @code{\relative} en primer lugar, antes de @code{\keepWithTag} o de @code{\removeWithTag}, evita este peligro porque en este caso @code{\relative} actúa sobre todas las notas tal y como se introducen. @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 misma 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 la codificación 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: @c NOTE: No verbatim in the following example as the code does not @c display correctly in PDF Font settings for Cyrillic and Hebrew @lilypond[quote] % Linux Libertine fonts contain Cyrillic and Hebrew glyphs. \paper { #(define fonts (set-global-fonts #:roman "Linux Libertine O,serif" #:sans "Linux Biolinum O,sans-serif" #:typewriter "Linux Libertine Mono O,monospace" )) } % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } % Hebrew hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } % Portuguese portuguese = \lyricmode { à vo -- cê uma can -- ção legal } \relative { c'2 d e f g f e } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \portuguese } @end lilypond @node Unicode @unnumberedsubsubsec Unicode @translationof 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''1 \mark \markup { \char ##x03EE } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } \markup { "Copyright 2008--2015" \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 @funindex clip-regions @cindex fragmentos de música @cindex música, fragmentos @node Extracción de fragmentos de música @subsection Extracción de fragmentos de música @translationof Extracting fragments of music Es posible producir en la salida uno o más fragmentos de una partitura mediante la definición de la situación explícita de la música que se quiere extraer dentro del bloque @code{\layout} del archivo de entrada, utilizando la función @code{clip-regions}, y a continuación ejecutando LilyPond con la opción @option{-dclip-systems}. @example \layout @{ clip-regions = #(list (cons (make-rhythmic-location 5 1 2) (make-rhythmic-location 7 3 4))) @} @end example @noindent Este ejemplo extrae un solo fragmento del archivo de entrada @emph{comenzando} después de la duración de una blanca en el quinto compás (@code{5 1 2}) y @emph{terminando} después de la tercera negra del compás séptimo (@code{7 3 4}). Se pueden extraer fragmentos adicionales añadiendo más pares de entradas de @code{make-rhythmic-location} a la lista @code{clip-regions} dentro del bloque @code{\layout}. De forma predeterminada, cada fragmento de música se obtendrá en la salida como un archivo @code{EPS} distinto, pero también se pueden crear otros formatos como @code{PDF} o @code{PNG} si es necesario. La música extraída se obtiene en la salida como si hubiera sido literalmente @q{cortada} de la partitura original impresa, de forma que si un fragmento se extiende sobre una o más líneas, se genera un archivo de salida distinto por cada línea generada. @seealso Referencia de la notación: @ref{El bloque layout}. Manual de utilización: @rprogram{Utilización desde la línea de órdenes}. @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 @example showLastLength = R1*5 \score @{ @dots{} @} @end example @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 hacia el archivo MIDI. Observe que pasa por alto todos los eventos, incluidos el tempo y los cambios de instrumento. Está usted advertido. @lilypond[quote,ragged-right,verbatim] \relative c' { c1 \set Score.skipTypesetting = ##t \tempo 4 = 80 c4 c c c \set Score.skipTypesetting = ##f d4 d d d } @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 red portátiles (PNG), Gráficos de vector escalables (SVG) y PostScript encapsulado (EPS) también están disponibles a través de opciones de la línea de órdenes, véase @rprogram{Opciones básicas 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 un conjunto de glifos alternativo a la tipografía Feta (que es parte de la tipografía Emmentaler que se usa en LilyPond). 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,15cm,,} Aquí hay unos compases de muestra tipografiados con los glifos Feta de LilyPond: @sourceimage{Gonville_before,15cm,,} @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 Emmentaler, invierta el proceso. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}. Referencia de la notación: @ref{La tipografía Emmentaler}. @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 Creación de salida MIDI @section Creación de salida MIDI @translationof Creating MIDI output @cindex sonido @cindex MIDI LilyPond puede producir archivos que siguen el estándar MIDI (Musical Instrument Digital Interface; interfaz digital para instrumentos musicales) y permitir así comprobar la música por el oído (con la ayuda de alguna aplicación o dispositivo que entienda el MIDI). La escucha de la salida MIDI también puede ser de ayuda en la localización de errores tales como notas que se han introducido incorrectamente, alteraciones omitidas y otros casos por el estilo. Los archivos MIDI no contienen sonido (como los archivos AAC, MP3 o Vorbis) pero requieren software adicional para producir el sonido a partir de ellos. @menu * Notación contemplada por el MIDI:: * Notación no contemplada en el MIDI:: * El bloque MIDI:: * Control de las dinámicas del MIDI:: * Uso de los instrumentos MIDI:: * Uso de las repeticiones con el MIDI:: * Asignación de canales MIDI:: * Propiedades de contexto para efectos MIDI:: * Enriquecimiento de la salida MIDI:: * El script Articulate:: @end menu @cindex MIDI, notación contemplada @node Notación contemplada por el MIDI @subsection Notación contemplada por el MIDI @translationof Supported notation for MIDI Se puede usar la notación musical siguiente con las posibilidades predeterminadas de LilyPond para producir salida MIDI: @itemize @item Marcas de respiración @item Acordes introducidos como nombres de acorde @item Crescendos y decrescendos sobre más de una nota. El volumen se altera de forma lineal entre los dos extremos @item Indicadores dinámicos desde @code{ppppp} hasta @code{fffff}, incluyendo @code{mp}, @code{mf} y @code{sf} @item Microtonos, pero @emph{no} acordes microtonales. Se necesita también un reproductor de MIDI capaz de ejecutar eventos de rueda de tono. @item Letra de las canciones @item Altura de las notas @item Ritmo introducido como duraciones de las notas, incluidos los grupos de valoración especial como los tresillos @item Articulaciones @q{sencillas}; picado, staccato, acento, marcato y portato @item Cambios de tempo introducidos con la función @code{\tempo} @item Ligaduras de unión @item Trémolos que @emph{not} se hayan introducido como un valor del tipo @q{@code{:}[@var{número}]} @end itemize También se pueden controlar el panorama, el balance, la expresión y los efectos de reverberación y chorus mediante el establecimiento de propiedades de contexto, véase @ref{Propiedades de contexto para efectos MIDI}. Si se combina con el script @file{articulate}, es posible producir la salida por el MIDI de los siguientes elementos adicionales de notación musical: @itemize @item Appoggiaturas (apoyaturas). Se les da la mitad de la duración de la nota siguiente (sin tener en cuenta los puntillos). Por ejemplo: @example \appoggiatura c8 d2. @end example @noindent El Do toma la duración de una negra. @item Notas y grupos de adorno (mordentes de una nota, trinos, grupetos circulares, etc.) @item Rallentando, accelerando, ritardando y a tempo @item Ligaduras de expresión y de fraseo @item Tenuto @end itemize @noindent Véase @ref{Enriquecimiento de la salida MIDI}. @cindex MIDI, notación no contemplada @node Notación no contemplada en el MIDI @subsection Notación no contemplada en el MIDI @translationof Unsupported notation for MIDI Los siguientes elementos de notación musical no se pueden hacer salir por el MIDI: @itemize @item Articulaciones distintas al picado, staccato, acento, marcato y portato @item Crescendos y decrescendos sobre una @emph{sola} nota @item Calderón @item Bajo cifrado @item Glissandos @item Caídas y elevaciones @item Acordes microtonales @item Duraciones introducidas como anotaciones, p.ej. el swing @item Cambios de tempo sin @code{\tempo} (p.ej., introducidas como anotaciones) @item Trémolos que @emph{se introducen} con la notación de la forma @q{@code{:}[@var{número}]} @end itemize @node El bloque MIDI @subsection El bloque MIDI @translationof The MIDI block @cindex bloque MIDI Para crear un archivo de salida MIDI a partir de un archivo de entrada de LilyPond, introduzca un bloque @code{\midi}, que puede estar vacío, dentro del bloque @code{\score}: @example \score @{ @var{@dots{} música @dots{}} \layout @{ @} \midi @{ @} @} @end example @warning{Un bloque @code{@bs{}score} que, además de la música, contiene solamente un bloque @code{@bs{}midi} (o sea, @emph{sin} el bloque @code{@bs{}layout}), solo produce archivos de salida MIDI; no se imprime ninguna notación musical.} La extensión predeterminada para los archivos de salida (@code{.midi}) se puede cambiar usando la opción @code{-dmidi-extension} con la instrucción @code{lilypond}: @example lilypond -dmidi-extension=mid Archivo.ly @end example Como alternativa, puede añadirse la siguiente expresión de Scheme antes del comienzo de uno de los bloques @code{\book}, @code{\bookpart} o @code{\score}. Véase @ref{Estructura del archivo}. @example #(ly:set-option 'midi-extension "mid") @end example @seealso Referencia de la notación: @ref{Estructura del archivo}, @ref{Crear metadatos en los archivos de salida}. Archivos instalados: @file{scm/midi.scm}. @knownissues Están disponibles 15 canales MIDI y un canal adicional (el número 10) para la percusión. Los pentagramas se asignan a los canales por orden, de forma que una partitura que contenga más de 15 pentagramas da como resultado que los pentagramas adicionales comparten (pero no sobreescriben) el mismo canal MIDI. Esto puede ser problemático si los pentagramas que comparten canal tienen establecidas propiedades MIDI, basadas en canal, en mutuo conflicto (como distintos instrumentos MIDI). @node Control de las dinámicas del MIDI @subsection Control de las dinámicas del MIDI @translationof Controlling MIDI dynamics Es posible controlar el volumen MIDI general, el volumen relativo de las indicaciones de matiz dinámico y el volumen relativo de los distintos instrumentos. Las indicaciones matiz dinámico se traducen automáticamente a niveles de volumen dentro del rango de volúmenes MIDI disponible mientras que los crescendos y decrescendos varían el volumen linealmente entre sus dos extremos. Es posible controlar el volumen relativo de las indicaciones de matiz dinámico, y el volumen general de los diferentes instrumentos. @menu * Indicaciones de matiz dinámico en el MIDI:: * Establecimiento del volumen MIDI:: * Establecimiento de las propiedades del bloque MIDI:: @end menu @cindex MIDI, volumen @cindex MIDI, ecualización @cindex MIDI, matices dinámicos @cindex dinámica del MIDI @node Indicaciones de matiz dinámico en el MIDI @unnumberedsubsubsec Indicaciones de matiz dinámico en el MIDI @translationof Dynamic marks in MIDI Solo las marcas de dinámica desde @code{ppppp} hasta @code{fffff}, incluidos @code{mp}, @code{mf} y @code{sf} tienen valores asignados. Este valor se aplica a continuación al valor del rango de volumen MIDI general para obtener el volumen final que se incluye en la salida MIDI para esa indicación de matiz dinámico en particular. Las fracciones predeterminadas varían desde 0.25 para el @notation{ppppp} hasta 0.95 para el @notation{fffff}. El conjunto completo de las indicaciones de matiz dinámico pueden verse en el archivo @file{scm/midi.scm}. @snippets @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] {creating-custom-dynamics-in-midi-output.ly} Archivos instalados: @file{ly/script-init.ly} @file{scm/midi.scm}. Fragmentos de código: @rlsr{MIDI}. Referencia de funcionamiento interno: @rinternals{Dynamic_performer}. @node Establecimiento del volumen MIDI @unnumberedsubsubsec Establecimiento del volumen MIDI @translationof Setting MIDI volume Los volúmenes generales mínimo y máximo de las indicaciones de matiz dinámico MIDI se controlan estableciendo las propiedades @code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel del bloque @code{Score}. Estas propiedades tienen efecto solamente al comienzo de una vos y sobre las indicaciones dinámicas. 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 dinámico del volumen MIDI general se limita al intervalo entre @code{0.2} y @code{0.5}. @example \score @{ << \new Staff @{ \set Staff.midiInstrument = #"flute" @var{@dots{} music @dots{}} @} \new Staff @{ \set Staff.midiInstrument = #"clarinet" @var{@dots{} music @dots{}} @} >> \midi @{ \context @{ \Score midiMinimumVolume = #0.2 midiMaximumVolume = #0.5 @} @} @} @end example Se puede obtener una ecualización sencilla de instrumentos MIDI estableciendo las propiedades @code{midiMinimumVolume} y @code{midiMaximumVolume} dentro del contexto @code{Staff}. @example \score @{ \new Staff @{ \set Staff.midiInstrument = #"flute" \set Staff.midiMinimumVolume = #0.7 \set Staff.midiMaximumVolume = #0.9 @var{@dots{} music @dots{}} @} \midi @{ @} @} @end example Para partituras con más de un pentagrama y más de un instrumento MIDI, se pueden fijar individualmente los volúmenes relativos de cada instrumento: @example \score @{ << \new Staff @{ \set Staff.midiInstrument = #"flute" \set Staff.midiMinimumVolume = #0.7 \set Staff.midiMaximumVolume = #0.9 @var{@dots{} music @dots{}} @} \new Staff @{ \set Staff.midiInstrument = #"clarinet" \set Staff.midiMinimumVolume = #0.3 \set Staff.midiMaximumVolume = #0.6 @var{@dots{} music @dots{}} @} >> \midi @{ @} @} @end example En este ejemplo el volumen del clarinete se reduce de forma relativa al volumen de la flauta. Si no se establecen estas propiedades de volumen, LilyPond aún aplica un @q{pequeño grado} de ecualización a ciertos instrumentos. Véase @file{scm/midi.scm}. Archivos instalados: @file{scm/midi.scm}. @seealso Referencia de la notación: @ref{Disposición de la partitura}. Referencia de funcionamiento interno: @rinternals{Dynamic_performer}. @snippets @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] {replacing-default-midi-instrument-equalization.ly} @knownissues Los cambios en el volumen del MIDI solamente tienen lugar en el comienzo de una nota, por lo que los crescendos y decrescendos no afectan al volumen de una sola nota. @node Establecimiento de las propiedades del bloque MIDI @unnumberedsubsubsec Establecimiento de las propiedades del bloque MIDI @translationof Setting MIDI block properties El bloque @code{\midi} puede contener distintas disposiciones de los contextos, definiciones de contexto nuevas o código que fija los valores de ciertas propiedades. @example \score @{ @var{@dots{} music @dots{}} \midi @{ \tempo 4 = 72 @} @} @end example Aquí, el tempo se establece a 72 pulsos de negra por minuto. La indicación de tempo dentro del bloque @code{\midi} no aparece en la partitura impresa. Aunque cualquier otra indicación de @code{\tempo} que se especifique dentro del bloque @code{\score} también se reflejará en la salida MIDI. Dentro de un bloque @code{\midi}, la instrucción @code{\tempo} está estableciendo propiedades durante la interpretación de la música y en el contexto de las definiciones de salida; así, se interpreta @emph{como si} fuera una modificación de contesto. @cindex MIDI, definiciones de contexto @cindex contexto, definiciones con MIDI Las definiciones de contexto siguen la misma sintaxis que las del bloque @code{\layout}: @example \score @{ @var{@dots{} music @dots{}} \midi @{ \context @{ \Voice \remove "Dynamic_performer" @} @} @} @end example Este ejemplo suprime el efecto de las indicaciones dinámicas sobre la salida MIDI. Nota: los módulos de traducción de LilyPond usados para el sonido se llaman @q{performers}. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}. Referencia de la notación: @ref{Expresiones}, @ref{Disposición de la partitura}. Archivos instalados: @file{ly/performer-init.ly}. Fragmentos de código: @rlsr{MIDI}. Referencia de funcionamiento interno: @rinternals{Dynamic_performer}. @knownissues Ciertos reproductores de MIDI no siempre maneja correctamente los cambios de tempo en la salida MIDI. Los cambios efectuados al @code{midiInstrument}, así como ciertas opciones MIDI, al @emph{comienzo} de un pentagrama pueden aparecer dos veces en la salida MIDI. @node Uso de los instrumentos MIDI @subsection Uso de los instrumentos MIDI @translationof Using MIDI instruments Los instrumentos MIDI se establecen usando la propiedad @code{midiInstrument} dentro de un contexto @code{Staff}. @example \score @{ \new Staff @{ \set Staff.midiInstrument = #"glockenspiel" @var{@dots{} music @dots{}} @} \midi @{ @} @} @end example o @example \score @{ \new Staff \with @{midiInstrument = #"cello"@} @{ @var{@dots{} music @dots{}} @} \midi @{ @} @} @end example Si el instrumento elegido no coincide exactamente con uno de los instrumentos de la lista de la sección @q{instrumentos MIDI}, se usará el instrumento Piano de Cola (@code{"acoustic grand"}). Véase @ref{Instrumentos MIDI}. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}. Referencia de la notación: @ref{Instrumentos MIDI}, @ref{Disposición de la partitura}. Archivos instalados: @file{scm/midi.scm}. @knownissues Los instrumentos de percusión cuya notación está en un contexto @code{DrumStaff} se encontrará a la salida, correctamente, sobre el canal MIDI número@tie{}10 pero ciertos instrumentos de percusión afinada como el xilófono, el vibráfono o los timbales, se tratan como instrumentos @qq{normales}, de forma que la música de éstos se debe introducir en un contexto @code{Staff} (no @code{DrumStaff}) para obtener una salida MIDI correcta. Hay una lista completa de entradas de los @code{sets de percusión del canal 10} en el archivo @file{scm/midi.scm}. Véase @rlearning{Otras fuentes de información}. @node Uso de las repeticiones con el MIDI @subsection Uso de las repeticiones con el MIDI @translationof Using repeats with MIDI @cindex repeticiones en MIDI @cindex MIDI con repeticiones @funindex \unfoldRepeats Las repeticiones se pueden representar en la salida MIDI aplicando la instrucción @code{\unfoldRepeats}. @example \score @{ \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' @} @} @} \midi @{ @} @} @end example Para restringir el efecto de @code{\unfoldRepeats} a la salida MIDI únicamente, y al mismo tiempo genera partituras imprimibles, es necesario hacer @emph{dos} bloques @code{\score}: uno para el MIDI (con las repeticiones desplegadas) y otro para la notación (con repeticiones de primera y segunda vez, trémolos y del tipo porcentaje); @example \score @{ @var{@dots{} music @dots{}} \layout @{ @} @} \score @{ \unfoldRepeats @{ @var{@dots{} music @dots{}} @} \midi @{ @} @} @end example Si se usan varias voces, cada una de ellas debe contener las repeticiones completamente desplegadas para poder obtener una salida MIDI correcta. @seealso Referencia de la notación: @ref{Repeticiones}. @node Asignación de canales MIDI @subsection Asignación de canales MIDI @translationof MIDI channel mapping @cindex MIDI, canales @cindex MIDI, pistas @funindex midiChannelMapping Cuando se está generando un archivo MIDI de una partitura, LilyPond asigna cada nota de la partitura automáticamente a un canal MIDI, aquel en que se tocaría cuando se envía hacia un dispositivo MIDI. Un canal MIDI tiene una cierta cantidad de controles disponibles para seleccionar, por ejemplo, el instrumento que usar para reproducir las notas en ese canal, u ordenar al dispositivo MIDI que aplique diversos efectos al sonido producido sobre el canal. En todo momento, cada control de un canal MIDI solo puede tener asignado un valor único (que sin embargo se puede modificar, por ejemplo, para cambiar a otro instrumento en mitad de una partitura). El estándar MIDI contempla solamente 16 canales por dispositivo MIDI. Este límite en el número de canales limita también el número de instrumentos diferentes que pueden estar tocando al mismo tiempo. LilyPond crea pistas MIDI separadas para cada pentagrama (o instrumento o voz, según el valor de @code{Score.midiChannelMapping}), y también para cada contexto de letra. No hay un límite para el número de pistas. Para solventar el número limitado de canales MIDI, LilyPond contempla algunos modos diferentes para la asignación de canales MIDI, que se seleccionan usando la propiedad de contexto @code{Score.midiChannelMapping}. En cada caso, si se necesitan más canales MIDI que el límite, los números de canal asignados vuelven a contar desde cero, causando posiblemente una asignación incorrecta de instrumento a algunas notas. Esta propiedad de contexto se puede fijar a uno de los siguientes valores: @table @var @item @code{'staff} Reservar un canal MIDI distinto para cada uno de los pentagramas de la partitura (es el ajuste predeterminado). Todas las notas de todas las voces comparten el canal MIDI del pentagrama que las encierra, y todas se codifican dentro de la misma pista MIDI. El límite de 16 canales se aplica al número total de contextos de pentagrama y de letra, incluso aunque las letras del MIDI no consumen un canal MIDI. @item @code{'instrument} Reservar un canal MIDI distinto a cada uno de los instrumentos diferentes especificados en la partitura. Esto significa que todas las notas reproducidas con el mismo instrumento MIDI comparten el mismo canal MIDI (y la misma pista), incluso aunque las notas provengan de diferentes voces o pentagramas. En este caso los contextos de letra no cuentan para el límite de 16 canales MIDI (ya que no se asignan a un instrumento MIDI), de forma que este ajuste puede permitir una mejor distribución de los canales MIDI cuando el número de contextos de pentagrama y de letra en la partitura excede la cantidad de 16. @item @code{'voice} Reservar un canal MIDI distinto a cada voz de la partitura que tenga un nombre único entre las voces de su pentagrama circundante. Las voces de los distintos pentagramas siempre se asignan a distintos canales MIDI pero dos voces cualesquiera contenidas dentro del mismo pentagrama comparten el mismo canal MIDI sin tienen el mismo nombre. A causa de que @code{midiInstrument} y los diversos controles MIDI para los efectos son propiedades del contexto de pentagrama, no se pueden fijar independientemente para cada voz. La primera voz se reproduce con el instrumento y los efectos especificados para el pentagrama, y las voces con un nombre distinto de la primera recibirán el instrumento y los efectos predeterminados. Nota: se pueden asignar distintos instrumentos y/o efectos a varias voces dentro del mismo pentagrama moviendo el @code{Staff_performer} del contexto @code{Staff} al contexto @code{Voice}, y dejando que @code{midiChannelMapping} conserve su valor predeterminado de @code{'staff} o se fije al valor @code{'instrument}; véase el fragmento de código siguiente. @end table Por ejemplo, la asignación predeterminada de canal MIDI de una partitura puede cambiarse al ajuste @code{'instrument} como se muestra a continuación: @example \score @{ ...music... \midi @{ \context @{ \Score midiChannelMapping = #'instrument @} @} @} @end example @snippets @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] {changing-midi-output-to-one-channel-per-voice.ly} @node Propiedades de contexto para efectos MIDI @subsection Propiedades de contexto para efectos MIDI @translationof Context properties for MIDI effects @cindex Efectos en MIDI @cindex Panorama en MIDI @cindex Balance en MIDI @cindex Estéreo, balance en MIDI @cindex Expresión en MIDI @cindex Reverberación en MIDI @cindex Chorus en MIDI @funindex midiPanPosition @funindex midiBalance @funindex midiExpression @funindex midiReverbLevel @funindex midiChorusLevel Se pueden usar las siguientes propiedades de contexto para aplicar diversos efectos MIDI a las notas que se reproducen sobre el canal MIDI asociado con el pentagrama, instrumento MIDI o voz actual (dependiendo del valor de la propiedad de contexto @code{Score.midiChannelMapping} y del contexto en que está situado el @code{Staff_performer}; véase @ref{Asignación de canales MIDI}). Los cambios en estas propiedades de contexto afectan a todas las notas que se reproducen sobre el canal después del cambio, aunque algunos de los efectos se pueden incluso aplicar también a notas que están ya sonando en ese momento (dependiendo de la implementación del dispositivo de salida MIDI). Se contemplan las siguientes propiedades de contexto: @table @var @item @code{Staff.midiPanPosition} La posición de panorama controla cómo se distribuye el sonido de un canal MIDI entre las salidas estéreo izquierda y derecha. La propiedad de contexto acepta un número entre -1.0 (@code{#LEFT}) y 1.0 (@code{#RIGHT}); el valor -1.0 pone toda la potencia de sonido en la salida estéreo izquierda (dejando la salida derecha en completo silencio), el valor 0.0 (@code{#CENTER}) distribuye el sonido por igual entre las salidas estéreo izquierda y derecha, y el valor 1.0 mueve todo el sonido a la salida estéreo derecha. Los valores entre -1.0 y 1.0 se pueden usar para obtener distribuciones mezcladas entre las salidas estéreo izquierda y derecha. @item @code{Staff.midiBalance} Equilibrio estéreo de un canal MIDI. De forma similar a la posición de panorama esta propiedad de contexto acepta un número entre -1.0 (@code{#LEFT}) y 1.0 (@code{#RIGHT}). Varía el volumen relativo que se envía a los dos altavoces estéreo sin afectar a la distribución de las propias señales estéreo. @item @code{Staff.midiExpression} Nivel de expresión (como una fracción del nivel máximo disponible) que se aplica a un canal MIDI. Un dispositivo MIDI combina el nivel de expresión del canal MIDI con el nivel actual de dinámica de una voz (controlado mediante las instrucciones de dinámica como @code{\p} o @code{\ff}) para obtener el volumen total de cada nota dentro de la voz. El control de expresión se puede usar, por ejemplo, para implementar efectos de crescendo y decrescendo sobre notas mantenidas (algo que LilyPond no contempla de forma automática). @c Issue 4059 contains an attached snippet which shows how this might @c be done, but this is too large and complex for the NR, even as a @c referenced snippet. It could be added to the LSR. El rango de los niveles de expresión se extiende desde 0.0 (ninguna expresión, lo que significa un volumen nulo) hasta 1.0 (expresión al máximo). @item @code{Staff.midiReverbLevel} El nivel de reverberación (cono una fracción del máximo nivel disponible) que se aplica a un canal MIDI. Esta propiedad acepta números entre 0.0 (sin reverberación) y 1.0 (efecto máximo). @item @code{Staff.midiChorusLevel} Nivel del efecto Chorus (como una fracción del máximo nivel disponible) que se aplica a un canal MIDI. Esta propiedad acepta números entre 0.0 (sin efecto de chorus) y 1.0 (efecto al máximo). @end table @knownissues Dado que los archivos MIDI no contienen en realidad ninguna información sonora, los cambios en estas propiedades de contexto solamente se convierten en peticiones para que cambien los controles de canal MIDI dentro de los archivos MIDI emitidos. Si un dispositivo MIDI determinado (como un reproductor MIDI por software) puede de hecho manejar cualquiera de estas solicitudes de un archivo MIDI, es algo que depende totalmente de la implementación del mismo: un dispositivo podría optar por ignorar algunas o todas estas solicitudes. Asimismo, la forma en que un dispositivo MIDI interpreta los diferentes valores de estos controles (generalmente, el estándar MIDI determina el comportamiento solamente en los puntos extremos del rango de valores disponibles para cada control), y el hecho de si un cambio en el valor de un control afecta a las notas que ya se están reproduciendo sobre ese canal MIDI o no, también son aspectos específicos de la implementación del dispositivo MIDI. Al generar archivos MIDI, LilyPond sencillamente convierte de forma lineal los valores fraccionarios dentro de cada rango (7 bits, o 14 bits para los controles de canal MIDI que admiten resolución fina) en valores enteros dentro del rango correspondiente (de 0 a 127 o de 0 a 32767, respectivamente), redondeando los valores fraccionarios hacia el entero más próximo en dirección opuesta al cero. Los valores enteros convertidos se almacenan tal cual en el archivo MIDI generado. Consulte la documentación de su dispositivo MIDI para ver información acerca de cómo interpreta estos valores. @node Enriquecimiento de la salida MIDI @subsection Enriquecimiento de la salida MIDI @translationof Enhancing MIDI output @menu * El script Articulate:: @end menu La salida MIDI predeterminada es muy básica, pero se puede mejorar mediante la selección de los instrumentos MIDI las propiedades del bloque @code{\midi} y/o usando el script @file{articulate}. @cindex instrumentos, nombres @cindex MIDI, instrumentos @cindex articulate, script @cindex articulate.ly @funindex Staff.midiInstrument @node El script Articulate @subsection El script Articulate @translationof The Articulate script Para utilizar el script Articulate, tenemos que incluirlo al principio de nuestro archivo de entrada: @example \include "articulate.ly" @end example El script crea una salida MIDI en que las notas tienen una duración ajustada en el tiempo de forma que se correspondan con una serie de indicaciones de articulación y de tempo. Sin embargo, la salida tipografiada también se altera para reflejar literalmente el contenido de la salida MIDI. @example \score @{ \articulate << @var{@dots{} music @dots{}} >> \midi @{ @} @} @end example La instrucción @code{\articulate} habilita el procesado de las abreviaturas como trinos y mordentes de varias notas. En el propio script puede verse una lista completa de los elementos que están previstos. Véase @file{ly/articulate.ly}. @seealso Manual de aprendizaje: @rlearning{Otras fuentes de información}. Referencia de la notación: @ref{Score layout}. Archivos instalados: @file{ly/articulate.ly}. @warning{El script @file{articulate} puede acortar los acordes, lo que podría no ser adecuado para algunos tipos de instrumento, como el órgano. Las notas que no tienen ninguna articulación también se pueden acortar; así, para contener el alcance de este efecto limite el uso de de la función @code{\articulate} a segmentos de música más breves o modifique los valores de las variables definidas dentro del script @file{articulate} para compensar el efecto de acortamiento de las notas.} @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{\displayLilyMusic}, redireccione la salida hacia un archivo. @example lilypond archivo.ly >resultado.txt @end example @funindex \void Observe que LilyPond no se limita a mostrar la expresión musical, sino que también la interpreta (porque @code{\displayLilyMusic} la devuelve además de mostrarla). Simplemente inserte @code{\displayLilyMusic} dentro de la música existente con el objeto de obtener información sobre ella. Para interpretar y mostrar una sección de música en la consola, y al mismo tiempo suprimirla del archivo de salida, use la instrucción @code{\void}. @example @{ \void \displayLilyMusic \transpose c a, @{ c4 e g a bes @} c1 @} @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{@dots{}parámetros@dots{}} @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 experimentos 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.