Deutschsprachiges LilyPond-Forum

Spezielle Notation => Instrumentenspezifisch => Gitarre/Laute => Thema gestartet von: hurrlipurr am Samstag, 2. November 2019, 08:44

Titel: Tabulatur nur partiell ausgeben
Beitrag von: hurrlipurr am Samstag, 2. November 2019, 08:44
Ist es möglich nur teilweise eine zusätzliche Zeile mit Tabulatur einzufügen?

Ich habe größere BigBand-Scores, bei denen ich zum Einstudieren nur für kompliziertere Single Lines eine zusätzliche Tabulatur sehr nützlich finde. Auf das ganze Stück bläht die zusätzliche Zeile die Partitur sehr auf.

Viele Grüße
Oliver
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: Malte am Samstag, 2. November 2019, 09:41
Hallo Oliver,

bitte poste immer mit Versionsangabe und Minimalbeispiel. Folgendes sollte eigentlich gehen, es scheint aber einen Bug zu geben, der das Verstecken der ersten Zeile nicht so richtig gut funktionieren läßt:\version "2.19.83"

bla = { \repeat unfold 400 e'4 }
git = {
  \set TabStaff.keepAliveInterfaces = #'()
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \unset TabStaff.keepAliveInterfaces
  \repeat unfold 10 { c'4 d' e' f' }
  \set TabStaff.keepAliveInterfaces = #'()
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
  \repeat unfold 40 c'4
}

<<
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
  \new Staff \git
  \new TabStaff \with { \RemoveEmptyStaves } \git
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
  \new Staff \bla
>>


Ich bin dran, herauszufinden, was da schief läuft.

Viele Grüße
Malte
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: harm6 am Samstag, 2. November 2019, 15:04
Siehe Malte's Frage und meine Antworte(n):
http://lilypond.1069038.n5.nabble.com/TabStaff-keepAliveInterfaces-td224975.html (http://lilypond.1069038.n5.nabble.com/TabStaff-keepAliveInterfaces-td224975.html)

HTH,
  Harm
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: hurrlipurr am Samstag, 2. November 2019, 19:57
Hi ihr beiden,

bei Maltes Vorschlag werden bei mir nur die vier Noten (c d e f) ausgegeben und die auch nur einmal. Leider verstehe ich auch den Code nicht und was ich zu keepAliveInterfaces finden konnte (http://lilypond.org/doc/v2.19/Documentation/notation/context-modification-identifiers.de.html) hilft mir beim Verständnis auch nicht weiter.

Ich versuche mal ein Beispiel zu basteln, das ist halt nicht so einfach, wenn man gar nicht weiß, wie es gehen könnte.

Grundsätzlich sieht mein Aufbau so aus:

sheet =
  <<
    \new ChordNames {
      \set chordChanges = ##t
      \harmonies
    }
    \new Voice = "one" { \clef "treble_8" \omit Staff.StringNumber \melody }
    \new TabStaff \melody
  >>


Ich habe also Akkordiagramme und Noten, wobei die Noten größtenteils nur Rhythmusangaben (mit Hilfe von \improvisationOn/Off) darstellen. Dort macht die Tabulatur keinen Sinn, nimmt halt nur Platz weg.

Dazwischen kommen dann ab und zu richtige Single Lines, die ich dann gerne parallel noch als Tab drunter hätte.

Vielleicht denke ich auch wieder mal viel zu kompliziert...

Ich benutze übrigens Version 2.19.82

VG Oliver
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: hurrlipurr am Samstag, 15. Februar 2020, 10:07
Hi,

ich komme zurück zu meiner Frage vom letzten Jahr. Inzwischen habe ich versucht, das Problem mit Ossia-Systemen zu lösen. Am folgenden Beispiel wird hoffentlich auch das Problem klarer.


\version "2.19.83"
\pointAndClickOff
\header { title = "Partielle Tabs" composer = "" tagline = ""}
\paper {
  ragged-right = ##f
  markup-system-spacing.basic-distance = #20    % Abstand Titel usw. von Noten
  indent = #0             % Einrückung der ersten Zeile
}

fourq = {\relative c' {\improvisationOn \omit Stem b4 b b b \improvisationOff \undo \omit Stem}}

harmonies = \chordmode {
  c1 f g c
}

melody = \new Voice = main {
  \relative c' {
  \compressFullBarRests
  % \set minimumFret = #5
  % \set TabStaff.restrainOpenStrings = ##f
  \key c \major

  \repeat unfold 2 \fourq
  <<
    { f4 d' b, d }
    \new TabStaff \with {
      \remove "Time_signature_engraver"
      alignBelowContext = "main"
      fontSize = #-1
      \override StaffSymbol.staff-space = #(magstep -1)
      \override StaffSymbol.thickness = #(magstep -1)
      firstClef = ##f
    }
    { f4 d' b, d }
  >>
  \fourq
}
}
sheet =
  <<
    \new ChordNames {
      \set chordChanges = ##t
      \harmonies
    }
    \new Staff = "one" { \clef "treble_8" \omit Staff.StringNumber \melody }
  >>

\book { \bookOutputName $(string-append "PDF/" (ly:parser-output-name)) \bookOutputSuffix "C" \sheet}


Zwei Probleme habe ich aber noch:
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: harm6 am Samstag, 15. Februar 2020, 13:04
Hier meine Gedanken zum Thema:


\version "2.19.83"

\pointAndClickOff

\header { title = "Partielle Tabs" composer = "" tagline = ""}

\paper {
  ragged-right = ##f
  markup-system-spacing.basic-distance = #20    % Abstand Titel usw. von Noten
  indent = #0             % Einrückung der ersten Zeile
}


myTabProperties =
  \with {
    \remove "Time_signature_engraver"
    \omit Clef
    alignBelowContext = "one"
    fontSize = #-1
    \override StaffSymbol.staff-space = #(magstep -1)
    \override StaffSymbol.thickness = #(magstep -1)
  }

sendOssiaTabsToTabStaff =
#(define-music-function (mus)(ly:music?)
(make-music
  'SimultaneousMusic
  'elements
  (list
    ;; Original 'mus', disable improvisation, enable printing Stems
    ;; Revert those settings at the end of 'mus'
    #{
      \improvisationOff 
      \undo \omit Stem
      $mus
      \omit Stem
      \improvisationOn
    #}
    ;; mus sent to TabStaff named "tabs"
    (make-music
      'ContextSpeccedMusic
      'property-operations
      '()
      'context-id
      ;; TODO should the name be configurable?
      "tabs"
      'context-type
      'TabStaff
      'element
      #{
        \startStaff
        #mus
        \stopStaff
      #}))))

fourq = \relative c' {
\improvisationOn
\omit Stem
b4 b b b
}

harmonies = \chordmode {
  c1 f g c g c
}

melody = \new Voice = "main"
  \relative c' {
  \compressFullBarRests
  \key c \major

  \repeat unfold 2 \fourq
  \sendOssiaTabsToTabStaff
    {
      \set minimumFret = #5
      \set restrainOpenStrings = ##f
      f4 d' b, d
    }
  \fourq
  \break
  %% Manually remove unwished BarLines in TabStaff at line-end
  %% No clue how to do this automagically in all thinkable cases
  %% The effect is visible if this command and next \fourq is commented
  \once \set TabStaff.whichBar = ""
  \fourq
  \sendOssiaTabsToTabStaff
    {
      \set minimumFret = #5
      \set restrainOpenStrings = ##f
      f4 d' b, d
    }
  \fourq
}


<<
  \new ChordNames \with { chordChanges = ##t }
    \harmonies
   
  \new Staff = "one" \with { \omit StringNumber }
    { \clef "treble_8" \melody }
 
  %% Create TabStaff as target for 'sendOssiaTabsToTabStaff', apply \stopStaff,
  %% keep it alive
  \new TabStaff = "tabs" \with \myTabProperties
    { \stopStaff $(skip-of-length melody) }
>>


Allerdings fusst manches auf Deinen Angaben, die sich in wirklichen Codings möglicherweise ändern werden.

Aber hier hast Du zumindest einen Anfang.
Beachte auch die inline Kommentare.


Gruß,
  Harm
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: hurrlipurr am Samstag, 15. Februar 2020, 15:14
Hallo Harm,

prima, deine Lösung hilft mir schon erheblich weiter. Dummerweise verbraucht aber nun die 'permanente' TabStaff immer Platz, auch wenn sie nicht ausgegeben wird, was die Partitur sehr aufbläht.

ZitatAllerdings fusst manches auf Deinen Angaben, die sich in wirklichen Codings möglicherweise ändern werden.
Das habe ich nicht recht verstanden.

LG Oliver
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: harm6 am Samstag, 15. Februar 2020, 23:08
ZitatDummerweise verbraucht aber nun die 'permanente' TabStaff immer Platz, auch wenn sie nicht ausgegeben wird, was die Partitur sehr aufbläht.

Hilft:
  %% Create TabStaff as target for 'sendOssiaTabsToTabStaff', apply \stopStaff,
  %% keep it alive
  \new TabStaff = "tabs" \with { \myTabProperties \RemoveEmptyStaves }
    { \stopStaff $(skip-of-length melody) }
?

Zitat von: hurrlipurr am Samstag, 15. Februar 2020, 15:14
ZitatAllerdings fusst manches auf Deinen Angaben, die sich in wirklichen Codings möglicherweise ändern werden.
Das habe ich nicht recht verstanden.

Z.B. Ist der Name des TabStaff hardcoded, siehe TODO
Aber nur in sendOssiaTabsToTabStaff nicht bei der TabStaff-"Erschaffung"

Auch ist die Frage, ob Setzungen wie
      \set minimumFret = #5
      \set restrainOpenStrings = ##f
lokal oder global gelten sollen.
Genauso \improvisationOn/off und \omit Stem etc

Ich hab' zum Teil geraten, was für Dich am besten passen mag...

Gruß,
  Harm
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: hurrlipurr am Montag, 17. Februar 2020, 21:28
Ja, das hilft sehr.  :D

minimumFret und restrainOpenStrings müssten aber in der Tat veränderlich sein - so weit war ich noch gar nicht durchgestiegen...  :-[

Ich werde mir in den nächsten Tagen mal den "Extending" Guide zu Gemüte führen, mal schauen, ob ich das verstehe. Lisp habe ich vor vielen Jahren an der Uni gelernt, vielleicht ist ja noch etwas hängengeblieben.
Titel: Antw:Tabulatur nur partiell ausgeben
Beitrag von: harm6 am Montag, 17. Februar 2020, 23:28
Zitat von: hurrlipurr am Montag, 17. Februar 2020, 21:28
Ich werde mir in den nächsten Tagen mal den "Extending" Guide zu Gemüte führen, mal schauen, ob ich das verstehe. Lisp habe ich vor vielen Jahren an der Uni gelernt, vielleicht ist ja noch etwas hängengeblieben.

Für LilyPond hilft es immer sich in Lisp/scheme/guile auszukennen.
Als Einführung für scheme in LilyPond ist das Extending Manual gar nicht so übel...

Allerdings ist in meinem Coding hier kaum natives scheme vorhanden. Tatsächlich bin ich nur nach scheme gewechselt, weil ich im ersten Versuch es nicht geschafft hatte, die Limitierungen, die #{...#} zum Einbetten in scheme hat, zu umgehen.

Tatsächlich kann man 'sendOssiaTabsToTabStaff' aber auch so schreiben:


sendOssiaTabsToTabStaff =
#(define-music-function (mus)(ly:music?)
#{
  <<
    { \improvisationOff \undo \omit Stem $mus \omit Stem \improvisationOn }
    \context TabStaff = "tabs" { \startStaff $mus \stopStaff }
  >>
#})


Denke ich jedenfalls. Die Tests überlasse ich Dir ;)

Gruß,
  Harm