Autor Thema: zwei Taktangaben am Lied-Anfang möglich?  (Gelesen 1476 mal)

stefanhuglfing

  • Gast
zwei Taktangaben am Lied-Anfang möglich?
« am: Sonntag, 29. Dezember 2013, 18:39 »
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?
« Letzte Änderung: Montag, 30. Dezember 2013, 10:41 von stefanhuglfing »

fugenkomponist

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #1 am: Sonntag, 29. Dezember 2013, 21:50 »
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

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #2 am: Montag, 30. Dezember 2013, 08:59 »
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

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #3 am: Montag, 30. Dezember 2013, 10:13 »
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.
« Letzte Änderung: Montag, 30. Dezember 2013, 10:18 von fugenkomponist »

fugenkomponist

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #4 am: Montag, 30. Dezember 2013, 10:34 »
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
}
« Letzte Änderung: Montag, 30. Dezember 2013, 10:45 von fugenkomponist »

stefanhuglfing

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #5 am: Montag, 30. Dezember 2013, 10:40 »
Zitat
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.

tatsächlich! Ich sollte mutiger sein.
Danke

harm6

  • Gast
Re: zwei Taktangaben am Lied-Anfang möglich?
« Antwort #6 am: Montag, 30. Dezember 2013, 18:39 »
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