+@funindex skipTypesetting
+@funindex showFirstLength
+@funindex showLastLength
+
+Wenn man Noten eingibt oder kopiert, sind meistens nur die Noten nahe dem
+Ende (wo gerade neue Noten notiert wurden) wichtig für Kontrolle und
+Korrektur. Um die Korrektur zu beschleunigen, kann eingestellt werden,
+dass nur die letzten paar Takte angezeigt werden. Das erreicht man
+mit dem Befehl
+
+@verbatim
+showLastLength = R1*5
+\score { ... }
+@end verbatim
+
+@noindent
+in der Quelldatei. Damit werden nur die letzten fünf Takte (in einem
+4/4-Takt) eines jeden @code{\score}-Abschnitts übersetzt. Besonders
+bei längeren Stücken ist es meistens sehr viel schneller, nur einen
+kleinen Teil des Stückes zu setzen als die gesamte Länge. Wenn man
+am Anfang eines Stückes arbeitet (weil etwa ein neuer Teil hinzugefügt
+werden soll), kann auch die @code{showFirstLength}-Eigenschaft
+nützlich sein.
+
+Nur bestimmte Teile einer Partitur zu überspringen, kann mit der
+Eigenschaft @code{Score.skipTypesetting} sehr genau kontrolliert
+werden. Für den Bereich, für den sie auf @qq{wahr} gesetzt wird,
+wird kein Notensatz ausgegeben.
+
+Diese Eigenschaft kann auch benutzt werden, um die MIDI-Ausgabe zu
+kontrollieren. Hiermit werden alle Ereignisse, auch Tempo- und
+Instrumentenwechsel ausgelassen. Man muss also sehr genau darauf
+achten, dass nichts unerwartetes geschieht.
+
+@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
+
+In polyphoner Notation wirkt sich @code{Score.skipTypesetting} auf
+alle Stimmen und Systeme aus, sodass noch mehr Zeit bei der
+Übersetzung der Datei gespart wird.
+
+
+@node MIDI output
+@section MIDI output
+
+@cindex Klang
+@cindex MIDI
+
+MIDI (Musical Instrument Digital Interface) ist ein Standard zur
+Kontrolle und Interaktion mit digitalen Instrumenten. Eine
+MIDI-Datei ist eine Anzahl von Noten auf einer Anzahl von
+Bändern/Stimmen. Es ist keine eigentliche Klangdatei, denn man
+benötigt spezielle Programme die die Notenereignisse in Klang
+umwandeln können.
+
+Der Notensatz von LilyPond kann in MIDI umgewandelt werden, so dass
+man sich anhören kann, was man notiert hat. Das hilft oft sehr gut
+bei der Überprüfung: falsche Oktaven oder falsche Versetzungszeichen
+lassen sich meist sehr gut hören.
+
+Die MIDI-Ausgabe benötigt einen Kanal für jedes System und einen für
+globale Einstellungen. Darum sollte die Quelldatei für eine MIDI-Datei
+nicht mehr als 15 Systeme (oder 14 wenn kein Schlagzeug benützt wird)
+besitzen. Jedes weitere System bleibt stumm.
+
+
+@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
+
+Um eine MIDI-Datei aus einer LilyPond-Quelldatei zu erstellen, muss
+eine @code{\midi}-Umgebung zu der @code{\score}-Umgebung hinzugefügt
+werden, etwa so:
+
+@example
+\score @{
+ @var{...Noten...}
+ \midi @{ @}
+@}
+@end example
+
+Wenn in einer @code{\score}-Umgebung nur eine @code{\midi}-Umgebung,
+aber keine @code{\layout}-Umgebung vorkommt, wird nur MIDI produziert.
+Wenn auch die Notation gewünscht ist, muss zusätzlich die
+@code{\layout}-Umgebung vorhanden sein:
+
+@example
+\score @{
+ @var{...music...}
+ \midi @{ @}
+ \layout @{ @}
+@}
+@end example
+
+Tonhöhen, Rhythmen, Überbindungen, Dynamik und Tempoänderungen werden
+korrekt in das MIDI-Format übersetzt. Dynamikzeichen, Crescendo und
+Decrescendo werden in den MIDI-Lautstärkekanal übertragen. Dynamikzeichen
+werden in einen bestimmten Lautstärkenwert übersetzt, Crescendo und
+Decrescendo erreichen einen Übergang zwischen Lautstärkewerten.
+Die Wirkung von Dynamikzeichen kann auch aus der MIDI-Datei entfernt
+werden. Siehe hierzu @ref{MIDI block}.
+
+Das Anfangstempo und spätere Tempoänderungen können mit dem
+@code{\tempo}-Befehl innerhalb der Notation notiert werden. Er
+bewirkt Tempoänderungen auch in der MIDI-Datei. Der Befehl setzt
+gleichzeitig auch eine Tempobezeichnung in die Noten, welches aber
+auch unterdrückt werden kann, siehe @ref{Metronome marks}. Eine
+andere möglichkeit, ein eigenes MIDI-Tempo anzugeben, wird weiter
+unten gezeigt, siehe @ref{MIDI block}.
+
+
+@unnumberedsubsubsec Instrument names
+
+@cindex Instrumentbezeichnungen
+
+@funindex Staff.midiInstrument
+
+Das MIDI-Instrument, mit dem ein bestimmtes System wiedergegeben
+werden soll, wird durch die @code{Staff.midiInstrument}-Eigenschaft
+bestimmt, die auf eine Instrumentenbezeichnung gesetzt werden muss.
+Die Bezeichnungen sind aufgelistet in @ref{MIDI instruments} und müssen
+in der dort definierten Schreibweise notiert werden.
+
+@example
+\new Staff @{
+ \set Staff.midiInstrument = #"glockenspiel"
+ @var{...Noten...}
+@}
+@end example
+
+@example
+\new Staff \with @{midiInstrument = #"cello"@} @{
+ @var{...Noten...}
+@}
+@end example
+
+Wenn die Schreibweise nicht genau einem definierten Instrument aus
+der Liste entpsricht, wird ein Piano-Klang benutzt (@code{"acoustic grand"}).
+
+@snippets
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{changing-midi-output-to-one-channel-per-voice.ly}
+
+@knownissues
+
+Veränderungen der MIDI-Lautstärke sind nur effektiv, wenn sie zu Beginn
+einer Note angefordert werden, sodass die Lautstärke während einer Notendauer
+nicht geändert werden kann.
+
+Nicht alle MIDI-Spieler können Tempoänderungen richtig wiedergeben.
+Spieler, die hierzu in der Lage sind, sind unter Anderen MS Windows Media
+Player und @uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
+
+
+@node MIDI block
+@subsection MIDI block
+
+@cindex MIDI-Umgebung
+
+Eine @code{\midi}-Umgebung muss innerhalb von einer @code{\score}-Umgebung
+vorkommen, wenn MIDI-Ausgabe gewünscht ist. Sie entspricht der
+@code{\layout}-Umgebung, aber ist etwas einfacher aufgebaut. Oft wird
+die MIDI-Umgebung einfach leer gelassen, aber hier können auch
+Kontexte umgeändert werden, neue Kontexte definiert werden oder
+neue Werte definiert werden. Das folgende Beispiel etwa definiert
+das MIDI-Tempo, ohne dass in der Partitur eine Metronombezeichnung
+gesetzt wird:
+
+@example
+\score @{
+ @var{...Noten...}
+ \midi @{
+ \context @{
+ \Score
+ tempoWholesPerMinute = #(ly:make-moment 72 4)
+ @}
+ @}
+@}
+@end example
+
+Hier wird das Tempo auf 72 Viertelnoten pro Minute definiert. Wenn
+das Tempo auf diese Weise definiert wird, kann keine punktierte
+Note als Einheit angegeben werden. Wenn sie benötigt wird, muss
+man sie in kleinere Einheiten auflösen. Ein Tempo von 90 punktierten
+Viertelnoten pro Minute kann beispielsweise dargestellt werden
+als 270 Achtelnoten pro Minute:
+
+@example
+tempoWholesPerMinute = #(ly:make-moment 270 8)
+@end example
+
+@cindex MIDI-Kontextdefinitionen
+
+Kontextdefinitionen des @code{\midi}-Kontextes entsprechen
+der Syntax, wie sie in der @code{\layout}-Umgebung benutzt
+wird. Klangübersetzungsmodule werden @code{performer}
+genannt. Die Kontexte für die MIDI-Ausgabe sind in der
+Datei @file{../ly/@/performer@/-init@/.ly} definiert, siehe
+@rlearning{Other sources of information}. Um beispielsweise
+die Auswirkung von Dynamikzeichen aus der MIDI-Ausgabe zu
+entfernen, müssen folgende Zeilen eingefügt werden:
+
+@example
+\midi @{
+ ...
+ \context @{
+ \Voice
+ \remove "Dynamic_performer"
+ @}
+@}
+@end example
+
+Eine MIDI-Ausgabe wird nur erstellt, wenn die @code{\midi}-Umgebung
+in eine Partiturumgebung eingefügt wird, die mit dem Befehl
+@code{\score} beginnt. Wenn eine Partitur explizit etwa mit
+@code{\new Score} begonnen wird, und sich die MIDI-Umgebung hierin
+befindet, wird keine Ausgabe produziert. Eine Lösung ist es, sowohl
+die @code{\new Score}- als auch die @code{\midi}-Umgebungen in eine
+@code{\score}-Umgebung einzuschließen.
+
+@example
+\score @{
+ \new Score @{ @dots{}Noten@dots{} @}
+ \midi @{ @}
+@}
+@end example
+
+
+@node What goes into the MIDI output?
+@subsection What goes into the MIDI output?
+
+
+@unnumberedsubsubsec Supported in MIDI
+
+@cindex Tonhöhen in MIDI
+@cindex MIDI, Tonhöhen
+@cindex Vierteltöne in MIDI
+@cindex MIDI, Vierteltöne
+@cindex Mikrotöne in MIDI
+@cindex MIDI, Mikrotöne
+@cindex Akkordsymbole in MIDI
+@cindex MIDI, Akkordsymbole
+@cindex Rhythmen in MIDI
+@cindex MIDI, Rhythmen
+
+Die folgenden Notationselemente werden in die MIDI-Ausgabe aufgenommen:
+
+@itemize
+@item Tonhöhen
+@item Vierteltöne (siehe @ref{Accidentals}. Für die Ausgabe wird ein
+Spieler benötigt, der Tonhöhen verändern kann.)
+@item Akkorde, die als Symbole notiert werden
+@item Rhythmen, die als Dauern notiert sind, inklusive N-tolen
+@item Tremolo, das ohne @q{@code{:}[@var{Zahl}]} notiert ist
+@item Überbindungen
+@item Dynamikzeichen
+@item Crescendi, decrescendi zu mehreren Noten
+@item Tempoänderungen, die mit einer Tempo-Bezeichnung eingegeben werden
+@item Gesangstext
+@end itemize
+
+
+@unnumberedsubsubsec Unsupported in MIDI
+
+Folgende Notationselemente werden nicht in die MIDI-Ausgabe einbeozogen:
+
+@itemize
+@item Rhythmus, der als Anmerkung notiert wird, bspw. Swing
+@item Tempoveränderungen, die als Anmerkung ohne Tempobezeichnung notiert werden
+@item Staccato und andere Artikultationen und Ornamente
+@item Legato- und Phrasierungsbögen
+@item Crescendi, decrescendi zu einer einzelnen Note
+@item Tremolo, notiert mit @q{@code{:}[@var{number}]}
+@item Bezifferter Bass
+@end itemize
+
+
+@node Repeats in MIDI
+@subsection Repeats in MIDI
+
+@cindex Wiederholungen in MIDI
+@cindex MIDI und Wiederholungen
+
+@funindex \unfoldRepeats
+
+Mit einigen Veränderungungen im Notentext können alle Wiederholungstypen
+auch in der MIDI-Ausgabe wiedergegeben werden. Das wird erreicht, indem
+die @code{\unfoldRepeats}-Funktion eingesetzt wird. Diese Funktion
+verändert alle Wiederholungen in ausgeschriebene Noten.
+
+@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
+
+Wenn eine Partitur mit diesem Befehl erstellt wird, ist er notwendig,
+zwei @code{\score}-Umgebungen einzurichten: in der einen werden die
+Wiederholungen ausgeschrieben und nur eine MIDI-Ausgabe produziert,
+in der anderen werden die Wiederholungen notiert und als Partitur
+gesetzt. Das Beispiel gibt einen Hinweis, wie eine derartige Datei
+aussehen kann:
+
+@example
+\score @{
+ @var{..music..}
+ \layout @{ .. @}
+@}
+\score @{
+ \unfoldRepeats @var{..music..}
+ \midi @{ .. @}
+@}
+@end example
+
+
+@node Controlling MIDI dynamics
+@subsection Controlling MIDI dynamics
+
+Dynamik in der MIDI-Ausgabe wird durch den Dynamic_performer
+erstellt, welcher sich in einem @code{Voice}-Kontext befindet.
+Es ist möglich, sowohl die generelle Lautstärke einer MIDI-Datei
+als auch relative Lautstärken von Dynamikanweisungen und auch
+relative Lautstärke von einzelnen Instrumenten einzustellen.
+
+
+@unnumberedsubsubsec Dynamic marks
+
+
+Dynamikanweisungen werden als ein bestimmter Bruch der insgesamt
+zur Verfügung stehenden MIDI-Lautstärke notiert. Die Standardbrüche
+reichen von 0,25 für @notation{ppppp} bis hin zu 0,95 für
+@notation{fffff}. Diese Anweisung befinden sich in der Datei
+@file{../scm/midi.scm}, siehe auch @rlearning{Other sources of information}.
+Diese Brüche können nach Belieben geändert oder erweitert werden, indem
+eine Funktion erstellt wird, die ein Dynamikzeichen als Argument
+nimmt und den erforderlichen Bruch ausgibt; schließlich muss noch
+@code{Score.dynamicAbsoluteVolumeFunction} auf diese Funktion
+gesetzt werden.
+
+Beispielhaft soll gezeigt werden, wie man eine @notation{Rinforzando}-Dynamik,
+@code{\rfz}, auch in die MIDI-Ausgabe übernehmen kann. Gleiches gilt
+für neue, selbstdefinierte Dynamikzeichen, die in den Standarddefinitionen
+nicht enthalten sind. Die Scheme-Funktion, die hier definiert wird,
+setzt den Bruch von 0,9 für eine rfz-Anweisung und ruft andernfalls die
+Standardanweisungen auf:
+
+@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
+
+Alternativ, insbesondere wenn die gesamte Tabelle der MIDI-Lautstärken
+umdefiniert werden soll, ist es besser, die
+@notation{default-dynamic-absolute-volume}-Prozedur in der Datei
+@file{../scm/midi.scm} und die hiermit verknüpfte Tabelle als Modell
+zu benutzen. Das letzte Beispiel dieses Abschnittes zeigt, wie das
+gemacht werden kann.
+
+
+@unnumberedsubsubsec Overall MIDI volume
+
+Die generellen Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei
+wird kontrolliert, indem die Eigenschaften @code{midiMinimumVolume}
+unde @code{midiMaximumVolume} auf der @code{Score}-Ebene gesetzt
+werden. Diese Eigenschaften haben nur Einfluss auf Dynamikzeichen, sodass
+ein Dynamikzeichen direkt an den Anfang der Partitur gestellt werden muss,
+wenn diese Einstellung von Anfang an Wirkung zeigen soll. Der Bruch,
+der dann den einzelnen Dynamikzeichen entspricht, wird mit der
+Formel
+
+@example
+midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * Bruch
+@end example
+
+@noindent
+errechnet. Im folgenden Beispiel wird die generelle MIDI-Lautstärke
+auf den Bereich zwischen 0.2 und 0.5 eingeschränkt.
+
+@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)
+
+Wenn die Mindest- und Höchstwerte für die MIDI-Lautstärke
+innerhalb eines @code{Staff}-Kontextes gesetzt werden,
+kann damit die relative Lautstärke einzelner Instrumente kontrolliert
+werden. Damit kann man die Qualität der MIDI-Datei
+merklich verbessern.
+
+In diesem Beispiel wird die Lautstärke der Klarinette relativ
+zur Lautstärke der Flöte verringert. In jeder Stimme muss
+eine Dynamikanweisung für die erste Note gesetzt werden, damit
+diese Einstellung korrekt funktioniert.
+
+@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)
+
+Wenn Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei
+nicht vorgegeben werden, nimmt LilyPond standardmäßig einige
+Anpassungen für die Lautstärken bestimmter Instrumente vor.
+Diese Instrumente und ihre entsprechende Veränderung lassen
+sich aus der Tabelle @notation{instrument-equalizer-alist}
+in der Datei @file{../scm/midi.scm} entnehmen.
+
+Dieser grundlegende Equalizer kann ersetzt werden, indem die
+Funktion @code{instrumentEqualizer} im @code{Score}-Kontext auf
+eine neue Scheme-Funktion gesetzt wird, die MIDI-Instrumentbezeichnungen
+als einziges Argument akzeptiert und ein Zahlenpaar ausgibt, das
+den Höchst- und Mindestwert für die Lautstärke des entpsrechenden
+Instruments darstellt. Die Ersetzung der Standardfunktion wird
+auf gleiche Weise vorgenommen, wie es schon für die
+@code{dynamicAbsoluteVolumeFunction} zu Beginn dieses Abschnittes
+gezeigt wurde. Der Standard-Equalizer,
+@notation{default-instrument-equalizer} in der Datei
+@file{../scm/midi.scm} zeigt, wie solche eine Funktion erstellt werden
+kann.
+
+Das folgende Beispiel definiert für die Flöte und Klarinette relative
+Lautstärkewerte, die denen des vorigen Beispiels entsprechen.
+
+@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
+
+