| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@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.
| 3.5.1 MIDI-Dateien erstellen | ||
| 3.5.2 Der MIDI-Block | ||
| 3.5.3 Was geht in die MIDI-Ausgabe | ||
| 3.5.4 Wiederholungen im MIDI | ||
| 3.5.5 MIDI-Lautstärke kontrollieren | ||
| 3.5.6 Schlagzeug in MIDI | ||
| 3.5.7 Artikuliere-Skript |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@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] | [ ? ] |
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").
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 } }
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] | [ ? ] |
@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] | [ ? ] |
@translationof What goes into the MIDI output?
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Die folgenden Notationselemente werden in die MIDI-Ausgabe aufgenommen:
:[Zahl]‘ notiert ist
Durch Einsatz vom Artikuliere-Skript können noch einige Elemente zu der Liste hinzugefügt werden:
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Folgende Notationselemente werden nicht in die MIDI-Ausgabe einbezogen, außer am setzt das Artikuliere-Skript ein:
:[number]‘
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@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 "|."
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] | [ ? ] |
@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] | [ ? ] |
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 {} }
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] | [ ? ] |
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 } } }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
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 } }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
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 } }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@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.
Weil der MIDI-Standard keine Peitschenschläge kennt, wird ein Schlagstock (sidestick) für diesen Zweck eingesetzt.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@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.
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.