Allgemein > Fragen zu Funktionen

Verlängerungspunkt hinter dem Takstrich (HALB GELÖST)

(1/3) > >>

ingmar:
Eine - aus heutiger Sicht unübersichtliche, aber auch bei Beethoven durchaus noch gebräuchliche - Notationsform schreibt im Fall "das letzte Viertel eines Takts soll durch ein im nächsten Takt folgendes angebundenes Achtel verlängert werden" einfach einen Verlängerungspunkt hinter den Taktstrich.

Lässt sich das in Lilypond auf einfache Weise realisieren?

--ingmar

trulli:
Hi Ingmar,

man kann den Dot einfach in den nächsten Takt verschieben.


--- Code: ---\version "2.18.0"

\relative c ' {
f4 f f \once \override Dots #'extra-offset = #'( 2.8 . -0.1)  f4.
f8 f4 f f
}


--- Ende Code ---

Grüße von Trulli

harm6:
Hallo,

das hab' ich schon mal hier gemacht:
http://lists.gnu.org/archive/html/lilypond-user/2013-09/msg00584.html

Bild im Anhang.
Falls es Probleme gibt, melde Dich :)

HTH,
  Harm

ingmar:
Zwischenstand:

Erstmal vielen Dank für die Antworten.

Die erste besticht durch ihre Einfachheit, hat aber den Nachteil, dass ich ja, wenn ichs richtig verstehe, den Punkt manuell hin- und herschiebe. Ich muss dann die Werte jeweils durch Probieren finden, und stoße bei Zeilenwechseln auf unüberwindliche Schwierigkeiten. Jedes neu eingefügte Vorzeichen kann den Satz umformatieren, und ich müsste anschließend alle Verlängerungspunkte prüfen...

Sicher eine gute Lösung für eine einfache Druckvorlage, aber nicht für ein File, aus dem ich Partitur, Einzelstimmen und eines Tages vielleicht auch transponierte Fassungen generieren können will.

Die zweite Lösung funktioniert grundsätzlich bei kleinen Files. Ich hab aber ein langes File, wo sie keinerlei Wirkung zeigt. Meine bisherigen Versuche, den Fehler zu isolieren, um ihn hier darzustellen, sind leider fehlgeschlagen. Da ich mich leider nicht jeden Tag mit dem Thema beschäftigen kann, kann es noch ein wenig dauern, bis es hier weitergeht.

Trotzdem herzlichen Dank an euch beide für die schnelle Reaktion!

Gruß,
--ingmar

ingmar:
Hallo,


hab mich nun - nach langer Pause - wieder diesem Thema gewidmet.

Leider hat die von dir, harm6, netterweise ausbaldoverte Lösung ein Problem, wenn die punktierte Note in einer anderen Oktav liegt; offenbar wird diese Oktavänderung dann für den Punkt ein zweites Mal angenommen, so dass wir anschließend in der falschen Oktav liegen.

Ich bin da leider mit meinen Kenntnissen aufgeschmissen, aber vielleicht fällt jemand ja eine Lösung ein.

Gruß, danke : - )
--ingmar


--- Code: ---\version "2.18.2"
\language "english"

SHIFTDOT =
#(define-music-function (parser location music) (ly:music?)
"
Replaces a dotted note with a single main note and (a tied) single additional
note. The Tie will be transparent.
The second note will appear as dot, without Stem, Flag, Beam, Articulations.
Barchecks should not be used.
Limitation: does not work for chords.
"
(let* ((duration (ly:music-property music 'duration))
    (dot-count (if (ly:duration? duration)
                       (ly:duration-dot-count duration)
                       0)))
;; Apply it only if the note is a single-dotted note
(if (= dot-count 1)
(let* ((m-1 (ly:music-deep-copy music))
(m-2 (ly:music-deep-copy music))
(dur-log (ly:duration-log duration))
(first-dur (ly:make-duration dur-log))
(second-dur (ly:make-duration (+ dur-log 1))))

;; Defines a procedure to replace the given NoteHead with a dot.
(define (note-head->dot note-head)
(let* ((stencil (ly:grob-property note-head 'stencil))
(note-head-X-length
(interval-length (ly:stencil-extent stencil X)))
(dot (ly:font-get-glyph (ly:grob-default-font note-head)
                                         "dots.dot"))
                 (dot-X-length (interval-length (ly:stencil-extent dot X)))
                 (staff-pos (ly:grob-property note-head 'staff-position))
                 (stem (ly:grob-object note-head 'stem))
                 (flag (ly:grob-object stem 'flag))
                 (accidental-grob (ly:grob-object note-head 'accidental-grob))
                 ;; Get values for translating the dot-stencil to avoid putting
                 ;; it on a staff-line.
                 ;; Because ledger-lines will be removed, we return 0, if the
                 ;; NoteHead is above or below the staff.
                 (dir (if (and (even? staff-pos)
                               (not (> staff-pos 5))
                               (not (< staff-pos -5)))
                          -2
                          0))
                 ;; Calculate a value to center the dot with NoteHeads from
                 ;; other voices
                 (x-offset (/ (- note-head-X-length dot-X-length) 2))
                 (new-note-stencil
                    (ly:stencil-translate-axis
                       (ly:stencil-aligned-to dot Y dir)
                       x-offset
                       X)))
             ;;  No Stem, Flag or Accidental!
             (if (not (null? stem))
                 (ly:grob-set-property! stem 'stencil point-stencil))
             (if (not (null? flag))
                 (ly:grob-set-property! flag 'stencil point-stencil))
             (if (not (null? accidental-grob))
                 (ly:grob-set-property! accidental-grob 'stencil point-stencil))
             ;; Replace the NoteHead with a centered dot
             (ly:grob-set-property! note-head 'stencil new-note-stencil)))

       ;; Build the notes to insert, replacing the dotted one.
       (ly:music-set-property! m-1 'duration first-dur)
       (ly:music-set-property! m-2 'duration second-dur)
       ;; In order not to disturb midi we insert a Tie here, making it
       ;; tranparent later.
       (let ((articulations (ly:music-property m-1 'articulations)))
          (ly:music-set-property! m-1 'articulations
                                      (append (list (make-music 'TieEvent))
                                              articulations)))
       ;; No Beam!
       ;; Also, we don't want other elements in 'articulations of the second
       ;; note, let it replaces them.
       (ly:music-set-property! m-2 'articulations
                                   (list (make-music 'BeamForbidEvent)))
       #{
              \override Tie #'transparent = ##t
              $m-1
              \once \override NoteHead #'no-ledgers = ##t
              \once \override NoteHead #'before-line-breaking = #note-head->dot
              $m-2
       #})
       music)))

\relative c'' {
a4 gs a \SHIFTDOT f'4.
e8 f cs d2
}

--- Ende Code ---

... das kommt folgendermaßen heraus:

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln