[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Metronome marks
From: |
Neil Puttock |
Subject: |
Re: Metronome marks |
Date: |
Mon, 14 Apr 2008 22:42:40 +0100 |
Hi Alexander,
On 11/04/2008, Alexander Kobel <address@hidden> wrote:
> I think there's another drawback of the snippet.
> I had a very similar problem, trying to add marks like "Moderato (* =
> 63)", yet using rehearsal marks at the same time for sectioning the piece.
> Problem is, Lily can't handle two RehearsalMark events on the same beat
> (don't know whether there's a workaround), so I wanted to use
> MetronomeMarks. Here's my snippet to do so; I suspect it should be
> fairly straightforward to modify to mimic the rhythmMark behaviour.
I hope you don't mind, but I've added your snippet to the LSR as
"Adding a text indication to metronome marks". Unfortunately, it
doesn't work under 2.10, so it's waiting for LSR to move to 2.11 (and
the nod from Valentin to approve it).
> Of course it would be nice if the \tempo command would be run directly
> in \tempoChangeMarkup; however I'm running into type problems here.
> Is it possible to convert string->duration via Scheme? Else I always had
> to type
> \tempoChangeMarkup #"foo" #(make-duration 4) #"120"
> or am I wrong there?
There's a function in define-markup-commands.scm called
parse-simple-duration which will convert a duration string to a list.
You can then just use ly:make-duration to turn the list elements into
a duration:
#(use-modules (ice-9 regex))
#(define (parse-simple-duration duration-string)
"Parse the `duration-string', e.g. ''4..'' or ''breve.'', and return
a (log dots) list."
(let ((match (regexp-exec (make-regexp
"(breve|longa|maxima|[0-9]+)(\\.*)") duration-string)))
(if (and match (string=? duration-string (match:substring match 0)))
(let ((len (match:substring match 1))
(dots (match:substring match 2)))
(list (cond ((string=? len "breve") -1)
((string=? len "longa") -2)
((string=? len "maxima") -3)
(else (log2 (string->number len))))
(if dots (string-length dots) 0)))
(ly:error (_ "not a valid duration string: ~a") duration-string))))
#(define (string-to-duration duration)
(let ((parsed (parse-simple-duration duration)))
(ly:make-duration (car parsed) (cadr parsed)))
)
I think the main problem is how to set tempoWholesPerMinute, unless
you're not bothered about MIDI output.
Regards,
Neil
- Re: Snippet 204 for 2.11 (was Metronome marks), (continued)
- Re: Metronome marks, Alexander Kobel, 2008/04/11
- Re: Metronome marks, Risto Vääräniemi, 2008/04/12
- Re: Metronome marks, Werner LEMBERG, 2008/04/12
- Re: Metronome marks, Alexander Kobel, 2008/04/12
- Re: Metronome marks, Neil Puttock, 2008/04/14
- Re: Metronome marks, Risto Vääräniemi, 2008/04/15
- Re: Metronome marks,
Neil Puttock <=
- Re: Metronome marks, Graham Percival, 2008/04/14
- Re: Metronome marks, Neil Puttock, 2008/04/15
Re: Metronome marks, Ole Schmidt, 2008/04/09