Hallo Lilypond-Fans,
das Setzen einiger Orgelkompositionen war der Auslöser, mich mit dem Thema "alternative" midiInstrument-Namen auseinander zu setzen. Mit dem Soundfont "Jeux d'Orgues 2" gibt es einen recht ordentlichen Soundfont (.sf2), der zwar nicht uneingeschränkt frei ist, aber für den Gebrauch im stillen Kämmerlein eine echte Bereicherung darfstellt. Mit insgesamt 14 Midi-Stimmen kann man mehrstimmige Orgelwerke etwas differenzierter "registrieren". Ein paar Details dazu habe ich
hier abgelegt.
Bei der Beschäftigung mit dem Thema habe ich festgestelle, dass Lilypond keine Bank-Information in die MIDI-Datei schreibt. Der jeweilige Sequencer (ich verwende timidity++) nimmt also seine Standard-Bank.
Lilypond sieht auch nicht vor, dass man alternative bzw. individuelle SoundFont-Dateien (Klangspeicher) verwendet. Das ist schade, denn es schränkt doch sehr ein.
Gefunden habe ich bislang diese beiden Ansätze:
- Beim Sequencer einen alternativen Soundfont verwenden und im Lilypond-Dokument die "falschen" midiInstrument-Namen stehen zu habe.
- Mit eine zusätzlichen Befehl nur die Instrument-Nummer verwenden, die dann "intern" in den midiInstrument-Namen umgesetzt wird. In der Midi-Dateil landet aber dennoch der "falsche" Name.
Ich stelle jetzt hier eine
dritte Variante vor, in der individuelle midiInstrument-Namen verwendet werden können, die dann auch in der MIDI-Datei stehen!
Die Zuordnung des Namens zur Instrumentennummer befindet sich in
scm/midi.scm. Dort ist ein einer Liste aus Paaren jeweils der Name der MIDI-Nummer gegenübergestellt. Da nur über den Namen gesucht wird, muss diese Liste in der MIDI-Nummer nicht eindeutig sein.
Der hier vorgestellte Ansatz besteht schlicht darin, das Objekt
instrument-names-alist um die gewünschten Namen zu erweitern. Hier mein Code-Schnippsel für den erwähnten Soundfont "Jeux d'Orgues 2":
%%
%% Das sind die Registrierungen aus Soundfonts jeux d'Orgues 2, die so
%% als Midi-Presets zur Verügung gestellt sind und in diesem Sinne in
%% Lilypond als Instrumente eingesetzt werden können.
%%
%% (c) Martin Jacobs <martin.jacobs at arcor.de>
%%
%
% Die Instrumentnamen sind meine Erfindung und orientieren sich an den
% Presetbezeichnern, die der Autor des Soundfonts vergeben hat. Der
% Lilypond-Tradition folgende ist alles kleingeschrieben.
%
#(set! (@@ (lily) instrument-names-alist)
(append
`(
;; (erstes Manual)
("i principaux 8 4" . ,(- 1 1))
("i principaux 8 4 2" . ,(- 2 1))
("i fonds 8 2 " . ,(- 3 1))
("i plein jeu" . ,(- 4 1))
("i grand plein jeu" . ,(- 5 1))
("i floetes 4 2" . ,(- 6 1))
("i grand jeu" . ,(- 7 1))
;; (zweites Manual)
("ii fonds 8 4" . ,(- 8 1))
("ii fonds 8 2" . ,(- 9 1))
("ii petit plein jeu" . ,(- 10 1))
("ii tremblant" . ,(- 11 1))
;; (Pedal)
("p plein jeu" . ,(- 12 1))
("p fonds 8 16" . ,(- 13 1))
("p tutti" . ,(- 14 1))
)
(@@ (lily) instrument-names-alist)
)
)
Die MIDI-Nummern sind durch den Soundfont vorgegeben, die Namen sind - angelehnt an den den Standard - kleingeschrieben.
Da das Modul midi das Objekt
instrument-names-alist nicht exportiert, muss ich zu dem "schmutzigen" Trick mit der eigentlich dem Debugging vorbehaltenen @@ greifen.
Damit sind dann solche Zuweisungen möglich:
\set Staff.midiInstrument = #"i principaux 8 4"
Da Lilypond (bislang) kein Konzept hat, eine MIDI-Bank rauszuschreiben muss man beim Abspielen dafür sorgen, dass der richtige Soundfont verwendet wird. Bei dem von mir verwendeten timidity++ sorgt die Option
--force-bank=2 beim Aufruf für den gewünschten Effekt.
Soweit ich das beurteilen kann, ist das Modul
scm/midi.scm über etliche Versionen stabil, so dass das auch mit einigen Vorgängern bzw. Nachfolgern der von mir verwendeten 2.16.2 funktionieren müsste.
Urheber des genannten Soundfonts ist Joseph Basquin und zu finden ist das Material auf
www.hammersound.net.
Grüße
Martin