Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: shakespear1989 am Mittwoch, 6. April 2016, 19:39
-
Mein Ziel ist es, eine Gitarren-Schlagmuster-Notation zu erstellen, welche ich in einem Gitarrenbuch gefunden habe. Im folgenden ein Beispiel:
Melodie-Saiten-Schläge Alle-Saiten-Schlag
4 | / / / | / / / | |
--|---------|---------|-/-/-/-/-|
4-| / | / | |
Bass Saiten-Schlag
Weiters gibt es Perkussionsschläge (x) und viele andere Varianten.
Ein direkter Weg wäre die Realisierung mit Perkussions-Notation und "custom-percussion-staves":
http://lilypond.org/doc/v2.18/Documentation/notation/common-notation-for-percussion#custom-percussion-staves
Was mich allerdings an der Herangehensweise stört, ist, dass ich keinen eigenen Namen und Makro-Abkürzung vergeben kann und auch in der Anzahl der Schläge (auch wenn sie sehr hoch ist) begrenzt bin.
Also z.B.
Basssaiten-Schlag sbs diamond #f -1
Melodiesaiten-Schlag sms diamond #f +1
Allesaiten-Schlag sas diamond #f +1
Eine weitere Möglichkeit bietet die Veränderung der Datei, die anscheinend die Namen, Makro-Abkürzungen, Notenköpfe, etc. der Perkussion festlegt: /Applications/LilyPond.app/Contents/Resources/share/lilypond/current/ly/drumpitch-init.ly
\version "2.16.0"
drumPitchNames =
#'((guitarbassstroke . guitarbassstroke)
…
\version "2.16.0"
drumPitchNames =
#'((guitarbassstroke . guitarbassstroke)
(gbs . guitarbassstroke)
…
#(for-each
(lambda (k-v)
(module-define! (current-module)
(car k-v)
(alist->hash-table (cdr k-v)))
)
'((drums-style .
(
(guitarbassstroke diamond #f -1)
Meine Fragen lauten nun:
* Ist in lilypond die Definition eines benutzerdefinierten Notations-Schemas vorgesehen, ohne Veränderung der default-Schemen?
* Wie binde ich das neue Schema ein?
* Wo finde ich Informationen dazu?
Besten Dank im Voraus,
Clemens
-
Meine Fragen lauten nun:
* Ist in lilypond die Definition eines benutzerdefinierten Notations-Schemas vorgesehen, ohne Veränderung der default-Schemen?
* Wie binde ich das neue Schema ein?
* Wo finde ich Informationen dazu?
Als Reaktion auf diesen Thread:
http://lilypond.1069038.n5.nabble.com/How-can-I-create-from-my-custom-drum-note-to-a-pitch-for-fransposing-td189157.html (http://lilypond.1069038.n5.nabble.com/How-can-I-create-from-my-custom-drum-note-to-a-pitch-for-fransposing-td189157.html)
habe ich unter anderem folgendes snippet hochgeladen:
http://lsr.di.unimi.it/LSR/Item?id=1033 (http://lsr.di.unimi.it/LSR/Item?id=1033)
Es ist dazu gedacht gerade diese Fragen (und mehr) erschöpfend zu beantworten.
Bitte melde Dich wieder falls irgendetwas fehlt oder mißverständlich ist.
[...]in der Anzahl der Schläge (auch wenn sie sehr hoch ist) begrenzt bin.
Hier weiß ich allerdings überhaupt nicht was Du meinst. Beispiel?
HTH,
Harm
-
Danke für deine Antwort und das code-snippet!
Mit der Anzahl der Schläge meinte ich die Anzahl der in drumpitch-init.ly vordefinierten Perkussionsschlagarten.
Ich bin noch nicht ganz zufrieden, denn mein Gedankenansatz war, völlig unabhängig von der default-tabelle zu sein. D.h. entgegen deines code-snippets, möchte ich auch 'db' als 'dbass' definieren und für 'dbass' einen diamond-Notenkopf festlegen, welcher auch bei Verwendung der Abkürzung 'db' angezeigt wird.
Folgendes Beispiel zeigt für 'db' und 'dbass' unterschiedliches Aussehen an, da die Default-Werte anscheinend nicht überschrieben werden können:
drumPitchNames.dbass = #'dbass
drumPitchNames.db = #'dbass
#(define djembe
'((dbass diamond #f -2)))
midiDrumPitches.dbass = g
one = \drummode {dbass db}
\score {
\new DrumStaff
\with {
\override StaffSymbol.line-count = #3
instrumentName = #"Djembe "
drumStyleTable = #(alist->hash-table djembe)
drumPitchTable = #(alist->hash-table midiDrumPitches)
}
\one
\layout {}
\midi {}
}
Für mich bleibt daher die bisherige Frage bestehen mit einer Erweiterung:
* Ist in lilypond die Definition eines benutzerdefinierten Notations-Schemas vorgesehen, ohne Veränderung und ohne Abhängigkeit von default-Schemen?
Zur Verdeutlichung eine weiter Frage:
* Ist es möglich eine benutzerdefinierte Umgebung \GuitarstrumpatternStaff zu erstellen (analog zu \DrumStaff)
welche auf eine benutzerdefinierte Tabelle \guitarstrumpatternpitch-init.ly zugreift (analog zu drumpitch-init.ly)?
-
Das snippet zeigt in der Tat, wie man erweitert, nicht wie man überschreibt.
Ich hatte hier (https://liarchiv.joonet.de/index.php?topic=1082.msg6092#msg6092) mal eine ziemlich heftige Funktion entwickelt, die die entsprechende hash-table überschreibt. Allerdings gibt es bleed-over in andere files. Insofern nicht empfehlenswert.
Ich sehe auch keinen Vorteil komplett unabhängig zu sein. Sicher, im snippet ist `db' nicht verwendbar (da schon im default vergeben) anstattdessen wird eben `dba' verwendet. Ist das wirklich ein Problem?
Nichtsdestotrotz, ist folgendes was für Dich (einige Kommentare inline)?
\version "2.18.2"
%%%% LAYOUT
%% start with an empty list
#(define guitarStrumNames '())
%% put entries into `guitarStrumNames'
guitarStrumNames.dbass = #'dbass
guitarStrumNames.db = #'dbass
%% define the appearence
#(define guitar-strum-style
'((dbass diamond "stopped" -2)))
%% the parser refers only to `drumPitchNames', thus:
#(set! drumPitchNames guitarStrumNames)
%%%% MIDI
%% start with an empty list
#(define guitarMidiStrumPitches '())
%% put entries into `guitarMidiStrumPitches'
guitarMidiStrumPitches.dbass = g
%% Define a custom-layout
my-layout =
\layout {
%% define "GuitarStrumPatternStaff"
\context {
\DrumStaff
\name "GuitarStrumPatternStaff"
\alias DrumStaff
\defaultchild "GuitarStrumPatternVoice"
\accepts "GuitarStrumPatternVoice"
\denies "Voice"
\description "Corresponds to DrumStaff."
}
%% define "GuitarStrumPatternVoice"
\context {
\DrumVoice
\name "GuitarStrumPatternVoice"
\alias DrumVoice
\description "Corresponds to DrumVoice."
}
%% let "GuitarStrumPatternStaff"be accepted by several contexts
\context {
\StaffGroup
\accepts "GuitarStrumPatternStaff"
}
\context {
\ChoirStaff
\accepts "GuitarStrumPatternStaff"
}
\context {
\Score
\accepts "GuitarStrumPatternStaff"
%% tell LilyPond to use `guitar-strum-style' by setting `drumStyleTable'
%% the relevant engraver calls only this property
%% renaming it would only be possible, if the engraver would be rewritten.
drumStyleTable = #(alist->hash-table guitar-strum-style)
}
}
%% Define a custom-midi like custom-layout before
my-midi =
\midi {
\context {
\DrumStaff
\name "GuitarStrumPatternStaff"
\alias DrumStaff
\defaultchild "GuitarStrumPatternVoice"
\accepts "GuitarStrumPatternVoice"
\denies "Voice"
\description "Corresponds to DrumStaff."
}
\context {
\DrumVoice
\name "GuitarStrumPatternVoice"
\alias DrumVoice
\description "Corresponds to DrumVoice."
}
\context {
\StaffGroup
\accepts "GuitarStrumPatternStaff"
}
\context {
\ChoirStaff
\accepts "GuitarStrumPatternStaff"
}
\context {
\Score
\accepts "GuitarStrumPatternStaff"
%% tell LilyPond to use `guitarMidiStrumPitches' by setting `drumPitchTable'
%% the relevant performer calls only this property
%% renaming it would only be possible, if the performer would be rewritten.
drumPitchTable = #(alist->hash-table guitarMidiStrumPitches)
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%
one = \drummode { dbass db }
\score {
\new Score
\new GuitarStrumPatternStaff
\with {
\override StaffSymbol.line-count = #3
instrumentName = #"Guitar "
}
\new GuitarStrumPatternVoice
\one
\layout { \my-layout }
\midi { \my-midi }
}
Gruß,
Harm