[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Complex time signature
From: |
Arle Lommel |
Subject: |
Re: Complex time signature |
Date: |
Fri, 14 Jan 2011 13:18:31 -0500 |
Hi Hans,
Both formats are used. It's really a matter of which tradition you are working
in. For Hungarian stuff this is the normal representation:
I'm guessing in Bulgaria the other notation is the norm (although I don't work
with it so I don't know)
Here's a tiny example (just about as tiny as I can make with Reinhold's
materials integrated anyway). I've updated it to work with 2.13.38-1 (the
version I have installed at the moment), which *greatly* improved the beaming
control over versions before 2.13.30. It returns some errors related to
Reinhold's script ("warning: cannot find property type-check for `beatLength'
(translation-type?). perhaps a typing error?") but it works anyway.
I think it would be ideal if Reinhold’s functions could be integrated into the
core of Lilypond, as they provide a really excellent way of getting either type
of result.
EXAMPLE:
\version "2.13.38"
\header {
title = "Táncolj kecske! (Dance, Goat, Dance!)"
composer = "Trad. Moldavian
(Magyar Dudazenekar)"
}
% Compound time signature display taken from
% http://www.fam.tuwien.ac.at/~reinhold/temp/time_sigs.ly
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Beat Grouping
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% #(define-public (calculate-compound-base-beat-full time-sig)
% (let* ((den (map last time-sig)))
% (apply max den)))
% #(define-public (calculate-compound-beat-grouping time-sig beat)
% (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))))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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))
; (beatGrouping (calculate-compound-beat-grouping args beat))
)
; (display "Time signature: ")(display args)(newline)
; (display "beat grouping: ")(display beatGrouping)(newline)
#{
\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!!!
#} ))
\relative c'' {
<<
\new Staff {
\clef treble
\key a \mixolydian
\compoundMeter #'((3 3 4 16))
\time 10/16
\set beatStructure = #'(3 3 4)
a16^"A" b16 a16 cis8 a16 cis8 a16 b16 |
fis'8. \acciaccatura a,8 fis'8. \acciaccatura a8 e4 |
e16. fis16. e16. d16. cis8 a8 |
b8. \acciaccatura a8 b8 a16 cis4 |
}
>>
}
On Jan 14, 2011, at 12:51 , Hans Aberg wrote:
> On 14 Jan 2011, at 18:28, Arle Lommel wrote:
>
>> Even if that is perfect for your needs, you might want to take a look at
>> Reinhold’s code anyway. It provides the proper Bartókian output (3+3+2/8),
>> while the LSR code can only produce 3/8 + 3/8 + 2/8 type output. I prefer
>> the former as cleaner and easier to read.
>
> I have another Bartok example
> 4+2+3
> 8
> However, the LSR Sedi Donka meter <http://lsr.dsi.unimi.it/LSR/Item?id=192>
> is in a Bulgarian book written as
> 7+7+11
> 8 8 8
> with the '+' centered of course.
>
>
- Complex time signature, Ralph Palmer, 2011/01/14
- Re: Complex time signature, Arle Lommel, 2011/01/14
- Re:Complex time signature, Arle Lommel, 2011/01/14
- Re: Complex time signature, Reinhold Kainhofer, 2011/01/14
- Re: Complex time signature, Reinhold Kainhofer, 2011/01/14
- Re: Complex time signature, Patrick Horgan, 2011/01/15
Re: Complex time signature, Arle Lommel, 2011/01/14