• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Benutzerdefiniertes Notationsschema

Begonnen von shakespear1989, Mittwoch, 6. April 2016, 19:39

Vorheriges Thema - Nächstes Thema

shakespear1989

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

harm6

Zitat
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
habe ich unter anderem folgendes snippet hochgeladen:
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.

Zitat
[...]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

shakespear1989

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)?

harm6

Das snippet zeigt in der Tat, wie man erweitert, nicht wie man überschreibt.
Ich hatte hier 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