%% Generated by lilypond-book.py %% Options: [alt=[image of music],printfilename,indent=0\mm,texidoc,line-width=160\mm] \include "lilypond-book-preamble.ly" % **************************************************************** % Start cut-&-pastable-section % **************************************************************** \paper { #(define dump-extents #t) indent = 0\mm line-width = 160\mm force-assignment = #"" line-width = #(- line-width (* mm 3.000000)) } \layout { } % **************************************************************** % ly snippet: % **************************************************************** \sourcefilename "out-www/11f-TimeSignatures-SymbolMeaning.ly" \sourcefileline 0 \version "2.12.2" % automatically converted from /home/lilydev/vc/gub/target/linux-x86/src/lilypond-localhost--home-lilydev-vc-lilypond-master/input/regression/musicxml/11f-TimeSignatures-SymbolMeaning.xml %% additional definitions required by the score: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Formatting of (possibly complex) compound time signatures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #(define-public (insert-markups l m) (let* ((ll (reverse l))) (let join-markups ((markups (list (car ll))) (remaining (cdr ll))) (if (pair? remaining) (join-markups (cons (car remaining) (cons m markups)) (cdr remaining)) markups)))) % Use a centered-column inside a left-column, because the centered column % moves its reference point to the center, which the left-column undoes. % The center-column also aligns its contented centered, which is not undone... #(define-public (format-time-fraction time-sig-fraction) (let* ((revargs (reverse (map number->string time-sig-fraction))) (den (car revargs)) (nums (reverse (cdr revargs)))) (make-override-markup '(baseline-skip . 0) (make-number-markup (make-left-column-markup (list (make-center-column-markup (list (make-line-markup (insert-markups nums "+")) den)))))))) #(define-public (format-complex-compound-time time-sig) (let* ((sigs (map format-time-fraction time-sig))) (make-override-markup '(baseline-skip . 0) (make-number-markup (make-line-markup (insert-markups sigs (make-vcenter-markup "+"))))))) #(define-public (format-compound-time time-sig) (cond ((not (pair? time-sig)) (null-markup)) ((pair? (car time-sig)) (format-complex-compound-time time-sig)) (else (format-time-fraction time-sig)))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Measure length calculation of (possibly complex) compound time signatures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #(define-public (calculate-time-fraction time-sig-fraction) (let* ((revargs (reverse time-sig-fraction)) (den (car revargs)) (nums (cdr revargs))) (ly:make-moment (apply + nums) den))) #(define-public (calculate-complex-compound-time time-sig) (let* ((sigs (map calculate-time-fraction time-sig))) (let add-moment ((moment ZERO-MOMENT) (remaining sigs)) (if (pair? remaining) (add-moment (ly:moment-add moment (car remaining)) (cdr remaining)) moment)))) #(define-public (calculate-compound-measure-length time-sig) (cond ((not (pair? time-sig)) (ly:make-moment 4 4)) ((pair? (car time-sig)) (calculate-complex-compound-time time-sig)) (else (calculate-time-fraction time-sig)))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Base beat lenth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #(define-public (calculate-compound-base-beat-full time-sig) (let* ((den (map last time-sig))) (apply max den))) #(define-public (calculate-compound-base-beat time-sig) (ly:make-moment 1 (cond ((not (pair? time-sig)) 4) ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig)) (else (calculate-compound-base-beat-full (list time-sig)))))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The music function to set the complex time signature %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% compoundMeter = #(define-music-function (parser location args) (pair?) (let ((mlen (calculate-compound-measure-length args)) (beat (calculate-compound-base-beat args))) #{ \once \override Staff.TimeSignature #'stencil = #ly:text-interface::print \once \override Staff.TimeSignature #'text = #(format-compound-time $args) % \set Staff.beatGrouping = #(reverse (cdr (reverse $args))) \set Timing.measureLength = $mlen \set Timing.timeSignatureFraction = #(cons (ly:moment-main-numerator $mlen) (ly:moment-main-denominator $mlen)) \set Timing.beatLength = $beat % TODO: Implement beatGrouping and auto-beam-settings!!! #} )) \header { texidoc = "A time signature of 3/8 with the symbol=\"cut\" attribute and two symbol=\"single-number\" attributes with compound time signatures. Shall the symbol be ignored in this case?" } \layout { \context { \Score autoBeaming = ##f } } PartPOneVoiceOne = \relative b' { \clef "treble" \key c \major \time 3/8 b4. | % 2 \once \override Staff.TimeSignature #'style = #'single-digit \compoundMeter #'(3 2 8) b8 b2 | % 3 \once \override Staff.TimeSignature #'style = #'single-digit \compoundMeter #'((1 8) (2 4)) b8 b2 \bar "|." } % The score definition \new Staff << \context Staff << \context Voice = "PartPOneVoiceOne" { \PartPOneVoiceOne } >> >> % **************************************************************** % end ly snippet % ****************************************************************