Autor Thema: hammer-on in TAB und chords  (Gelesen 10476 mal)

harm6

  • Gast
Re: hammer-on in TAB und chords
« Antwort #15 am: Dienstag, 13. Mai 2014, 11:47 »
Zitat
TrackAStaff = \new Staff <<
   \context Voice = "TrackAVoiceAMusic" {
      \removeWithTag #'texts
      \TrackAVoiceAMusic ##f
   }
   \context Voice = "TrackAVoiceBMusic" {
      \removeWithTag #'texts
      \TrackAVoiceBMusic ##f
   }
>>

Hier kann ich nicht helfen:

Du hast die Musik in einer Variablen gespeichert: TrackAStaff = ...
Aber aus dem Code geht nicht hervor wann, wo und wie diese Variable aufgerufen wird.
Tatsächlich kann man sich das einigermaßen vorstellen, es wäre aber schön ein vollständiges, kompilierbares snippet zu haben.

Die Musik besteht aus einem Staff der zwei benannte Voices beinhaltet.

Beide Voices beinhalten eine removeWithTag-Expression. Mag sinnvoll sein oder auch nicht, kann ich ohne mehr Code nicht sagen.

Beide Voices beinhalten aber auch \TrackAVoiceAMusic ##f bzw \TrackAVoiceBMusic ##f
Der Syntax nach haben wir hier einen Bezeichner plus boolean.
Es muß sich höchstwahrscheinlich um eine Musikfunktion handeln.
Ohne zu wissen was diese Musikfunktion macht, kommen wir hier nicht weiter...
Zu LilyPond proper gehört sie jedenfalls nicht.

Wie ist sie definiert?

Gruß,
  Harm

trulli

  • Gast
Re: hammer-on in TAB und chords
« Antwort #16 am: Dienstag, 13. Mai 2014, 16:06 »
Hallo harm,

hier kann ich helfen. Ich habe mal ein Beispiel von tuxguitar nach Lily konvertiert. Da kommt dann dieser Code raus, aus dem du vielleicht schlau wirst:

#(define (tie::tab-clear-tied-fret-numbers grob)
   (let* ((tied-fret-nr (ly:spanner-bound grob RIGHT)))
      (ly:grob-set-property! tied-fret-nr 'transparent #t)))

\version "2.10.5"
\paper {
   indent = #0
   printallheaders = ##t
   print-all-headers = ##t
   ragged-right = ##f
   ragged-bottom = ##t
}
\layout {
   \context { \Score
      \override MetronomeMark #'padding = #'5
   }
   \context { \Staff
      \override TimeSignature #'style = #'numbered
      \override StringNumber #'transparent = ##t
   }
   \context { \TabStaff
      \override TimeSignature #'style = #'numbered
      \override Stem #'transparent = ##t
      \override Beam #'transparent = ##t
      \override Tie  #'after-line-breaking = #tie::tab-clear-tied-fret-numbers
   }
   \context { \TabVoice
      \override Tie #'stencil = ##f
   }
   \context { \StaffGroup
      \consists "Instrument_name_engraver"
   }
}
deadNote = #(define-music-function (parser location note) (ly:music?)
   (set! (ly:music-property note 'tweaks)
      (acons 'stencil ly:note-head::print
         (acons 'glyph-name "2cross"
            (acons 'style 'special
               (ly:music-property note 'tweaks)))))
   note)

palmMute = #(define-music-function (parser location note) (ly:music?)
   (set! (ly:music-property note 'tweaks)
      (acons 'style 'do (ly:music-property note 'tweaks)))
   note)

TrackAVoiceAMusic = #(define-music-function (parser location inTab) (boolean?)
#{
 
   \clef #(if $inTab "tab" "treble_8")
   \key c \major
   \time 4/4
   \oneVoice
   <e,\6>1
   <a,\5>1
   <e'\1 b\2 gis\3 e\4 b,\5 e,\6 >1-\tag #'chords ^\markup \fret-diagram #"1-o;2-o;3-1;4-2;5-2;6-o;"
   
#})
TrackAVoiceBMusic = #(define-music-function (parser location inTab) (boolean?)
#{
#})

TrackAStaff = \new Staff <<
   \context Voice = "TrackAVoiceAMusic" {
      \TrackAVoiceAMusic ##f
   }
   \context Voice = "TrackAVoiceBMusic" {
      \TrackAVoiceBMusic ##f
   }
>>
TrackATabStaff = \new TabStaff  <<
   \context TabVoice = "TrackAVoiceAMusic" {
      \removeWithTag #'chords
      \removeWithTag #'texts
      \TrackAVoiceAMusic ##t
   }
   \context TabVoice = "TrackAVoiceBMusic" {
      \removeWithTag #'chords
      \removeWithTag #'texts
      \TrackAVoiceBMusic ##t
   }
   
>>
TrackAStaffGroup = \new StaffGroup <<
   \TrackAStaff
   \TrackATabStaff
>>
\score {
   \TrackAStaffGroup
   \header {
      title = "Guitar"
     
   }
}

Grüße

harm6

  • Gast
Re: hammer-on in TAB und chords
« Antwort #17 am: Dienstag, 13. Mai 2014, 21:35 »
Danke trulli, das ist hilfreich.

Und ja ich bin schlau draus geworden (hoffe ich) ;)

Zunächst muß man einfach mal konstatieren, daß TuxGuitar zu einer steinzeitlichen LilyPond-Version konvertiert. Die meisten Setzungen, sowie Musikfunktionen dienen dazu ein Verhalten des TabStaffs zu veranlassen, welches heutzutage der default ist oder via /tabFullNotation geregelt wird. Alles überflüssig ...
Das ganze setting ist etwas umständlich, aber wenn man alle möglichen Fälle abdecken will, wirds meistens etwas aufwendiger.

Die Musikfunktionen 'TrackAVoiceAMusic' und 'TrackBVoiceAMusic' gefallen mir allerdings nicht. Ich sehe keinen Grund die eigentliche Musik in eine Musikfunktion zu packen, die nur dazu da ist den richtigen Schlüssel bestimmen zu können.

Ich denke daher rührt auch das Problem mit 'pointAndClick', welches michat bemerkte.
Auf jedenfall ist es ein bekanntes Problem. Ob es in der neuesten devel-Version noch vorhanden ist, werde ich später mal testen.

Für jetzt gibt es einen workaround:
In jeder Musikfunktion gibt es zwei default-Argumente, "parser location"
Wenn man 'location' umbenennt funktionierts:

\version "2.18.0"

\paper {
   indent = #0
   printallheaders = ##t
   print-all-headers = ##t
   ragged-right = ##f
   ragged-bottom = ##t
}
\layout {
   \context { \Score
      \override MetronomeMark #'padding = #'5
   }
   \context { \Staff
      \override TimeSignature #'style = #'numbered
      \override StringNumber #'transparent = ##t
   }
   \context { \TabStaff
      %% Makes sense only, if the engraver is put in, too.
      \override TimeSignature #'style = #'numbered
   }
}

%% maybe:
palmMute = #(define-music-function (parser location note) (ly:music?)
   ;; old syntax, but valid code
   (set! (ly:music-property note 'tweaks)
      (acons 'style 'do (ly:music-property note 'tweaks)))
   note)

TrackAVoiceAMusic = #(define-music-function (parser ort inTab) (boolean?)
#{
 
   \clef #(if inTab "tab" "treble_8")
   \key c \major
   \time 4/4
   \oneVoice
   <e,\6>1
   <a,\5>1
   <e'\1 b\2 gis\3 e\4 b,\5 e,\6 >1-\tag #'chords ^\markup \fret-diagram #"1-o;2-o;3-1;4-2;5-2;6-o;"
   e,~ e,
   
#})


TrackAVoiceBMusic = #(define-music-function (parser ort inTab) (boolean?)
#{
#})

TrackAStaff = \new Staff <<
   \context Voice = "TrackAVoiceAMusic" {
      \TrackAVoiceAMusic ##f
   }
   \context Voice = "TrackAVoiceBMusic" {
      \TrackAVoiceBMusic ##f
   }
>>
TrackATabStaff = \new TabStaff  <<
   \context TabVoice = "TrackAVoiceAMusic" {
      \TrackAVoiceAMusic ##t
   }
   \context TabVoice = "TrackAVoiceBMusic" {
      \TrackAVoiceBMusic ##t
   }
   
>>
TrackAStaffGroup = \new StaffGroup
<<
   \TrackAStaff
   \TrackATabStaff
>>
\score {
   \TrackAStaffGroup
   \header {
      title = "Guitar"
   }
}

HTH,
  Harm

EDIT
Das pointAndClick-Verhalten ist in 2.19.6 unverändert.
Diskussion zum workaround:
http://lilypond.1069038.n5.nabble.com/2-19-x-Point-and-click-references-td161876.html
« Letzte Änderung: Mittwoch, 14. Mai 2014, 00:49 von harm6 »