@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @c This file is part of lilypond.tely @ignore Translation of GIT committish: bc4543c30c67f02dadc392880f27d4581e2d7681 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore @c \version "2.11.65" @node General input and output @chapter 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 * Input structure:: * Titles and headers:: * Working with input files:: * Controlling output:: * MIDI output:: @end menu @node Input structure @section Input structure El formato principal de entrada para LilyPond son archivos de texto. Por convenio, el nombre de estos archivos termina en @code{.ly}. @menu * Structure of a score:: * Multiple scores in a book:: * File structure:: @end menu @node Structure of a score @subsection Structure of a score @funindex \score Ub bloque @code{\score} debe contener una expresión musical única delimitada por un par de llaves: @example \score @{ ... @} @end example @c outer? @warning{Sólo puede haber @strong{una} expresión musical dentro del bloque @code{\score}, y @strong{debe} estar encerrada entre llaves.} Esta expresión musical única puede tener cualquier tamaño, y puede contener otras expresiones musicales hasta cualquier grado de complejidad. Todos los siguientes ejemplos son expresiones musicales: @example @{ c'4 c' c' c' @} @end example @lilypond[verbatim,quote] { { c'4 c' c' c'} { d'4 d' d' d'} } @end lilypond @lilypond[verbatim,quote] << \new Staff { c'4 c' c' c' } \new Staff { d'4 d' d' d' } >> @end lilypond @example @{ \new GrandStaff << \new StaffGroup << \new Staff @{ \flute @} \new Staff @{ \oboe @} >> \new StaffGroup << \new Staff @{ \violinI @} \new Staff @{ \violinII @} >> >> @} @end example Los comentarios son una excepción a esta regla general (para ver otras excepciones, consulte @ref{File structure}). Tanto los comentarios de una línea como los que están delimitados por @code{%@{ .. %@}} se pueden escribir en cualquier lugar dentro del archivo de entrada. Se pueden escribir dentro o fuera del bloque @code{\score}, y dentro o fuera de la expresión musical única dentro del bloque @code{\score}. @seealso Manual de aprendizaje: @rlearning{Working on input files}, @rlearning{Music expressions explained}, @rlearning{Score is a (single) compound musical expression}. @node Multiple scores in a book @subsection Multiple scores in a book @funindex \book @cindex movimientos, varios Un documento puede contener varias piezas de música y texto. Son ejemplos un libro de estudios o una parte orquestal con varios movimientos. Cada movimiento se introduce con un bloque @code{\score}: @example \score @{ @var{..música..} @} @end example y los textos se introducen con un bloque @code{\markup}: @example \markup @{ @var{..texto..} @} @end example @funindex \book Todos los movimientos y textos que aparecen en el mismo archivo @code{.ly} se tipografían normalmente en la forma de un solo archivo de salida. @example \score @{ @var{..} @} \markup @{ @var{..} @} \score @{ @var{..} @} @end example Sin embargo, si queremos varios archivos de salida a partir del mismo archivo @code{.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{File structure}. Una excepción importante se da dentro de los documentos de lilypond-book, en los que tenemos que escribir explícitamente un bloque @code{\book}, pues en caso contrario sólo aparecerá en la salida el primer @code{\score} o @code{\markup}. El encabezamiento de cada pieza se puede poner dentro del bloque @code{\score}. Antes de cada movimiento, se imprime el nombre de la pieza (@code{piece}) extraído del encabezamiento. El título del libro entero se puede poner dentro del bloque @code{\book}, pero si no está presente se inserta el encabezamiento @code{\header} que está al principio del archivo. @example \header @{ title = "Ocho miniaturas" composer = "Igor Stravinsky" @} \score @{ @dots{} \header @{ piece = "Romanze" @} @} \markup @{ ..texto de la segunda estrofa.. @} \markup @{ ..texto de la tercera estrofa.. @} \score @{ @dots{} \header @{ piece = "Menuetto" @} @} @end example @funindex \bookpart Se pueden agrupar distintas piezas de música en partes de un libro utilizando bloques @code{\bookpart}. Las partes de libro se separan por medio de saltos de página, y pueden dar comienzo con un título, como el libro propiamente dicho, mediante la especificación del bloque @code{\header}. @example \bookpart @{ \header @{ title = "Título del libro" subtitle = "Primera parte" @} \score @{ @dots{} @} @dots{} @} \bookpart @{ \header @{ subtitle = "Segunda parte" @} \score @{ @dots{} @} @dots{} @} @end example @node File structure @subsection File structure @funindex \paper @funindex \midi @funindex \layout @funindex \header @funindex \score @funindex \book @funindex \bookpart Un archivo @code{.ly} puede contener cualquier número de expresions del nivel superior, donde una expresión del nivel superior es una de las siguientes posibilidades: @itemize @bullet @item Una definición de salida, como @code{\paper}, @code{\midi} y @code{\layout}. Tal definición en el nivel más alto cambia los ajustes predeterminados para todo el libro. Si se introduce más de una de estas definiciones del mismo tipo en el nivel más alto, cualquier definición en una expresión posterior tiene prioridad. @item Una expresión directa de Scheme, como @code{#(set-default-paper-size "a7" 'landscape)} o @code{#(ly:set-option 'point-and-click #f)}. @item Un bloque @code{\header}. Esto establece el bloque de encabezamiento global. Es el bloque que contiene las definiciones de los ajustes para todo el libro, como el compositor, título, etc. @item Un bloque @code{\score}. Esta partitura se reúne con otras partituras del nivel superior, y se combina con ellas formando un @code{\book} (libro) único. Este comportamiento se puede cambiar estableciendo el valor de la variable @code{toplevel-score-handler} en el nivel superior. El @emph{handler} predeterminado se define en el archivo de inicio @file{../scm/@/lily@/.scm}. @item Un bloque @code{\book} combina lógicamente varios movimientos (es decir, varios bloques @code{\score}) en un solo documento. Si hay varias partituras @code{\score}, se crea un solo archivo de salida para cada bloque @code{\book}, en el que se concatenan todos los movimientos correspondientes. La únca razón para especificar explícitamente bloques @code{\book} en un archivo de entrada @code{.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 cmbiar 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 @{ @} \header @{ @} @} @end example Se puede cambiar este comportamiento estableciendo el valor de la bariable @code{toplevel-music-handler} en el nivel más alto. El @emph{handler} predeterminado se define en el archivo de inicio @file{../scm/@/lily@/.scm}. @item Un texto de marcado, por ejemplo una estrofa @example \markup @{ 2. Estrofa dos, línea uno @} @end example Los textos de marcado se colocan encima, en medio o debajo de las partituras o expresiones musicales, según donde aparezcan escritos. @cindex variables @item Una variable, como @example fulano = @{ c4 d e d @} @end example Esto se puede utilizar más tarde en el archivo escribiendo @code{\fulano}. El nombre de las variables ha de ser exclusivamente alfabético; sin números, guiones ni barras bajas. @end itemize El ejemplo siguiente muestra tres cosas que se pueden introducir en el nivel superior: @example \layout @{ % No justificar la salida ragged-right = ##t @} \header @{ title = "Do-re-mi" @} @{ c'4 d' e2 @} @end example En cualquier punto del archivo se pueden introducir cualquiera de las instrucciones léxicas siguientes: @itemize @item @code{\version} @item @code{\include} @item @code{\sourcefilename} @item @code{\sourcefileline} @item Un comentario de una línea, determinado por un símbolo @code{%} al principio. @item Un comentario de varias líneas, delimitado por @code{%@{ .. %@}}. @end itemize @seealso Manual de aprendizaje: @rlearning{How LilyPond input files work}. @node Titles and headers @section Titles and headers Casi toda la música impresa tiene un título y el nombre del compositor; ciertas piezas tienen mucha más información. @menu * Creating titles:: * Custom titles:: * Reference to page numbers:: * Table of contents:: @end menu @node Creating titles @subsection Creating titles Se crean títulos para cada uno de los bloques @code{\score} así como para todo el archivo de entrada (o bloque @code{\book}, libro) y las partes de libro (creadas mediante bloques @code{\bookpart}). El contenido de cada título se extrae a partir de los bloques @code{\header} (cabecera). El bloque de cabecera de un libro contempla lo siguiente: @table @code @funindex dedicatoria @item dedication El dedicatario de la música, centrado en lo alto de la primera página. @funindex title @item title El título de la música, centrado justo debajo de la dedicatoria. @funindex subtitle @item subtitle Subtítulo, centrado debajo del título. @funindex subsubtitle @item subsubtitle Sub-subtítulo, centrado debajo del subtítulo. @funindex poet @item poet Nombre del poeta, a la izquierda, debajo del subtítulo. @funindex composer @item composer Nombre del compositor, a la derecha, debajo del subtítulo. @funindex meter @item meter Texto de la medida, a la izquierda, debajo del poeta. @funindex opus @item opus Nombre del Opus, a la derecha, debajo del compositor. @funindex arranger @item arranger Nombre del arreglista, a la derecha, debajo del Opus. @funindex instrument @item instrument Nombre del instrumento, centrado, debajo del arreglista. También aparece centrado en lo alto de cada página (aparte de la primera). @funindex piece @item piece Nombre de la pieza, a la izquierda, debajo del instrumento. @cindex página, saltos, forzar @funindex breakbefore @item breakbefore Esto fuerza que el título comience sobre una página nueva (establézcalo a ##t o a ##f). @funindex copyright @item copyright Aviso de Copyright, centrado en la parte inferior de la primera página. Para insertar el símbolo de copyright symbol, consulte @ref{Text encoding}. @funindex tagline @item tagline Cartel de propósito general en el pie de página, centrado al final de la última. @end table A continuación presentamos una demostración de todos los campos que están disponibles. Fíjese en que puede utilizar en la cabecera cualquier instrucción de marcado de texto (Véase @ref{Formatting text}). @lilypond[quote,verbatim,line-width=11.0\cm] \paper { line-width = 9.0\cm paper-height = 10.0\cm } \book { \header { dedication = "dedicated to me" title = \markup \center-column { "Title first line" "Title second line, longer" } subtitle = "the subtitle," subsubtitle = #(string-append "subsubtitle LilyPond version " (lilypond-version)) poet = "Poet" composer = \markup \center-column { "composer" \small "(1847-1973)" } texttranslator = "Text Translator" meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge "r" } arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize #-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "nger" } instrument = \markup \bold \italic "instrument" piece = "Piece" } \score { { c'1 } \header { piece = "piece1" opus = "opus1" } } \markup { and now... } \score { { c'1 } \header { piece = "piece2" opus = "opus2" } } } @end lilypond Como se mostró anteriormente, puede usar varios bloques @code{\header}. Cuando los mismos campos aparecen en distintos bloques, tiene validez el último en definirse. A continuación un breve ejemplo. @example \header @{ composer = "Compositor" @} \header @{ piece = "Pieza" @} \score @{ \new Staff @{ c'4 @} \header @{ piece = "Otra pieza" % sobreescribe a la anterior @} @} @end example Si define la cabecera @code{\header} dentro del bloque @code{\score}, por lo general se imprimirán solamente las cabeceras @code{piece} y @code{opus}. Fíjese en que la expresión musical debe aparecer antes del @code{\header}. @lilypond[quote,verbatim,line-width=11.0\cm] \score { { c'4 } \header { title = "title" % not printed piece = "piece" opus = "opus" } } @end lilypond @funindex print-all-headers @noindent Se puede cambiar este comportamiento (e imprimir todas las cabeceras cuando la cabecera @code{\header} está definida dentro del bloque @code{\score}) mediante la utilización de @example \paper@{ print-all-headers = ##t @} @end example @cindex copyright @cindex tagline El pie de página por omisión se encuentra vacío, excepto para la primera página, en la que se inserta el campo de @code{copyright} extraído del @code{\header}, y para la última página, en la que se escribe el cartel @code{tagline} sacado del bloque @code{\header}. La línea por omisión para este cartel es @qq{Music engraving by LilyPond (@var{version})}.@footnote{Las partituras bien tipografiadas son una magnífica promoción para nosotros, así que por favor, si puede, conserve intacta la línea del letrero.} Las cabeceras se pueden quitar completamente estableciendo su valor a falso. @example \header @{ tagline = ##f composer = ##f @} @end example @node Custom titles @subsection Custom titles Una opción más avanzada es cambiar las definiciones de las variables siguientes dentro del bloque @code{\paper} block. El archivo de inicio @file{ly/titling-init.ly} ofrece un listado de la disposición predeterminada. @table @code @funindex bookTitleMarkup @item bookTitleMarkup Es el título que se escribe en lo alto del documento de salida completo. Normalmente contiene el compositor y el título de la pieza. @funindex scoreTitleMarkup @item scoreTitleMarkup Es el título que se coloca por encima de un bloque @code{\score}. normalmente contiene el nombre del movimiento (campo @code{piece}). @funindex oddHeaderMarkup @item oddHeaderMarkup Es el encabezamiento de las páginas de numeración impar. @funindex evenHeaderMarkup @item evenHeaderMarkup Es el encabezamiento de las páginas de numeración par. Si se deja sin especificar, se usará el encabezamiento de las páginas impares. De forma predeterminada, los encabezamientos se definen de tal forma que el número de página está en el borde exterior, y el isntrumento está centrado. @funindex oddFooterMarkup @item oddFooterMarkup Es el pie de las páginas de numeración impar. @funindex evenFooterMarkup @item evenFooterMarkup Es el pie de las páginas de numeración par. Si se deja sin especificar, se usará en su lugar el encabezamiento de las páginas impares. De forma predeterminada, el pie de página tiene el aviso de copyright en la primera página, y el cartel @code{tagline} en la última. @end table @cindex \paper @cindex encabezamiento @cindex header @cindex pie @cindex disposición de la página @cindex títulos La definición siguiente pone el título en el extremo izquierdo, y el compositor en el extremo derecho sobre una única línea. @verbatim \paper { bookTitleMarkup = \markup { \fill-line { \fromproperty #'header:title \fromproperty #'header:composer } } } @end verbatim @node Reference to page numbers @subsection Reference to page numbers Se puede marcar un lugar determinado de una partitura utilizando la instrucción @code{\label} (etiqueta), bien en lo alto de la estructura o bien dentro de la música. Posteriormente se puede hacer referencia a esta etiqueta dentro de un elemento de marcado, para obtener el número de la página en que se encuentra la marca, usando la instrucción de marcado @code{\page-ref}. @lilypond[verbatim,line-width=11.0\cm] \header { tagline = ##f } \book { \label #'firstScore \score { { c'1 \pageBreak \mark A \label #'markA c' } } \markup { The first score begins on page \page-ref #'firstScore "0" "?" } \markup { Mark A is on page \page-ref #'markA "0" "?" } } @end lilypond La instrucción de marcado @code{\page-ref} toma tres argumentos: @enumerate @item la etiqueta, un símbolo de scheme, p.ej. @code{#'firstScore}; @item un elemento de marcado que se usará como medidor para estimar las dimensiones del marcado; @item un elemento de marcado que se utilizará en sustitución del número de página si la etiqueta es desconocida. @end enumerate El motivo de que se necesite un medidor es que en el momento en que se están interpretando los marcados, los saltos de página aún no se han producido y por tanto los números de página no se conocen todavía. Para sortear este inconveniente, la interpretación real del marcado se retrasa hasta un momento posterior; sin embargo, las dimensiones del marcado se tienen que conocer de antemano, así que se usa el medidor para decidir estas dimensiones. Si el libro tiene entre 10 y 99 páginas, el medidor puede ser "00", es decir, un número de dos dígitos. @predefined @funindex \label @code{\label}, @funindex \page-ref @code{\page-ref}. @endpredefined @node Table of contents @subsection Table of contents Se puede insertar un índice general o tabla de contenidos utilizando la instrucción @code{\markuplines \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 \markuplines \table-of-contents \pageBreak \tocItem \markup "Primera partitura" \score { { c' % ... \tocItem \markup "Un punto concreto dentro de la primera partitura" d' % ... } } \tocItem \markup "Segunda partitura" \score { { e' % ... } } @end verbatim Los elementos de marcado que se usan para dar formato al índice general se encuentran definidos dentro del bloque @code{\paper}. Los elementos predeterminados son @code{tocTitleMarkup}, para dar formato al título de la tabla, y @code{tocItemMarkup}, para aplicar formato a los elementos del índice, que consisten en el título del elemento y el número de página. Estas variables se pueden cambiar por parte del usuario: @verbatim \paper { %% Traducir el título del índice al español: tocTitleMarkup = \markup \huge \column { \fill-line { \null "Índice general" \null } \hspace #1 } %% usar una fuente mayor tocItemMarkup = \markup \large \fill-line { \fromproperty #'toc:text \fromproperty #'toc:page } } @end verbatim Observe la forma en que nos referimos al texto y al número de página del elemento de índice, dentro de la definición @code{tocItemMarkup}. También se pueden definir nuevas instrucciones y elementos de marcado para crear índices generales más eleborados: @itemize @item en primer lugar, defina una variable de marcado nueva dentro del bloque @code{\paper} @item luego defina una función de música cuyo propósito es añadir un elemento al índice general utilizando esta variable de marcado del bloque @code{\paper}. @end itemize En el ejemplo siguiente se define un estilo nuevo para introducir los nombres de los actos de una ópera en el índice general: @verbatim \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) @end verbatim @lilypond[line-width=11.0\cm] \header { tagline = ##f } \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) \book { \markuplines \table-of-contents \tocAct \markup { Atto Primo } \tocItem \markup { Coro. Viva il nostro Alcide } \tocItem \markup { Cesare. Presti omai l'Egizzia terra } \tocAct \markup { Atto Secondo } \tocItem \markup { Sinfonia } \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } \markup \null } @end lilypond @seealso Archivos de inicio: @file{ly/@/toc@/-init@/.ly}. @predefined @funindex \table-of-contents @code{\table-of-contents}, @funindex \tocItem @code{\tocItem}. @endpredefined @node Working with input files @section Working with input files @menu * Including LilyPond files:: * Different editions from one source:: * Text encoding:: * Displaying LilyPond notation:: @end menu @node Including LilyPond files @subsection 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{Different editions from one source}. Los archivos que están en el directorio de trabajo actual se pueden referenciar simplemente especificando el nombre depués de la instrucción @code{\include}. Los archivos en otros lugares se pueden incluir proporcionando una referencia de ruta completa o una ruta relativa (pero utilice la barra inclinada normal del UNIX, /, no la barra invertida de DOS/Windows, \, como separador de directorio). Por ejemplo, si @file{material.ly} está situado un directorio por encima del directorio de trabajo actual, utilice @example \include "../material.ly" @end example @noindent o si los archivos de las partes orquestales incluidas están todos situados en un subdirectorio llamado @file{partes} dentro del directorio actual, use @example \include "partes/VI.ly" \include "partes/VII.ly" ... etc. @end example Los archivos de inclusión también pueden contener enunciados @code{\include} a su vez. 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. También se pueden incluir archivos de un directorio que está en una ruta de búsqueda especificada como opción al invocar a LilyPond desde la línea de órdenes. Los archivos incluidos se especifican usando solamente su nombre de archivo. Por ejemplo, para compilar mediante este método un archivo @file{principal.ly} que incluye archivos situados en un subdirectorio llamado @file{partes}, cambie al directorio que contiene @file{principal.ly} e introduzca @example lilypond --include=partes principal.ly @end example y en @file{principal.ly} escriba @example \include "VI.ly" \include "VII.ly" ... etc. @end example Los archivos que se incluyen en muchas partituras se pueden poner en el directorio de LilyPond @file{../ly} (la localización de este directorio depende de la instalación: véase @rlearning{Other sources of information}). 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{english.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{Other sources of information}. 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{Scores and parts}. @seealso Manual de aprendizaje: @rlearning{Other sources of information}, @rlearning{Scores and parts}. @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 Different editions from one source @subsection Different editions from one source Se encuentran disponibles varios mecanismos para facilitar la producción de distintas versiones de una partitura a partir de la misma fuente musical. Las variables son quizá más útiles para combinar secciones extensas de música y/o anotaciones de diversas formas, mientras que las etiquetas son más útiles para seleccionar una de entra varias secciones de música más cortas. 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 * Using variables:: * Using tags:: @end menu @node Using variables @unnumberedsubsubsec 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{Organizing pieces with variables}. Por ejemplo, una partitura vocal @notation{a cappella} con frecuencia incluye una reducción de piano de las partes para ensayar que ees 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{Automatic part combining}. He aquí un ejemplo: @lilypond[verbatim,quote] sopranoMusic = \relative c'' { a4 b c b8( a)} altoMusic = \relative g' { e4 e e f } tenorMusic = \relative c' { c4 b e d8( c) } bassMusic = \relative c' { a4 gis a d, } allLyrics = \lyricmode {King of glo -- ry } << \new Staff = "Soprano" \sopranoMusic \new Lyrics \allLyrics \new Staff = "Alto" \altoMusic \new Lyrics \allLyrics \new Staff = "Tenor" { \clef "treble_8" \tenorMusic } \new Lyrics \allLyrics \new Staff = "Bass" { \clef "bass" \bassMusic } \new Lyrics \allLyrics \new PianoStaff << \new Staff = "RH" { \set Staff.printPartCombineTexts = ##f \partcombine \sopranoMusic \altoMusic } \new Staff = "LH" { \set Staff.printPartCombineTexts = ##f \clef "bass" \partcombine \tenorMusic \bassMusic } >> >> @end lilypond Se pueden producir partituras distintas que presenten sólo las partes vocales o sólo la parte de piano, cambiando solamente los enunciados estructurales, sin modificar la notación musical. Para partituras extensas, las definiciones de variable se pueden poner en archivos separados que se incluyen más tarde, véase @ref{Including LilyPond files}. @node Using tags @unnumberedsubsubsec Using tags @funindex \tag @funindex \keepWithTag @funindex \removeWithTag @cindex etiqueta @cindex manetener 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 etoiquetadas de esta manera se pueden seleccionar o filtrar más tarde por su nombre, usando bien @code{\keepWithTag #'@var{nombre}} o bien @code{\removeWithTag #'@var{nombre}}. El resultado de la aplicación de estos filtros a la música etiquetada es como sigue: @multitable @columnfractions .5 .5 @headitem Filtro @tab Resultado @item Música etiquetada precedida de @code{\keepWithTag #'@var{nombre}} @tab Se incluye la música no etiquetada y la música etiquetada con @var{nombre}; se excluye la música etiquetada con cualquier otro nombre de etiqueta. @item Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}} @tab Se incluye la música no etiquetada y la música etiquetada con cualquier nombre de etiqueta distinto a @var{nombre}; se excluye la música etiquetada con @var{nombre}. @item Música etiquetada no precedida de @code{\keepWithTag} ni de @code{\removeWithTag} @tab Se incluye toda la música etiquetada y no etiquetada. @end multitable Los argumentos de las instrucciones @code{\tag}, @code{\keepWithTag} y @code{\removeWithTag} deben ser un símbolo (como @code{#'partitura} o @code{#'parte}), seguido de una expresión musical. En el ejemplo siguiente vemos dos versiones de una pieza musical, una que muestra trinos con la notación usual y otra con los trinos expandidos explícitamente: @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills {d8.\trill } \tag #'expand {\repeat unfold 3 {e32 d} } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music } @end lilypond @noindent De forma alternativa, a veces es más fácil excluir secciones de música: @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills {d8.\trill } \tag #'expand {\repeat unfold 3 {e32 d} } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music } @end lilypond El flitrado con etiquetas se puede aplicar a articulaciones, textos, etc. anteponiendo @example -\tag #'@var{mi-etiqueta} @end example a una articulación. Por ejemplo, esto define una nota con una indicación opcional de digitación y una nota con una anotación condicional: @example c1-\tag #'finger ^4 c1-\tag #'warn ^"¡Ojo!" @end example Se pueden poner varias etiquetas sobre expresiones con varias entradas de @code{\tag}: @lilypond[quote,verbatim] music = \relative c'' { \tag #'a \tag #'both { a a a a } \tag #'b \tag #'both { b b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >> @end lilypond Se pueden aplicar varios filtros @code{\removeWithTag} a una sola expresión musical para quitar varias secciones etiquetadas con nombres distintos: @lilypond[verbatim,quote] music = \relative c'' { \tag #'A { a a a a } \tag #'B { b b b b } \tag #'C { c c c c } \tag #'D { d d d d } } { \removeWithTag #'B \removeWithTag #'C \music } @end lilypond Dos o más filtros @code{\keepWithTag} aplicados a una sola expresión musical producen la eliminación de @emph{todas} las secciones etiquetadas, porque el primer filtro quita todas las secciones etiquetadas excepto la que se nombra, y el segundo filtro elimina incluso esa sección etiquetada. @seealso Manual de aprendizaje: @rlearning{Organizing pieces with variables}. Referencia de la notación: @ref{Automatic part combining}, @ref{Including LilyPond files}. @ignore @c This warning is more general than this placement implies. @c Rests are not merged whether or not they come from tagged sections. @c Should be deleted? -td @knownissues Multiple rests are not merged if you create a score with more than one tagged section at the same place. @end ignore @node Text encoding @subsection Text encoding LilyPond usa el conjunto de caracteres definido por el consorcio Unicode y la norma ISO/IEC 10646. Define un nombre único y un código para los conjuntos de caracteres que se utilizan en prácticamente todos los idiomas modernos y también en muchos otros. Unicode se puede implementar utilizando varios esquemas de codificación distintos. LilyPond usa la codificación UTF-8 (UTF son las siglas de @emph{Unicode Transformation Format}, o formato de transformación de Unicode) que representa todos los caracteres comunes de Latin en un solo byte, y representa otros caracteres usando un formato de longitud variable de hasta cuatro bytes. El aspecto visual real de los caracteres viene determinado por los glifos que se definen en las fuentes tipográficas concretas que se tengan disponibles: una fuente tipográfica define la asignación de un subconjunto de los códigos de Unicode a glifos. LilyPond usa la biblioteca Pango para representar y disponer tipográficamente textos multilingües. Lilypond no realiza ninguna conversión en la codificación de la entrada. Esto significa que cualquier text, ya sea el título, la letra de la canción o una instrucción musical que contenga caracteres distintos a los del conjunto ASCII, se deben codificar en UTF-8. La forma más fácil de escribir dicho texto es utilizar un editor preparado para Unicode y guardar el archivo con la codificación UTF-8. Casi todos los editores modernos populares contemplan el UTF-8, por ejemplo lo hacen vim, Emacs, jEdit, y GEdit. Todos los sistemas MS Windows posteriores a NT usan Unicode como codificación de caracteres nativa, de manera que incluso el accesorio Bloc de Notas (Notepad) puede editar y guardar un archivo en el formato UTF-8. Una alternativa más funcional para Windows es BabelPad. Si un archivo de entrada que contiene un carácter que no es ASCII, no se guarda en el formato UTF-8, se genera el mensaje de error @example FT_Get_Glyph_Name () error: argumento inválido @end example He aquí un ejemplo que muestra texto cirílico, hebreo y portugués: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } % Hebrew hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } % Portuguese portuguese = \lyricmode { à vo -- cê uma can -- ção legal } \relative { c2 d e f g f e } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \portuguese } @end lilypond Para introducir un caracter aislado para el que se conoce la secuencia de escape de Unicode pero no está disponible en el editor que se está usando, use @code{\char ##xhhhh} dentro de un bloque @code{\markup}, donde @code{hhhh} es el código hexadecimal del carácter en cuestión. Por ejemplo, @code{\char ##x03BE} inserta el carácter Unicode U+03BE, que tiene el nombre Unicode @qq{Letra griega Xi pequeña}. Se puede sustituir cualquier código hexadecimal 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 caracteres codificados en UTF-8 que se usan en cuatro lugares: en una llamada de ensayo, como texto de articulación, en la letra y como texto independiente bajo la partitura: @lilypond[quote,verbatim] \score { \relative c'' { c1 \mark \markup { \char ##x03EE } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } } \markup { "Copyright 2008" \char ##x00A9 } @end lilypond Para escribir el símbolo de copyright en la nota de créditos, utilice: @example \header @{ copyright = \markup @{ \char ##x00A9 "2008" @} @} @end example @node Displaying LilyPond notation @subsection Displaying LilyPond notation @funindex \displayLilyMusic La impresión textual de una expresión musical en notación de LilyPond puede hacerse usando la función musical @code{\displayLilyMusic}. Por ejemplo, @example @{ \displayLilyMusic \transpose c a, @{ c e g a bes @} @} @end example imprimirá @example @{ a, cis e fis g @} @end example De forma predeterminada, LilyPond imprime estos mensajes en la consola junto al resto de los mensajes. Para discernir entre estos mensajes y guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la salida hacia un archivo. @c TODO What happens under Windows? @example lilypond archivo.ly >resultado.txt @end example @node Controlling output @section Controlling output @menu * Extracting fragments of music:: * Skipping corrected music:: @end menu @node Extracting fragments of music @subsection Extracting fragments of music Es posible citar pequeños fragmentos de una partitura grande directamente a partir de la salida. Puede compararse con la separación de una pieza de una partitura, recortándola con tijeras. Esto se hace definiendo los compases que se deben recortar. Por ejemplo, la inclusión de la siguiente definición @verbatim \layout { clip-regions = #(list (cons (make-rhythmic-location 5 1 2) (make-rhythmic-location 7 3 4))) } @end verbatim @noindent extrae un fragmento empezando por la mitad del quinto compás y finalizando en el séptimo compás. El significado de @code{5 1 2} es: después de una blanca (1/2) en el compás 5, y el de @code{7 3 4} después de tres negras del compás 7. Se pueden definir más zonas de recorte añadiendo más parejas de definición de tiempo rhythmic-location a la lista. Para poder utilizar esta funcionalidad, LilyPond se debe invocar con la opción @code{-dclip-systems}. Los recortes aparecen en la salida como archivos EPS, y se convierten en PDF y PNG si estos formatos también están activados. Para ver más información sobre los formatos de salida, consulte @rprogram{Invoking lilypond}. @node Skipping corrected music @subsection 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 estams añadiendo las notas). Para acelerar este proceso de corrección, es posible saltar la composición tipográfica de todos excepto unos pocos de los últimos compases. Esto se consigue poniendo @verbatim showLastLength = R1*5 \score { ... } @end verbatim @noindent en nuestro archivo fuente. Esto hará que se tracen sólo los últimos cinco compases (suponniendo un compás de 4/4) de cada una de las partituras @code{\score} del archivo de entrada. Para piezas largas, el tipografiado de únicamente una parte pequeña es con frecuencia un orden de magnitud más rápido que el de la obra completa. Si estamos trabajando sobre el principio de una partitura que ya hemos tipografiado (p.ej., para añadir una parte instrumental nueva), también puede ser útil la propiedad @code{showFirstLength}. Este mecanismo de pasar por alto partes de un partitura se puede controlar con un grano más fino mediante la propiedad @code{Score.skipTypesetting}. Cuando su valor está establecido, no se lleva a cabo ningún tipografiado en absoluto. Esta propiedad se usa también para controlar la salida al archivo MIDI. Observe que pasa por alto todos los eventos, incluidos el tempo y los cambios de instrumento. Está usted advertido. @lilypond[quote,fragment,ragged-right,verbatim] \relative c'' { c8 d \set Score.skipTypesetting = ##t e e e e e e e e \set Score.skipTypesetting = ##f c d b bes a g c2 } @end lilypond En música polifónica, @code{Score.skipTypesetting} afecta a todas las voces y pentagramas, ahorrando más tiempo incluso. @node MIDI output @section MIDI output @cindex sonido @cindex MIDI El MIDI (Musical Instrument Digital Interface, Interfase Digital para Instrumentos Musicales) es un estándar para interconectar y controlar instrumentos musicales electrónicos. Un archivo o secuencia MIDI es una serie de notas dentro de un conjunto de pistas. No es un archivoo de sonidos reales; se necesita un programa reproductor especial para traducir la serie de notas en sonidos de verdad. Cualquier música se puede convertir a archivos MIDI, de manera que podamos escuchar lo que hayamos introducido. Esto es muy conveniente para comprobar la corrección de la música; las octavas equivocadas o las alteraciones erróneas se ponen de relieve muy claramente al escuchar la salida MIDI. @c TODO Check this La salida MIDI reserva un canal por cada pentagrama, y otro para los ajustes globales. Por ello, el archivo MIDI no debe tener más de 15 pautas (o 14 si no se usa la percusión). Otros pentagramas permanecen en silencio. @menu * Creating MIDI files:: * MIDI block:: * What goes into the MIDI output?:: * Repeats in MIDI:: * Controlling MIDI dynamics:: * Percussion in MIDI:: @end menu @node Creating MIDI files @subsection Creating MIDI files Para crear un MIDI a partir de una pieza de música, escriba un bloque @code{\midi} en la partitura, por ejemplo: @example \score @{ @var{...música...} \midi @{ @} @} @end example Si hay un bloque @code{\midi} dentro de un @code{\score} que no tenga ningún bloque @code{\layout}, solamente se producirá MIDI. Si se necesita una notación impresa, debe haber también un bloque @code{\layout}: @example \score @{ @var{...música...} \midi @{ @} \layout @{ @} @} @end example Se traducen correctamente a la salida MIDI la altura y duración de las notas, las ligaduras de unión, matices y cambios de tempo. Las indicaciones dinámicas, crescendi y decrescendi se traducen a niveles de volumen MIDI. Las marcas dinámicas se traducen a una fracción fija del rango de volumen MIDI disponible. Los crescendi y decrescendi hacen que el volumen varía linealmente entre sus dos extremos. El efecto de las indicaciones dinámicas sobre la salida MIDI se puede eliminar por completo, véase @ref{MIDI block}. El tempo inicial y los cambios de tempo posteriores se pueden especificar utilizando la instrucción @code{\tempo} dentro de la propia notación musical. Se reflejan en cambios de tempo en la salida MIDI. Esta instrucción normalmente hace que se imprima la indicación metronómica, pero esto se puede eliminar, véase @ref{Metronome marks}. Más abajo se describe una forma alternativa de especificar el tempo MIDI inicial o global, véase @ref{MIDI block}. @unnumberedsubsubsec Instrument names @cindex instrumento, nombres de @funindex Staff.midiInstrument El nombre del instrumento MIDI se establece mediante la propiedad @code{Staff.midiInstrument}. El nombre del instrumento se debe elegir de entre los que están en la lista que aparece en @ref{MIDI instruments}. @example \new Staff @{ \set Staff.midiInstrument = #"glockenspiel" @var{...notes...} @} @end example @example \new Staff \with @{midiInstrument = #"cello"@} @{ @var{...notes...} @} @end example Si el instrumento elegido no coincide exactamente con uno de los instrumentos de la lista de instrumentos MIDI, se usará el instrumento Piano de Cola (@code{"acoustic grand"}). @snippets @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] {changing-midi-output-to-one-channel-per-voice.ly} @knownissues @c In 2.11 the following no longer seems to be a problem -td @ignore Unterminated (de)crescendos will not render properly in the midi file, resulting in silent passages of music. The workaround is to explicitly terminate the (de)crescendo. For example, @example @{ a\< b c d\f @} @end example @noindent will not work properly but @example @{ a\< b c d\!\f @} @end example @noindent will. @end ignore Los cambios del volumen MIDI sólo tienen lugar al principio de la nota, por lo que los crescendi y decrescendi no pueden afectar al volumen de una sola nota. No todos los repoductores de MIDI manejar adecuadamente los cambios de tempo de la salida MIDI. Entre los reproductores que se sabe que funcionan se encuentran el Reproductor de Medios de MS Windows y @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. @node MIDI block @subsection MIDI block @cindex bloque MIDI Si se requiere una salida MIDI, debe aparecer un bloque @code{\midi} dentro de un bloque de partitura. Es análogo al bloque layout de diseño de página, pero algo maś simple. Con frecuencia, el bloque @code{\midi} se deja vacío, pero puede contener reorganizaciones de contextos, definiciones de contexto nuevas o código para fijar valores de propiedades. Por ejemplo, en el ejemplo siguiente se establece el tempo inicial exportado alarchivo MIDI sin hacer que se imprima una indicación de tempo: @example \score @{ @var{...música...} \midi @{ \context @{ \Score tempoWholesPerMinute = #(ly:make-moment 72 4) @} @} @} @end example En este ejemplo, el tempo se establece a 72 pulsos de negra por minuto. Esta clase de especificación de tempo no puede tomar como argumento una figura con puntillo. Si necesitamos una figura con puntillo, dividimos la nota con puntillo en figuras más pequeñas. Por ejemplo, un tempo de 90 negras con puntillo por minuto se puede especificar como 270 corcheas por minuto: @example tempoWholesPerMinute = #(ly:make-moment 270 8) @end example @cindex MIDI, definiciones de contexto Las definiciones de contexto siguen con precisión la misma sintaxis que la de un bloque @code{\layout}. Los módulos de traducción para el sonido reciben el nombre de ejecutantes. Los contextos para la salida MIDI se definen en @file{../ly/@/performer@/-init@/.ly}, véase @rlearning{Other sources of information}. Por ejemplo, para eliminar el efecto de los matices de la salida MIDI, inserte las líneas siguientes en el bloque @code{\midi@{ @}}. @example \midi @{ ... \context @{ \Voice \remove "Dynamic_performer" @} @} @end example La salida MIDI se crea sólo cuando se incluye un bloque @code{\midi} dentro de un bloque de partitura definido con una instrucción @code{\score}. Si se sitúa dentro de un contexto de partitura instanciado explícitamente (es decir, dentro de un bloque @code{\new Score}) el archivo no funciona. Para resolverlo, encierre las instrucciones @code{\new Score} y @code{\midi} dentro de un bloque @code{\score}. @example \score @{ \new Score @{ @dots{}notas@dots{} @} \midi @{ @} @} @end example @node What goes into the MIDI output? @subsection What goes into the MIDI output? @unnumberedsubsubsec Supported in MIDI @cindex alturas en MIDI @cindex MIDI, alturas @cindex cuartos de tono en MIDI @cindex MIDI, cuartos de tono @cindex microtonos en MIDI @cindex MIDI, microtonos @cindex acordes, nombres de, en MIDI @cindex MIDI, nombres de @cindex duraciones en MIDI @cindex MIDI, duraciones @c TODO etc Los siguientes elementos de notación se reflejan en la salida MIDI: @itemize @item Alturas @item Cuartos de tono (véase @ref{Accidentals}. La reproducción necesita un reproductor que contemple la curvatura de tono o @emph{pitch bend}.) @item Acordes escritos como nombres de acorde @item Ritmos escritos como duraciones de las notas, incluidos los grupos de valoración especial @item Trémolos escritos sin @q{@code{:}[@var{número}]} @item Ligaduras de unión @item Matices o indicaciones de dinámica @item Crescendi y decrescendi sobre varias notas @item Cambios de tempo insertados con una marca metronómica @item Letra de las canciones @end itemize @unnumberedsubsubsec Unsupported in MIDI @c TODO index as above Los siguientes elementos de notación no tienen ningún efecto sobre la salida MIDI: @itemize @item Duraciones escritas como anotaciones, p.ej. el swing @item Cambios de tempo escritos como anotacioens sin marca de tempo @item Staccato y otras articulaciones y ornamentos @item Ligaduras de expresión y de fraseo @item Crescendi y decrescendi sobre una nota única @item Trémolos introducidos con @q{@code{:}[@var{número}]} @item Bajo cifrado @end itemize @node Repeats in MIDI @subsection Repeats in MIDI @cindex repeticiones, expandir @funindex \unfoldRepeats Con un poco de trucaje, se puede hacer que cualquier tipo de repetición esté presente en la salida MIDI. Esto se consigue mediante la aplicación de la función musical @code{\unfoldRepeats}. Esta función cambia todas las repeticiones a repeticiones desplegadas. @lilypond[quote,verbatim] \unfoldRepeats { \repeat tremolo 8 {c'32 e' } \repeat percent 2 { c''8 d'' } \repeat volta 2 {c'4 d' e' f'} \alternative { { g' a' a' g' } {f' e' d' c' } } } \bar "|." @end lilypond Al crear un archivo de partitura que use @code{\unfoldRepeats} para el MIDI, es necesario hacer dos bloques @code{\score}: uno para el MIDI (con repeticiones desplegadas) y otro para la notación impresa (con repeticiones de volta --primera y segunda vez--, tremolo --trémolo--, y percent --repetición de compases--). Por ejemplo, @example \score @{ @var{..música..} \layout @{ .. @} @} \score @{ \unfoldRepeats @var{..música..} \midi @{ .. @} @} @end example @node Controlling MIDI dynamics @subsection Controlling MIDI dynamics La dinámica en el MIDI está implementada por medio del intérprete Dynamic_performer que reside de forma predeterminada dentro del contexto Voice. Es posible controlar el volumen MIDI general, el volumen relativo de los matices dinámicos y el volumen relativo de los distintos instrumentos. @unnumberedsubsubsec Dynamic marks Los matices o indicaciones de dinámica se traducen a una fracción fija del rango de volumen MIDI disponible. Las fracciones predeterminadas se extienden desde 0.25 para @notation{ppppp} hasta 0.95 para @notation{fffff}. El conjunto de indicaciones dinámicas y las fracciones asociadas pueden verse en @file{../scm/midi.scm}, véase @rlearning{Other sources of information}. Este conjunto de fracciones se puede cmbiar o extender proporcionando una función que toma como argumento una indicación dinámica y devuelve la fracción requerida, y estableciendo @code{Score.dynamicAbsoluteVolumeFunction} a esta función. Por ejemplo, si se requiere una indicación dinámica @notation{rinforzando}, @code{\rfz}, ésta no tiene ningún efecto predeterminado sobre el voumen MIDI, pues no está incluida en el conjunto predeterminado. De igual manera, si se define una indicación dinámica nueva con @code{make-dynamic-script}, ésta tampoco estará incluida en el conjunto predeterminado. El ejemplo siguiente muestra cómo hay que añadir el volumen MIDI para estas indicaciones dinámicas. La función Scheme establece la fracción a 0.9 si se encuentra una indicación dinámica rfz, y en caso contrario llama a la función predeterminada. @lilypond[verbatim,quote] #(define (myDynamics dynamic) (if (equal? dynamic "rfz") 0.9 (default-dynamic-absolute-volume dynamic))) \score { \new Staff { \set Staff.midiInstrument = #"cello" \set Score.dynamicAbsoluteVolumeFunction = #myDynamics \new Voice { \relative c'' { a\pp b c-\rfz } } } \layout {} \midi {} } @end lilypond Como alternativa, si se necesitara redefinir la tabla completa de fracciones, sería mejor usar el procedimiento @notation{default-dynamic-absolute-volume} que aparece en @file{../scm/midi.scm} y la tabla asociada como modelo. El último ejemplo de esta sección muestra cómo se puede hacer esto. @unnumberedsubsubsec Overall MIDI volume El volumen general máximo y mínimo de las indicaciones dinámicas de MIDI se controla estableciendo valores para las propiedades @code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel de @code{Score}. Estas propiedades tienen efecto solamente sobre las indicaciones dinámicas, por ello si queremos que tengan validez desde el comienzo de la partitura, se debe colocar allí una indicación de dinámica. La fracción que corresponde a cada indicación dinámica se modifica con esta fórmula: @example midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fracción @end example En el ejemplo siguiente, el rango de intensidad dinámica del volumen general MIDI está limitado al intervalo desde 0.2 hasta 0.5. @lilypond[verbatim,quote] \score { << \new Staff { \key g \major \time 2/2 \set Staff.midiInstrument = #"flute" \new Voice \relative c''' { r2 g\mp g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { \context { \Score tempoWholesPerMinute = #(ly:make-moment 72 2) midiMinimumVolume = #0.2 midiMaximumVolume = #0.5 } } } @end lilypond @unnumberedsubsubsec Equalizing different instruments (i) Si las propiedades de volumen MIDI máximo y mínimo están establecidas en el contexto @code{Staff} se pueden controlar los volúmenes relativos de los instrumentos MIDI. Esto proporciona un ecualizador de instrumentos básico que puede realzar significativamente la calidad de la salida MIDI. En este ejemplo se reduce el volumen del clarinete con relación al de la flauta. Debe haber una indicación dinámica en la primera nota de cada instrumento para que esto funcione correctamente. @lilypond[verbatim,quote] \score { << \new Staff { \key g \major \time 2/2 \set Staff.midiInstrument = #"flute" \set Staff.midiMinimumVolume = #0.7 \set Staff.midiMaximumVolume = #0.9 \new Voice \relative c''' { r2 g\mp g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \set Staff.midiMinimumVolume = #0.3 \set Staff.midiMaximumVolume = #0.6 \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { \context { \Score tempoWholesPerMinute = #(ly:make-moment 72 2) } } } @end lilypond @unnumberedsubsubsec Equalizing different instruments (ii) Si las propiedades de volumen MIDI máximo y mínimo no están establecidas, de forma predeterminada LilyPond aplica un pequeño grado de ecualización a algunos instrumentos. Los instrumentos y la ecualización que se aplica se muestra en la tabla @notation{instrument-equalizer-alist} en @file{../scm/midi.scm}. El ecualizador básico predeterminado se puede sustituir estableciendo @code{instrumentEqualizer} en el contexto @code{Score} a un procedimiento Scheme nuevo que acepte el nombre de un instrumento MIDI como único argumento y devuelva un par de fracciones que dan los volúmenes máximo y mínimo que se aplican a dicho instrumento. Esta sustitución se hace de la misma forma que mostramos para reestablecer la fracción de volumen absoluto @code{dynamicAbsoluteVolumeFunction} al comienzo de esta sección. El ecualizador predeterminado, @notation{default-instrument-equalizer}, en @file{../scm/midi.scm}, muestra cómo se puede escribir tal procedimiento. El ejemplo siguiente establece los volúmenes relativos de la flauta y del clarinete a los mismos valores que el ejemplo anterior. @lilypond[verbatim,quote] #(define my-instrument-equalizer-alist '()) #(set! my-instrument-equalizer-alist (append '( ("flute" . (0.7 . 0.9)) ("clarinet" . (0.3 . 0.6))) my-instrument-equalizer-alist)) #(define (my-instrument-equalizer s) (let ((entry (assoc s my-instrument-equalizer-alist))) (if entry (cdr entry)))) \score { << \new Staff { \key g \major \time 2/2 \set Score.instrumentEqualizer = #my-instrument-equalizer \set Staff.midiInstrument = #"flute" \new Voice \relative c''' { r2 g\mp g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \new Voice \relative c'' { b1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { \context { \Score tempoWholesPerMinute = #(ly:make-moment 72 2) } } } @end lilypond @ignore @c Delete when satisfied this is adequately covered elsewhere -td @n ode Microtones in MIDI @s ubsection Microtones in MIDI @cindex microtones in MIDI Microtones consisting of half sharps and half flats are exported to the MIDI file and render correctly in MIDI players which support pitch bending. See @ref{Note names in other languages}. Here is an example showing all the half sharps and half flats. It can be copied out and compiled to test microtones in your MIDI player. @lilypond[verbatim,quote] \score { \relative c' { c cih cis cisih d dih ees eeh e eih f fih fis fisih g gih gis gisih a aih bes beh b bih } \layout {} \midi {} } @end lilypond @end ignore @node Percussion in MIDI @subsection Percussion in MIDI La notación de los instrumentos de percusión se realiza normalmente en un contexto @code{DrumStaff} y cuando se hace de esta forma se les da salida correctamente por el canal MIDI@tie{}10, pero ciertos instrumentos de percusión de altura determinada, como el xilófono, marimba, vibráfono, timbales, etc., se tratan como instrumentos @qq{normales} y la música para estos instrumentos se debe introducir en contestos de @code{Staff} normales, no en un contexto @code{DrumStaff}, para obtener la salida MIDI correcta. Ciertos sonidos de altura indeterminada que están incluidos en el estándar General MIDI, como el tom melódico, el tambor taiko, los tambores sintéticos, etc., no se pueden acceder a través del canal MIDI@tie{}10, por lo que la notación para dichos instrumentos se debe introducir también en un contexto normal de @code{Staff}, utilizando las alturas normales adecuadas. Muchos instrumentos de percusión no están incluidos dentro del estándar General MIDI standard, p.ej. las castañuelas. El método más fácil (aunque no satisfactorio) de producir una salida MIDI al escribir para estos instrumentos es sustituirlos por el sonido más parecido del conjunto estándar. @c TODO Expand with examples, and any other issues @knownissues Debido a que el estándar General MIDI no contiene golpes de aro (@emph{rim shots}), para este propósito se utiliza en su lugar el golpe lateral de baqueta (@emph{sidestick}).