• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

zwei Taktangaben am Lied-Anfang möglich?

Begonnen von stefanhuglfing, Sonntag, 29. Dezember 2013, 18:39

Vorheriges Thema - Nächstes Thema

stefanhuglfing

Ein Lied ist im 4/4-Takt bis auf zwei Takte, die je sechs Viertel enthalten.
Meine Sänger stören sich an Taktangaben während des Liedes. Deshalb habe ich
die 6/4-Takte mit  \cadenzaOn  bzw.  -Off  reingeschrieben und
damit am Anfang nichts falsches steht die Taktangabe mit  \remove "Time_signature_engraver"  entfernt.

 

\version "2.14.2-2"
     
SopranNoten = 
\relative c'
  {
   a'4 g f e d2 c
   \cadenzaOn f f4 g2 g4 \cadenzaOff \bar"|" a1
   c4 c d c bes2 a \cadenzaOn g4 f g2 g \cadenzaOff \bar"|"
   f1
   \bar "|."
  } 
 
\score
{
  { \key f \major \SopranNoten }
  \layout { \context { \Staff \remove "Time_signature_engraver" } }



Ich hätte aber gern am Anfang des Liedes beide Taktangaben.
Die Taktstriche würde ich auch selbst setzen.

Geht das?

fugenkomponist

Hallo Stefan,

mit einem der beiden folgenden kannst du es mal probieren
http://lsr.dsi.unimi.it/LSR/Item?id=725 (da halt den richtigen musicglyph für das c rausfinden)
http://lsr.dsi.unimi.it/LSR/Item?id=782 (wenn du tatsächlich 4/4 in Zahlen dastehen haben willst; Klammern noch rausnehmen)

Ansonsten könntest du die Taktangaben aber auch über das System schreiben:
http://lsr.dsi.unimi.it/LSR/Item?id=272

Viele Grüße,
Malte

stefanhuglfing

Danke, es geht fast:

Am liebsten wäre mir das erste Beispiel, da gelingt es mir aber nicht, 4/4 hinzuschreiben: Wenn ich "timesig.mensural64" durch "4" "4" ersetze, bekomme ich eine Fehlermeldung.

Beim zweiten Beispiel stören mich nur die Klammern. Das ist aber nicht so schlimm.

fugenkomponist

#3
Naja, im ersten Beispiel wird halt ein musicglyph erwartet (also ein einzelnes Zeichen, keine zwei Zahlen), den kann man durch timesig.C44 ersetzen:#(define ((double-time-signature glyph a b) grob)
   (grob-interpret-markup grob
                          (markup #:override '(baseline-skip . 0) #:number
                                  (#:line ((markup (#:musicglyph glyph))
                                           (#:column (a b)))))))

music = \relative c' {
\override Score.TimeSignature #'stencil =
    #(double-time-signature  "timesig.C44" "6" "4")
\time 3/4
c8 b c d e f g4 g g g4 a8 g f e d2. \bar "|."
}

\score { \music }
(da hab ich außerdem fontsize und baselineskip angepasst)

Und im zweiten Beispiel löscht man halt die beiden Klammern:
#(define ((time-parenthesized-time up down upp downp) grob)
   (grob-interpret-markup grob
     (markup #:override '(baseline-skip . 0) #:number
       (#:line (
           (#:column (up down))
           (#:column (upp downp)))))))

\relative c' {
   \override Staff.TimeSignature #'stencil = #(time-parenthesized-time "4" "4" "6" "4")     
   \time 3/4
   b8 b8 gis8 gis4 gis8
}
Da kann man evtl. noch zwischen den beiden (#:column ...)-Zeilen ein (#:hspace 0.5) o.ä. einfügen, damit es nicht nacht 46/44 aussieht.

Es hilft oft, sich anzuschauen, was der Code so ungefähr tut; auch ohne tiefere Scheme-Kenntnisse (die ich auch nicht habe) kann man ihn verstehen und was dran ändern.

Edit: Oh, und was mir gerade noch aufgefallen ist (falls jemand mal ein ähnliches Problem, aber mit anderen Taktarten hat): Wenn man sowas wie 4/4 (oder c) und 12/8 haben will, sollte man #:column durch #:center-column ersetzen, damit die 12 und die 8 zentriert übereinander stehen.

fugenkomponist

#4
Hier mal ein komplettes Ergebnis. Verschieden lange Takte kannst du hinkriegen, indem du • entweder die Taktart wechselst und die Taktartangabe verschwinden lässt (\omit geht erst ab Version 2.17, bei 2.16 brauchst du den ,,#'stencil = ##f"-\override) • oder per \set Score.measureLength die Taktlänge änderst und mit \unset wieder zurücksetzt.\version "2.17.29"

#(define ((num-double-time-signature num1 den1 num2 den2) grob)
   (grob-interpret-markup grob
     (markup #:override '(baseline-skip . 0) #:number
       (#:line (
                (#:center-column (num1 den1))
                (#:center-column (num2 den2))
                )))))

#(define ((glyph-double-time-signature glyph num den) grob)
   (grob-interpret-markup grob
     (markup #:override '(baseline-skip . 0) #:number
       (#:line (
                (markup (#:musicglyph glyph))
                (#:center-column (num den))
                )))))

\relative c' {
  \override Staff.TimeSignature.stencil = #(num-double-time-signature "4" "4" "6" "4")     
  \time 4/4
  c4 d e f
  \omit Staff.TimeSignature
  \time 6/4
  g f e f e d
  \once \override Staff.TimeSignature.stencil = ##f
  \time 4/4
  c d e d
  \override Staff.TimeSignature.stencil = #(glyph-double-time-signature "timesig.C44" "6" "4")
  \time 4/4
  c4 d e f
  \set Score.measureLength = #(ly:make-moment 6 4)
  g f e f e d 
  \unset Score.measureLength
  c d e f
}


Edit: mir ist gerade eingefallen, wie man noch mehr Tipparbeit sparen kann, nämlich den stencil auf ##f setzen und nur per \once \override einmalig zu setzen, wenn man ihn braucht:\relative c' {
  \override Staff.TimeSignature.stencil = ##f
  \once \override Staff.TimeSignature.stencil = #(num-double-time-signature "4" "4" "6" "4")     
  \time 4/4
  c4 d e f
  \time 6/4
  g f e f e d
  \time 4/4
  c d e d
  \once \override Staff.TimeSignature.stencil = #(glyph-double-time-signature "timesig.C44" "6" "4")
  \time 4/4
  c4 d e f
  \time 6/4
  g f e f e d
  \time 4/4
  c d e f
}

stefanhuglfing

ZitatEs hilft oft, sich anzuschauen, was der Code so ungefähr tut; auch ohne tiefere Scheme-Kenntnisse (die ich auch nicht habe) kann man ihn verstehen und was dran ändern.

tatsächlich! Ich sollte mutiger sein.
Danke

harm6

Hallo,

ich habe mich mal bemüht die beiden LSR-snippets zu vereinen und noch ein paar zusätzliche features einzubauen. :)

Es ist jetzt möglich einfach
  \customTimeSig 4/4 6/4
oder
  \customTimeSig "C22" 6/4
zu schreiben.

Diverse Kommentare im Code.
Falls etwas unklar sein sollte oder ich irgendwas übersehen habe, meldet euch.

\version "2.18.0"

#(define-public (fraction-or-string? x)
  (or
    (and (pair? x)
         (index? (car x)) (index? (cdr x)))
    (string? x)))
   
#(define (single-time-sig ls arg)
;; Returns a markup to use as a single new TimeSignature.
;; Supported are fractions and strings for use with \musicglyph.
;; If fraction is printed, it's possible to customize baseline-skip and
;; font-size values taken from 'ls', which should have length 2.
;; If ls-length doesn't fit, a warning appears and an empty markup will be
;; returned.
(cond ((< (length ls) 2)
        (begin
          (ly:warning "List ~a is too short, returning empty-markup" ls)
          empty-markup))
       ;; better be paranoid
       ((not (fraction-or-string? arg))
        (begin
          (ly:warning  "~a is neither fraction nor string, ignoring" arg)
          empty-markup))
       ((fraction? arg)
         #{
            \markup
              \vcenter
              \number
              \override #`(baseline-skip . ,(car ls))
              \override #`(font-size . ,(cadr ls))
              \center-column { 
                 #(number->string (car arg))
                 #(number->string (cdr arg))
              }
         #})
       ((string? arg)
        #{ \markup \musicglyph #(format "timesig.~a" arg) #})
       ;; better be paranoid
       (else empty-markup)
        ))
     
customTimeSig =
#(define-music-function (parser location baseline-fontsize sig-1 sig-2 )
    ((number-list? '(0 0)) fraction-or-string? fraction-or-string?)
"
Returns a double @code{TimeSignature}.
Fractions or Symbols are possible output.
If Symbols are wanted "\"timesig."\" has to be omitted.
@code{font-size} and @code{baseline-skip} are customizeable using the optional
@var{baselne-fontsize}-argument
@var{baselne-fontsize} has to be a list of length 2
For changing font-size of a TimeSig-Symbol an additional external override
should be applied.
"
#{
  \once \override Staff.TimeSignature.stencil =
    #(lambda (grob)
       (grob-interpret-markup grob
         #{
           \markup
             \line {
                   #(single-time-sig baseline-fontsize sig-1)
                   #(single-time-sig baseline-fontsize sig-2)
             }
         #}))
#})

%%%%%%%%%%%%%%%%%%%%%
% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%

%% paper-, header-, layout-settings for nicer output
ly-version =
  #(string-append "Engraved by LILYPOND, Version " (lilypond-version))

compiling-time =
  #(string-append
    "compiled at "
    (strftime "%Y-%m-%d %H:%M:%S" (localtime (current-time))))
   
\paper {
  indent = 0
  markup-system-spacing #'padding = #6
  top-markup-spacing #'padding = #4
  oddHeaderMarkup =
    \markup \fontsize #-2 \fill-line { \ly-version \compiling-time }
}

\header {
  title = "Customizing Double TimeSignatures"
}

\layout {
  \context {
    \Score
    \override RehearsalMark.self-alignment-X = #LEFT
    \override RehearsalMark.font-series = #'bold
    \override RehearsalMark.font-size = -2
    \override RehearsalMark.padding = 3
    \override RehearsalMark.break-align-symbols = #'(left-edge)
    \override BarNumber.stencil = ##f
  }
  \context {
   \Score
   \override TimeSignature.break-visibility = ##(#f #t #t)
  }
}

%little helper:
printTS =
  \once \override Staff.TimeSignature.stencil = #ly:time-signature::print

%% The music
m-four =
  \relative c' {
    \time 4/4
    c4 d e f
  }

m-six =
  \relative c' {
    \time 6/4
    c4 d e f e d
    \break
  }

m = { \m-four \m-six }

%% The example
\new Staff \with { \override TimeSignature.stencil = ##f }
  \relative c' { 
    \mark "default"
    \printTS \m-four
    \printTS \m-six
   
    \mark "customTimeSig using fractions"
    \customTimeSig 4/4 6/4
    \m
   
    \mark "customTimeSig using fraction and glyph"
    \customTimeSig "C22" 6/4
    \m
   
    \mark "customTimeSig using fraction, glyph and other font-name"
    \once \override Staff.TimeSignature.font-name = "Verdana"
    \customTimeSig "C22" 6/4
    \m
   
    \mark "using fraction, glyph and other font-name, customizing font-size"
    \once \override Staff.TimeSignature.font-name = "Verdana"
    \customTimeSig #'(0 2) 6/4 "C22"
    \m
   
    \mark "using fraction, glyph and other font-name, customizing baseline-skip"
    \once \override Staff.TimeSignature.font-name = "ComicSans MS"
    \customTimeSig #'(2.2 0) 6/4 "C22"
    \m
   
    \mark "time-sigs for ancient music"
    \customTimeSig "neomensural22" "neomensural64"
    \m
   
    \mark "default again"
    \revert Staff.TimeSignature.stencil
    \m
  }


HTH,
  Harm