Autor Thema: Wie geht Sekunde und höhere Note zuerst (links)?  (Gelesen 2974 mal)

martinmagtenor

  • Member
Wie geht Sekunde und höhere Note zuerst (links)?
« am: Samstag, 12. April 2014, 19:16 »
Hallo,

wie kann man Lilypond dazu überreden in einem Akkord die höhere Note zuerst (und nach links verschoben) zu setzen?

Begründung
In dem ganz speziellen Fall, dass man den Glissando-Trick für Repercussa/Balkennoten verwendet (vergl. https://liarchiv.joonet.de/index.php?topic=333.0) entsteht die Notwendigkeit für die "vertauschte" Positionierung genau dann, wenn man zwei Stimmen rhytmisch gleichlaufend übereinander stehen hat und bei einer der nächste Ton nach der Balkennote einen (!) Ton tiefer ist. Dann wird die gezeigte Note links positioniert und steht damit nicht mehr in der Flucht zum anderen System und je nach Wert von padding right in Kontakt oder kollidierend mit der Balkennote.

Und hier ein Beispiel
\version "2.16.2"

\include "deutsch.ly"

ohr = \markup {
  \with-dimensions #'(0 . 0) #'(0 . 0) \translate #'( 0 . -0.3)
  \combine \filled-box #'(-0.3 . +0.3) #'(0 . 0.3) #0 % Naht
  \filled-box #'(-0.8 . +0.8) #'(0 . 0.15) #0         % Strich


balken = {
   \once \override Glissando #' thickness = #6
   \once \override Glissando #'(bound-details left  padding) = #0
   \once \override Glissando #'(bound-details right padding) = #1
   \once \override Glissando #'(bound-details left text) = \markup \rotate #-90 \ohr
   \once \override Glissando #'(bound-details right text) = \markup \rotate #90 \ohr
}
 
 \score {
   <<
   \new Staff <<
\set Staff.instrumentName = #"Alt"
\new Voice = "Alt"
  \relative c' { \clef treble \time 1/4 \autoBeamOff
          \override Score.SpacingSpanner #'packed-spacing = ##t
          \set Score.timing = ##f
  e
          \hideNotes \balken g \glissando \unHideNotes
  <\tweak #'transparent ##t g a>
  g2
  }
\new Lyrics = "ein" \lyricsto "Alt" { Ei --
        \once \override LyricText #'self-alignment-X = #LEFT
        "ne Demonstra" -- ti -- on }
>>
   \new Staff <<
\set Staff.instrumentName = #"Tenor"
\new Voice = "Tenor"
  \relative c' { \clef "treble_8" \time 1/4 \autoBeamOff
          \override Score.SpacingSpanner #'packed-spacing = ##t
          \set Score.timing = ##f
  c4
          \hideNotes \balken h \glissando \unHideNotes
  <\tweak #'transparent ##t h a>
  h2
  }
      >>
  >>
  \midi {
  }
  \layout {
   \context {
    \Staff
    \remove "Time_signature_engraver"
    \remove "Bar_engraver"
    \override Stem #'transparent = ##t
    \override Flag #'transparent = ##t
    \override Beam #'transparent = ##t
   } % context
  } % layout
} % score

Vielen Dank
Martin

erich

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #1 am: Samstag, 12. April 2014, 22:49 »
Hallo Martin,

wie oft tritt denn der Fall ein, den Du beschreibst. Bei seltenen Fällen kann man sich dadurch helfen,
dass man mit lilypond -dbackend=svg ausgibt und dann in Inkscape Korrekturen vornimmt.

Gruß
Erich
« Letzte Änderung: Samstag, 12. April 2014, 23:06 von erich »

harm6

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #2 am: Samstag, 12. April 2014, 23:10 »
Hallo Martin,

das Verfahren aus dem alten Thread halte ich für viel zu umständlich.
Du kannst auch mal hier nachschauen, vielleicht gibt das noch ein paar Anstöße.
Ich habe jetzt nur ein paar Symptome kuriert, eigentlich sollte man es komplett neu kodieren.
Allerdings muß Dir klar sein, daß jede Lösung, die glissando verwendet ein Problem hat: LilyPond akzeptiert kein glissando zu einer Pause. Da muß man dann doch rumfummeln. :(

Auf jeden Fall ist es jetzt nicht mehr nötig einen Zielakkord zu schreiben, in dem dann auch noch eine Note transparent gemacht werden muß. Die Angabe von \glissando entfällt. Das unsichtbar machen der Anfangsnote ebenfalls.
Schreib einfach \balken g
Ich habe eine 'minimum-length angegeben. Falls Dir der Wert nicht zusagt, ändere ihn halt.

\version "2.16.2"

\include "deutsch.ly"

ohr = \markup {
  \with-dimensions #'(0 . 0) #'(0 . 0)
  \translate #'( 0 . -0.3)
  \combine \filled-box #'(-0.3 . +0.3) #'(0 . 0.3) #0 % Naht
  \filled-box #'(-0.8 . +0.8) #'(0 . 0.15) #0         % Strich


balken = {
   \once \override Glissando #'after-line-breaking =
    #(lambda (grob)
      (let* ((left-bound (ly:spanner-bound grob LEFT))
             (left-Y (assoc-get 'Y (ly:grob-property grob 'left-bound-info))))
       (ly:grob-set-property! left-bound 'stencil #f)
       (ly:grob-set-nested-property! grob '(right-bound-info Y) left-Y)))
     
   \once \override Glissando #'thickness = #6
   \once \override Glissando #'(bound-details left  padding) = #-0.5
   \once \override Glissando #'(bound-details right padding) = #1.3
   \once \override Glissando #'(bound-details left text) = \markup \rotate #-90 \ohr
   \once \override Glissando #'(bound-details right text) = \markup \rotate #90 \ohr
   \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
   \once \override Glissando #'minimum-length = 10
   <>\glissando
}
 
 \score {
   <<
   \new Staff <<
\set Staff.instrumentName = #"Alt"

\new Voice = "Alt"
  \relative c' {
    \clef treble
    \time 1/4
    \autoBeamOff
            \override Score.SpacingSpanner #'packed-spacing = ##t
            \set Score.timing = ##f
    e
            \balken g
    a
    g2
    g g
  }
 
\new Lyrics = "ein" \lyricsto "Alt" {
  Ei --
          \once \override LyricText #'self-alignment-X = #LEFT
          "ne Demonstra" -- ti -- on
          zur Pause
        }
>>
   \new Staff <<
\set Staff.instrumentName = #"Tenor"
\new Voice = "Tenor"
  \relative c' {
    \clef "treble_8"
    \time 1/4
    \autoBeamOff
            \override Score.SpacingSpanner #'packed-spacing = ##t
            \set Score.timing = ##f
    c4
            \balken h
    a h2
    \balken c
    \once \override NoteHead #'stencil = #point-stencil
    \grace d
    r
  }
      >>
  >>
  \midi {
  }
  \layout {
   \context {
    \Staff
    \remove "Time_signature_engraver"
    \remove "Bar_engraver"
    \override Stem #'transparent = ##t
    \override Flag #'transparent = ##t
    \override Beam #'transparent = ##t
   } % context
  } % layout
} % score

HTH,
  Harm

EDIT: überflüssige Code-Zeilen entfernt
« Letzte Änderung: Sonntag, 13. April 2014, 11:44 von harm6 »

erich

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #3 am: Sonntag, 13. April 2014, 08:25 »
Hallo Martin, hallo Harm,

eine Zwischenfrage: Wird ein Glissando auch in MIDI ausgeführt? Ich könnte es ausprobieren, aber vielleicht wisst Ihr es so.

Gruß
Erich

martinmagtenor

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #4 am: Sonntag, 13. April 2014, 11:38 »
wie oft tritt denn der Fall ein, den Du beschreibst. Bei seltenen Fällen kann man sich dadurch helfen,
dass man mit lilypond -dbackend=svg ausgibt und dann in Inkscape Korrekturen vornimmt.

Hallo Erich,

im fraglichen Dokument genau einmal, aber das ist eine kurze Intonation in rund 36 Seiten Notentext (4-stimmiger Satz, a capella). Und da ich das ganze als Freizeitvergnügen, manche nennen sowas Hobby, mache, darf ich es mir erlauben das Ausweichen auf Workarounds abzulehnen.

Die Frage war schon ganz bewusst so gestellt, wie sie gestellt ist.

Danke und Grüße
Martin

martinmagtenor

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #5 am: Sonntag, 13. April 2014, 11:41 »
eine Zwischenfrage: Wird ein Glissando auch in MIDI ausgeführt? Ich könnte es ausprobieren, aber vielleicht wisst Ihr es so.

Hallo Erich,

sorry, keine Ahnung. War für mich noch kein Thema.

Ich wage mal für das Forum zu sprechen: Wir freuen uns auf Deine Versuchsergebnisse.

Grüße
Martin

martinmagtenor

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #6 am: Sonntag, 13. April 2014, 12:45 »
Hallo Harm,

also VIELEN DANK. Augenscheinlich löst das mein Problem, ohne die Frage zu beantworten.  ;-)

das Verfahren aus dem alten Thread halte ich für viel zu umständlich.
Du kannst auch mal hier nachschauen, vielleicht gibt das noch ein paar Anstöße.

Danke, der Beitrag war mir auch schon aufgefallen. Ich bin aber noch nicht so versiert, dass ich das so mal eben auf den für meinen Bedarf relevanten Teil reduzieren kann.

Ich habe jetzt nur ein paar Symptome kuriert, eigentlich sollte man es komplett neu kodieren.
Allerdings muß Dir klar sein, daß jede Lösung, die glissando verwendet ein Problem hat: LilyPond akzeptiert kein glissando zu einer Pause. Da muß man dann doch rumfummeln. :(

Auf jeden Fall ist es jetzt nicht mehr nötig einen Zielakkord zu schreiben, in dem dann auch noch eine Note transparent gemacht werden muß. Die Angabe von \glissando entfällt. Das unsichtbar machen der Anfangsnote ebenfalls.
Schreib einfach \balken g
Ich habe eine 'minimum-length angegeben. Falls Dir der Wert nicht zusagt, ändere ihn halt.

Für mich ist das ein klasse Ergebnis, mit dem ich mich gleich an meinen eigentlichen Satz wagen werde.

Danke und Grüße
Martin

harm6

  • Member
Re: Wie geht Sekunde und höhere Note zuerst (links)?
« Antwort #7 am: Sonntag, 13. April 2014, 14:09 »
Hi,

Zitat
Augenscheinlich löst das mein Problem, ohne die Frage zu beantworten.  ;-)

*grins*
Schon richtig. Das titelgebende Problem sollte mit
http://lsr.di.unimi.it/LSR/Item?id=861
lösbar sein.

Gruß,
  Harm