Autor Thema: Benutzerdefiniertes Notationsschema  (Gelesen 1549 mal)

shakespear1989

  • Member
Benutzerdefiniertes Notationsschema
« 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
« Letzte Änderung: Mittwoch, 6. April 2016, 19:52 von shakespear1989 »

harm6

  • Member
Re: Benutzerdefiniertes Notationsschema
« Antwort #1 am: Mittwoch, 6. April 2016, 21:28 »
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

  • Member
Re: Benutzerdefiniertes Notationsschema
« Antwort #2 am: Donnerstag, 7. April 2016, 03:25 »
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

  • Member
Re: Benutzerdefiniertes Notationsschema
« Antwort #3 am: Donnerstag, 7. April 2016, 23:45 »
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