Akkord mit Haltenoten

Begonnen von Wolfsieg, Mittwoch, 27. September 2017, 11:15

« vorheriges - nächstes »

Wolfsieg

Problem: Kennzeichnen der Noten, die beim Akkordwechsel bleiben, Beispiel:
<c e g bes>1  <d f g b>  <d e g b>

Ich habe experimentiert mit:
<c e g~ bes>1 < d~ f g~ b~> <d e g b>

\override Glissando #'style = #'dashed-line  %?? schlecht sichtbar
\override Glissando.style = #'zigzag  %?? zu auffällig
\set glissandoMap = #'((2 . 2))
<c e g bes>1
\set glissandoMap = #'((0 . 0) (2 . 2) (3 . 3))
< d f g b> <d e g b>

Ich weiß, Glissando ist für gleitenden Wechsel zu anderer Note gedacht.
Kann die Glissando-Länge gekürzt, die Strichstärke vergößert werden?
Gibt es eine andere Möglichkeit, an eine Note rechts ein Haltemerkmal anzubringen,
in einem Akkord?

Malte

Hallo Wolfsieg,

willkommen im Forum! Bitte lies den kurzen Beitrag Helfern helfen.

Zitat von: Wolfsieg am Mittwoch, 27. September 2017, 11:15
Ich habe experimentiert mit:

<c e g~ bes>1 < d~ f g~ b~> <d e g b>

Was gefällt dir daran nicht? Übrigens kannst du auch einfach ~ hinter den Akkord schreiben, LilyPond setzt nur Bögen bei Noten, die liegen bleiben ;)

Hier stellt sich jetzt die Frage, was du mit der ganzen Sache vorhast: Bögen wie oben sind Standard, warum möchtest du stattdessen (Glissando-)Linien?
Zitat
Kann die Glissando-Länge gekürzt, die Strichstärke vergößert werden?
Ja und ja:
\override Glissando.thickness = 5
\override Glissando.bound-details.left.padding = 1.5
\override Glissando.bound-details.right.padding = 1.5

Mehr dazu findest du in der Internals Reference zu Glissando.
Zitat
Gibt es eine andere Möglichkeit, an eine Note rechts ein Haltemerkmal anzubringen,
in einem Akkord?
Jein ... wie gesagt ist der Haltebogen schon ziemlich Standard. Du kannst dir aber mal \laissezVibrer und \repeatTie anschauen.

trulli

Hallo Wolfsieg,

erstmal herzlich Willkommen hier.

Stelle bitte ein Minimalbeispiel mit Versionsnummer (die du benutzt) ein. Dann bitte dein Ziel mit einer Beschreibung oder einem Bild darstellen.

Vermutung von mir: Du meinst:
\override Glissando.font-size = 3

Was du mit "Kennzeichnen" oder "Haltemerkmal" meinst, weiß ich nicht.

LG von trulli

Malte

Zitat von: trulli am Mittwoch, 27. September 2017, 11:32
Vermutung von mir: Du meinst:
\override Glissando.font-size = 3
Merkwürdig, wieso hat die font-size einen Einfluß auf die Länge des Glissandos (große Größe → größere Lücke zu Notenköpfen)? Ich kann weder in der Dokumentation noch im Code des Glissando_engravers was dazu finden; für mich klingt das nach nem Bug. Ich schreib mal an bug-lilypond.

Wolfsieg

Danke für die Antworten.
Der Hinweis mit dem Haltebogen ~ ist effektiv, man müsste nur den vertikalen Abstand verringern und die Richtung einheitlich (nach oben) festlegen.

Aus dem Quelltext:
\version "2.18.2"

Klav = \relative c
{
\clef bass
\key c \major
\repeat volta 3
{
  <c e g b>1~ | <d f g bes>~ | <c e g b!>~ |
  <d f g bes>2.~ <cis e fis bes!>4~ |
  <c ees g bes>2.~ <c ees! f a>4~ |
  <c d f a>2  <des ees ges bes>2 |
}
\alternative
{{
   <d e g b>2. <cis e g a>4 |
   <c d f a>2  <d f g b>2 |
   }
...

Ich wünsche mir so was wie "rot" angedeutet in:
  www.fitl.htwk-leipzig.de/X/Notenstrich.png
Ich möchte nur einen Hinweis, dass der Finger liegenbleiben darf,
und möchte nicht mit Kanonen auf Spatzen schießen.





trulli

Bitte ein kompilierbares Minimalbeispiel. Also eines, das durchläuft. Aber keine Angst... jeder hat mal angefangen. Das Beispiel sollte klein sein.

Meinst du das?

\version "2.18.0"

\relative c
{
\clef bass
\override Tie  #'direction = #UP
\set fingeringOrientations = #'(right)

  <c e g-\tweak #'text #(markup #:concat ("- - - - -"))-3 b>1~ | <d f g  bes>
  }


trulli

Kurze Erläuterung:
Eine Linie für den gehaltenen Finger würde ich nicht nehmen, weil das zu sehr wie eine Notenlinie aussieht. Eine gestrichelte Linie hat sich als gehaltener Finger (im Notentext) eingebürgert.

Zitat von: Malte am Mittwoch, 27. September 2017, 11:39
Merkwürdig, wieso hat die font-size einen Einfluß auf die Länge des Glissandos (große Größe → größere Lücke zu Notenköpfen)?
Stimmt, du hast Recht. :o Habe ich noch gar nicht gesehen... Danke für den Bug-Report!

trulli

Malte

Zitat von: Wolfsieg am Mittwoch, 27. September 2017, 14:35
Danke für die Antworten.
Der Hinweis mit dem Haltebogen ~ ist effektiv, man müsste nur den vertikalen Abstand verringern und die Richtung einheitlich (nach oben) festlegen.
Die Richtung festlegen kannst du mit \tieUp (bzw. \tieDown, \tieNeutral). Zur vertikalen Positionierung weiß ich leider nicht viel zu sagen, außer daß man mit Tie.staff-position die Position eines einzelnen Bogens und mit TieColumn.tie-configuration die Positionen und Richtungen aller Bögen in einem Akkord einstellen kann.
Zitat
\version "2.18.2"

Klav = \relative c
{
\clef bass
\key c \major
\repeat volta 3
{
  <c e g b>1~ | <d f g bes>~ | <c e g b!>~ |
  <d f g bes>2.~ <cis e fis bes!>4~ |
  <c ees g bes>2.~ <c ees! f a>4~ |
  <c d f a>2  <des ees ges bes>2 |
}
\alternative
{{
   <d e g b>2. <cis e g a>4 |
   <c d f a>2  <d f g b>2 |
   }
...
Das ist leider immer noch kein Minimalbeispiel, aber schon nahe dran; ein wirkliches Minimalbeispiel ist erstens noch kleiner und zweitens – und das ist mindestens genauso wichtig – ohne weiteres Zutun eines potenziellen Helfers vollständig übersetzbar. In diesem Fall fehlen schließende Klammern und dadurch, daß nur die Variable ,,Klavier" definiert wird, gibts keine Ausgabe. Besser wärs so:\version "2.19.65"

\relative {
  <c' e g>1~
  <c e a>~
  <d f a>
}


Zitat
Ich wünsche mir so was wie "rot" angedeutet in:
  www.fitl.htwk-leipzig.de/X/Notenstrich.png
Ich möchte nur einen Hinweis, dass der Finger liegenbleiben darf,
und möchte nicht mit Kanonen auf Spatzen schießen.
Man kann aus Haltebögen sicher mit einigem Aufwand irgendwie solche Haltestriche statt der Bögen bauen. Oder Glissandi verwenden (wie in diesem Thread auch schon erfolgreich gezeigt wurde. Letztere müßten aber immer von Hand eingegeben werden per glissandoMap, wie du es oben gemacht hast. Beides ist, falls es sich um ganz normale Noten für ganz normale Musiker gehen soll, meiner Meinung nach überflüssigerweise mit Kanonen auf Spatzen geschossen.

Ich kann mir aber vorstellen, daß es Gründe dafür gibt (z. B. Lehrwerke, moderne Musik), deshalb wäre u. a. die Fragen zu klären, wie häufig diese Art von Strichen auftritt (wie schlimm also zusätzliche Handarbeit bei jedem einzelnen wäre) und ob die Striche zusätzlich oder anstatt der Haltebögen gesetzt werden sollen.

Malte

Zitat von: trulli am Mittwoch, 27. September 2017, 15:36

  <c e g-\tweak #'text #(markup #:concat ("- - - - -"))-3 b>1~

Zur Erläuterung: Trulli hat hier die Fingersatzziffer 3 kurzerhand durch den String "- - - - -" ersetzt. Statt\tweak #'text #(markup #:concat ("- - - - -"))würde aber schon ein einfacheres\tweak text "- - - - -"ausreichen. Diese Lösung hat übrigens leider den Nachteil, daß man die Anzahl der Striche von Hand eingeben muß.

ZitatEine gestrichelte Linie hat sich als gehaltener Finger (im Notentext) eingebürgert.
Echt? Noch nie gesehn ... Und ich seh grad noch nicht so genau, was daran (vor allem zusätzlich zu einem Bogen) besser als ein Bogen sein soll.

trulli

Zitat von: Malte am Mittwoch, 27. September 2017, 15:53
Echt? Noch nie gesehn ...

Kommt vor allem in Schulen vor. Unten ein Beispiel aus einer Gitarrenschule.

Ja, die Frage ist berechtigt, ob man überhaupt ein Zeichen zum Liegenlassen der Finger braucht. Ich würde das auch weglassen. Zusatzinformationen belasten immer das Auge. Ich bin deshalb dafür, so wenig wie möglich an die Noten zu schreiben. Aber das ist Geschmackssache und in einigen wenigen Fällen ist es vielleicht sinnvoll.

\tweak text "- - - - -"
Geht bei mir nicht.  :(

trulli

Malte

Zitat von: trulli am Mittwoch, 27. September 2017, 18:12
\tweak text "- - - - -"
Geht bei mir nicht.  :(
Welche LilyPond-Version nutzt du und was hast du genau geschrieben? Folgender Code funktioniert bei mir unter 2.18.0, 2.18.2 und 2.19.65:\version "2.18.0"

\relative {
  \clef bass
  \override Tie.direction = #UP
  \set fingeringOrientations = #'(right)
  <c e g-\tweak text "- - - - -"-3 b>1~ | <d f g  bes>
}
Für 2.12.3, 2.14.2 und 2.16.2 muß es #'text statt text heißen, außerdem Tie #'direction statt Tie.direction. Aber die Konstruktion mit markup und #:concat braucht man in keinem Fall :)

trulli

#11
Egal, welche Version.

\version "2.19.0"
\relative c''
{
  <c-\tweak text "- - - - -" e >1~  <c e>
  }


trulli

EDIT: Ach soooo, natürlich mit Fingersatz. Dann geht es. *schäm*
c-\tweak text "- - - - -"-3

harm6

Hallo Wolfsieg,

der code unten zeigt mittels glissando die liegenbleibenden Töne automatisch an.
Allerdings wird der letzte Takt aus
http://www.fitl.htwk-leipzig.de/X/Notenstrich.png
anders dargestellt. Tatsächlich ist die Darstellung aus dem link ja auch falsch, da die Töne nicht in der selben Stimme liegenbleiben. Falls Du das trotzdem so haben willst, gehe kreativ mit der Eingabereihenfolge um ;)

Gruß,
  Harm


\version "2.19.65"

#(define equal-pitches-gliss
  ;; Only print a Glissando, if left and right bounding notes are the same.
  (lambda (grob)
    (let* ((orig (ly:grob-original grob))
           (siblings (if (ly:grob? orig)
                         (ly:spanner-broken-into orig)
                         '()))
           ;; Get left/right bounds
           ;; For broken glissandi take first/last of siblings into account, to
           ;; get the relevant note-events.
           (left-bound
             (ly:spanner-bound
               (if (pair? siblings) (car siblings) grob)
               LEFT))
           (right-bound
             (ly:spanner-bound
               (if (pair? siblings) (last siblings) grob)
               RIGHT))
           (left-cause (ly:grob-property left-bound 'cause))
           (right-cause (ly:grob-property right-bound 'cause))
           (bound-pitch=?
             (and
               (ly:prob? left-cause)
               (ly:prob? right-cause)
               (equal?
                 (ly:prob-property left-cause 'pitch)
                 (ly:prob-property right-cause 'pitch)))))
      ;; The glissandi should be bounded by note-events, if not print a warning
      ;; to terminal, but no stencil.
      (ly:grob-set-property! grob 'stencil
        (cond (bound-pitch=? (ly:line-spanner::print grob))
              ((not (and (ly:prob? left-cause) (ly:prob? right-cause)))
               (begin
                 (ly:warning
                   "No bounding note-events found, no stencil printed")
                 #f))
              (else #f))))))
           
#(define same-gliss-start-end
  ;; All glissandi between chords should start at the same X-coordinate, same
  ;; for glissando-endings.
  (lambda (grob)
    (let* ((left-bound (ly:spanner-bound grob LEFT))
           (parent-nc (ly:grob-parent left-bound X))
           (vertical-axis-group-elts
             (ly:grob-object (ly:grob-parent grob Y) 'elements))
           ;; Filter VerticalAxisGroup-elements for Glissandi, restricted to
           ;; those starting at the NoteHeads from same NoteColumn.
           ;; Return their 'X-value for start/end
           (relevant-gliss-Xs
             (if (ly:grob-array? vertical-axis-group-elts)
                 (filter-map
                   (lambda (elt)
                     (and
                       (grob::has-interface elt 'glissando-interface)
                       (equal?
                         (ly:grob-parent (ly:spanner-bound elt LEFT) X)
                         parent-nc)
                       (cons
                         (assoc-get 'X
                                    (ly:grob-property elt 'left-bound-info))
                         (assoc-get 'X
                                    (ly:grob-property elt 'right-bound-info)))))
                   (ly:grob-array->list vertical-axis-group-elts))
                 '()))
           ;; Get the most left 'X for the final 'X-value of the end.
           ;; Get the most right 'X for the final 'X-value of the start.
           ;; Override left/right-bound-info with those values.
           (min-x-right (apply min (map cdr relevant-gliss-Xs)))
           (max-x-left (apply max (map car relevant-gliss-Xs))))
      (ly:grob-set-nested-property! grob '(left-bound-info X) max-x-left)
      (ly:grob-set-nested-property! grob '(right-bound-info X) min-x-right))))

%% 'parser'/'location' are present to make it compile with 2.18.2
addGliss =
#(define-music-function (parser location mus)(ly:music?)
"Adds @code{\\glissando} to every found event-chord, unless already present.
But not to the last event-chord."
  (let* ((evt-chrds (extract-typed-music mus 'event-chord)))
    (if (pair? evt-chrds)
        (for-each
          (lambda (m)
            (let* ((elts (ly:music-property m 'elements))
                   (glissando-present?
                     (any
                       (lambda (elt) (music-is-of-type? elt 'glissando-event))
                       elts)))
              (if (not glissando-present?)
                  (ly:music-set-property! m 'articulations
                    (cons (make-music 'GlissandoEvent)
                          (ly:music-property m 'articulations))))))
          (drop-right evt-chrds 1)))
    mus))

   
\score {
  \addGliss
  {
    \override Glissando.after-line-breaking =
      #(lambda (grob)
         (same-gliss-start-end grob)
         (equal-pitches-gliss grob))
 
    \clef bass
    <c e g b>1
    <d f g bes>
    <c e g b!>
    <d f g bes>2.
    <cis e fis bes!>4-\tweak bound-details.right.padding #0.5 \glissando
    \break
    <c ees g bes>2. <c ees! f a>4
    <c d f a>2. <des ees ges bes>4
    <d e g b>2. <cis e g a>4
    %% equal notes present, but different voicing, i.e. no glissando-line
    <>^"See comments in code"
    <c d f a>2 <d f g b>
    \bar "||"
    %% trigger printed glissando with changed input order.
    <c d f a>2 <b d f g>
  }
  \layout {
    \override Glissando.color = #red
    \override Glissando.thickness = 2.5
    \override Glissando.breakable = ##t
    %% further customizing possible with tweaks/overrides like:
    \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
    \override Glissando.minimum-length = 8
    \override Glissando.bound-details.left.padding = #1
    \override Glissando.bound-details.right.padding = #3
  }
}


Wolfsieg

Super, danke für soviel Programmieraufwand.

Ich habe nach kurzem Test in 20 Minuten die Notenseite erstellt, ohne Fehler bei Übersetzung,
siehe:
www.fit-leipzig.de/WSW/Musi/DreamsVX.pdf

Dass nur gleiche Stimmen liegenbleiben können, das bekomme ich noch hin.

Danke auch für die anderen Hinweise.

Wolfsieg (W.S.W.)

Malte

Eigentlich off-topic, aber vielleicht trotzdem relevant:
Zitat von: trulli am Mittwoch, 27. September 2017, 15:41
Zitat von: Malte am Mittwoch, 27. September 2017, 11:39
Merkwürdig, wieso hat die font-size einen Einfluß auf die Länge des Glissandos (große Größe → größere Lücke zu Notenköpfen)?
Stimmt, du hast Recht. :o Habe ich noch gar nicht gesehen... Danke für den Bug-Report!
Bisher keine Antwort, aber ich habe gerade herausgefunden, daß das anscheinend Absicht ist (diese Lücke wird explizit mit font-size skaliert) und hab jetzt mal nachgefragt, warum das so ist. Ich melde mich, wenn ich mehr weiß.