[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5 MIDI-Ausgabe

@translationof MIDI output

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.

Normale MIDI-Ausgabe ist etwas roh; optional kann eine verbesserte und realistischere MIDI-Ausgabe mit einem Artikuliere-Skript erzeugt werden.

Die MIDI-Ausgabe benötigt einen Kanal für jedes System und reserviert Kanal 10 für Schlagzeug. Es gibt nur 16 MIDI-Kanäle pro Gerät, sodass MIDI-Kanäle mehrfach benutzt werden, wenn eine Partitur mehr als 15 Notensysteme hat.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.1 MIDI-Dateien erstellen

@translationof Creating MIDI files

Um eine MIDI-Datei aus einer LilyPond-Quelldatei zu erstellen, muss eine \midi-Umgebung zu der \score-Umgebung hinzugefügt werden, etwa so:

 
\score {
  ...Noten...
  \midi { }
}

Wenn in einer \score-Umgebung nur eine \midi-Umgebung, aber keine \layout-Umgebung vorkommt, wird nur MIDI produziert. Wenn auch die Notation gewünscht ist, muss zusätzlich die \layout-Umgebung vorhanden sein:

 
\score {
  ...music...
  \midi { }
  \layout { }
}

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 Der MIDI-Block.

Das Anfangstempo und spätere Tempoänderungen können mit dem \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 Metronomangabe. Eine andere Möglichkeit, ein eigenes MIDI-Tempo anzugeben, wird weiter unten gezeigt, siehe Der MIDI-Block.

Aufgrund einiger Einschränkungen auf Windows ist auf Windows-Systemen die Standarddateierweiterung von MIDI-Dateien .mid. Andere Betriebssysteme verwenden weiterhin .midi. Wenn eine andere Endung erwünscht ist, kann man die folgende Zeile auf oberster Ebene der Quelldatei, vor Beginn eines \book, \bookpart oder \score-Blocks einfügen:

 
#(ly:set-option 'midi-extension "midi")

Diese Codezeile setzt die Dateiendung auf .midi.

Als Alternative kann man diese Option auch als Kommandozeilenparameter übergeben:

 
lilypond … -dmidi-extension=midi lilyDatei.ly

[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Instrumentenbezeichnungen

Das MIDI-Instrument, mit dem ein bestimmtes System wiedergegeben werden soll, wird durch die Staff.midiInstrument-Eigenschaft bestimmt, die auf eine Instrumentenbezeichnung gesetzt werden muss. Die Bezeichnungen sind aufgelistet in MIDI-Instrumente und müssen in der dort definierten Schreibweise notiert werden.

 
\new Staff {
  \set Staff.midiInstrument = "glockenspiel"
  ...Noten...
}
 
\new Staff \with {midiInstrument = "cello"} {
  ...Noten...
}

Wenn die Schreibweise nicht genau einem definierten Instrument aus der Liste entspricht, wird ein Piano-Klang benutzt ("acoustic grand").

Ausgewählte Schnipsel

Changing MIDI output to one channel per voice

When outputting MIDI, the default behavior is for each staff to represent one MIDI channel, with all the voices on a staff amalgamated. This minimizes the risk of running out of MIDI channels, since there are only 16 available per track.

However, by moving the Staff_performer to the Voice context, each voice on a staff can have its own MIDI channel, as is demonstrated by the following example: despite being on the same staff, two MIDI channels are created, each with a different midiInstrument.

 
\score {
  \new Staff <<
    \new Voice \relative c''' {
      \set midiInstrument = #"flute"
      \voiceOne
      \key g \major
      \time 2/2
      r2 g-"Flute" ~
      g fis ~
      fis4 g8 fis e2 ~
      e4 d8 cis d2
    }
    \new Voice \relative c'' {
      \set midiInstrument = #"clarinet"
      \voiceTwo
      b1-"Clarinet"
      a2. b8 a
      g2. fis8 e
      fis2 r
    }
  >>
  \layout { }
  \midi {
    \context {
      \Staff
      \remove "Staff_performer"
    }
    \context {
      \Voice
      \consists "Staff_performer"
    }
    \tempo 2 = 72
  }
}

[image of music]

Bekannte Probleme und Warnungen

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 timidity.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.2 Der MIDI-Block

@translationof MIDI block

Eine \midi-Umgebung muss innerhalb von einer \score-Umgebung vorkommen, wenn MIDI-Ausgabe gewünscht ist. Sie entspricht der \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:

 
\score {
  ...Noten...
  \midi {
    \tempo 4 = 72
  }
}

Hier wird das Tempo auf 72 Viertelnoten pro Minute definiert. \tempo ist eigentlich ein Musikbefehl, der die Eigenschaften während der Interpretation der Musik einstellt: im Kontext von Ausgabedefinitionen wie etwa einem \midi-Kontext werden sie neu interpretiert, als ob es sich um Kontextmodifikatoren handelte.

Kontextdefinitionen des \midi-Kontextes entsprechen der Syntax, wie sie in der \layout-Umgebung benutzt wird. Klangübersetzungsmodule werden performer genannt. Die Kontexte für die MIDI-Ausgabe sind in der Datei ‘../ly/performer-init.ly’ definiert, siehe (learning)Mehr Information in Abschnitt ‘Mehr Information’ in Handbuch zum Lernen. Um beispielsweise die Auswirkung von Dynamikzeichen aus der MIDI-Ausgabe zu entfernen, müssen folgende Zeilen eingefügt werden:

 
\midi {
  ...
  \context {
    \Voice
    \remove "Dynamic_performer"
  }
}

Eine MIDI-Ausgabe wird nur erstellt, wenn die \midi-Umgebung in eine Partiturumgebung eingefügt wird, die mit dem Befehl \score beginnt.

 
\score {
  { …Noten… }
  \midi { }
}

[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.3 Was geht in die MIDI-Ausgabe

@translationof What goes into the MIDI output?


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

In MIDI unterstützt

Die folgenden Notationselemente werden in die MIDI-Ausgabe aufgenommen:

Durch Einsatz vom Artikuliere-Skript können noch einige Elemente zu der Liste hinzugefügt werden:


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

In MIDI nicht unterstützt

Folgende Notationselemente werden nicht in die MIDI-Ausgabe einbezogen, außer am setzt das Artikuliere-Skript ein:


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.4 Wiederholungen im MIDI

@translationof Repeats in MIDI

Mit einigen Veränderungen im Notentext können alle Wiederholungstypen auch in der MIDI-Ausgabe wiedergegeben werden. Das wird erreicht, indem die \unfoldRepeats-Funktion eingesetzt wird. Diese Funktion verändert alle Wiederholungen in ausgeschriebene Noten.

 
\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 "|."

[image of music]

In Parituren mit mehreren Stimmen funktioniert das Ausschreiben der Wiederholungen im MIDI nur richtig, wenn jede Stimme vollständig notierte Wiederholungsanweisungen enthält.

Wenn eine Partitur mit diesem \unfoldRepeats-Befehl erstellt wird, ist er notwendig, zwei \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:

 
\score {
  ..music..
  \layout { .. }
}
\score {
  \unfoldRepeats ..music..
  \midi { .. }
}

[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.5 MIDI-Lautstärke kontrollieren

@translationof Controlling MIDI dynamics

Dynamik in der MIDI-Ausgabe wird durch den Dynamic_performer erstellt, welcher sich in einem 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.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Dynamik-Zeichen

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 ppppp bis hin zu 0,95 für fffff. Diese Anweisung befinden sich in der Datei ‘../scm/midi.scm’, siehe auch (learning)Mehr Information in Abschnitt ‘Mehr Information’ in Handbuch zum Lernen. 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 Score.dynamicAbsoluteVolumeFunction auf diese Funktion gesetzt werden.

Beispielhaft soll gezeigt werden, wie man eine Rinforzando-Dynamik, \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:

 
#(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 {
        a'4\pp b c-\rfz
      }
    }
  }
  \layout {}
  \midi {}
}

[image of music]

Alternativ, insbesondere wenn die gesamte Tabelle der MIDI-Lautstärken umdefiniert werden soll, ist es besser, die default-dynamic-absolute-volume-Prozedur in der Datei ‘../scm/midi.scm’ und die hiermit verknüpfte Tabelle als Modell zu benutzen. Das letzte Beispiel dieses Abschnittes zeigt, wie das gemacht werden kann.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

MIDI-Lautstärke

Die generellen Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei wird kontrolliert, indem die Eigenschaften midiMinimumVolume und midiMaximumVolume auf der 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

 
midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * Bruch

errechnet. Im folgenden Beispiel wird die generelle MIDI-Lautstärke auf den Bereich zwischen 0.2 und 0.5 eingeschränkt.

 
\score {
  <<
    \new Staff {
      \key g \major
      \time 2/2
      \set Staff.midiInstrument = "flute"
      \new Voice \relative {
        r2 g''\mp g fis~
        4 g8 fis e2~
        4 d8 cis d2
      }
    }
    \new Staff {
      \key g \major
      \set Staff.midiInstrument = "clarinet"
      \new Voice \relative {
        b'1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout {}
  \midi {
    \tempo 2 = 72
    \context {
      \Score
      midiMinimumVolume = #0.2
      midiMaximumVolume = #0.5
    }
  }
}

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Verschiedene Instrumente angleichen (i)

Wenn die Mindest- und Höchstwerte für die MIDI-Lautstärke innerhalb eines 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.

 
\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 {
        r2 g''\mp g fis~
        4 g8 fis e2~
        4 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 {
        b'1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout {}
  \midi {
    \tempo 2 = 72
  }
}

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Verschiedene Instrumente angleichen (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 instrument-equalizer-alist in der Datei ‘../scm/midi.scm’ entnehmen.

Dieser grundlegende Equalizer kann ersetzt werden, indem die Funktion instrumentEqualizer im 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 entsprechenden Instruments darstellt. Die Ersetzung der Standardfunktion wird auf gleiche Weise vorgenommen, wie es schon für die dynamicAbsoluteVolumeFunction zu Beginn dieses Abschnittes gezeigt wurde. Der Standard-Equalizer, default-instrument-equalizer in der Datei ‘../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.

 
#(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 {
        r2 g''\mp g fis~
        4 g8 fis e2~
        4 d8 cis d2
      }
    }
    \new Staff {
      \key g \major
      \set Staff.midiInstrument = "clarinet"
      \new Voice \relative {
        b'1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout { }
  \midi {
    \tempo 2 = 72
  }
}

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.6 Schlagzeug in MIDI

@translationof Percussion in MIDI

Schlagzeuginstrumente werden üblicherweise in einem DrumStaff-Kontext notiert. Aus diese Weise werden sie korrekt in den MIDI-Kanal 10 ausgegeben. Eine Schlagzeuge mit diskreten Tonhöhen, wie Xylophon, Marima, Vibraphone, Pauken usw. werden wie „normale“ Instrumente in einem Staff-Kontext notiert. Nur so lässt sich auch hier eine richtige MIDI-Ausgabe erreichen.

Einige Instrumente, die keine diskreten Tonhöhen haben, können nicht über den MIDI-Kanal 10 erreicht werden und müssen deshalb in einem normalen Staff-Kontext mit passenden normalen Tonhöhen notiert werden. Es handelt sich um melodic tom, taiko drum, synth drum u. A.

Viele Schlagzeuginstrumente sind nicht in den MIDI-Standard aufgenommen, z. B. Kastagnetten. Die einfachste Methode, derartige Instrumente zu ersetzen, ist, einen Klang auszuwählen, der ihnen halbwegs ähnlich kommt.

Bekannte Probleme und Warnungen

Weil der MIDI-Standard keine Peitschenschläge kennt, wird ein Schlagstock (sidestick) für diesen Zweck eingesetzt.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

3.5.7 Artikuliere-Skript

@translationof The Articulate script

Eine realistischere MIDI-Ausgabe ist möglich, wenn man das Artikuliere-Skript einsetzt. Es versucht, Artikulationen (Bögen, Staccato) mit einzubeziehen, indem Noten mit sequentieller Musik von passender Verlängerung oder Verkürzung mit entprechenden Skips ersetzt werden. Es versucht auch, Triller usw. klingen zu lassen und rallantando und accelerando wahrzunehmen.

Um das Artikuliere-Skript einzusetzen, muss oben in der Eingabedatei

 
\include "articulate.ly"

eingefügt werden. Im \score-Abschnitt schreibt man

 
\unfoldRepeats \articulate <<
	der Rest der Partitur...
>>

Wenn die Eingabedatei auf diese Art verändert wurd, wird die Notenausgabe stark verändert, aber die MIDI-Ausgabe produziert ein besseres Ergebnis.

Wenn auch nicht unbedingt notwendig, damit das Artikuliere-Skript funktioniert, bietet es sich an, \unfoldRepeats wie im Beispiel oben zu verwenden, weil dadurch Abkürzungen wie etwa Triller ausgeführt werden.

Bekannte Probleme und Warnungen

Articulate verkürzt Akkorde und manche Musik (besonders Orgelmusik) kann schlechter klingen.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]

Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.

Andere Sprachen: English, català, español, français, italiano, 日本語.
Über die automatische Sprachauswahl.