bug-lilypond
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Issue 687 in lilypond: Enhancement: inequal MIDI quantization of equ


From: lilypond
Subject: Re: Issue 687 in lilypond: Enhancement: inequal MIDI quantization of equal durations (swing, rubato)
Date: Wed, 21 Jul 2010 20:55:12 +0000


Comment #12 on issue 687 by arvidgr: Enhancement: inequal MIDI quantization of equal durations (swing, rubato)
http://code.google.com/p/lilypond/issues/detail?id=687

This is perhaps a silly idea, but should we really limit this to MIDI?

Personally, I'd like a 2:1 swing { c8 c8 } to be printed, as well as performed, as { c8*4/3 c8*2/3 }. If I have a triplet in a different voice (again assuming 2:1 swing), that means I'd want the second swing eight aligned vertically with the third note of the triplet.

(I don't really know if this is usual practice or not. As far as I could look up, Read doesn't mention this at all. But in my opinion, it would make quite a bit of sense.)

This is an implementation strategy that should be feasible to do in Scheme. (Doing this manually, with 8*4/3 and 8*2/3 (and 4.*10/9 and...) all over the place, is certainly possible in Lilypond input. And equally certainly tedious.)

Of course, anyone wanting swing in MIDI only could have different score blocks for printed and MIDI output, doing

  \swing #2 #1 \themusic % or whatever

...only on the MIDI part.

To re-iterate, I'm proposing a music-function (swing a b sequential-music) (integer? integer? ly:music?), possibly based on a more generic framework, where:

  \swing #2 #1 { c4. c8 c8 c8 }

gives the same as the following input:

  { c4.*10/9 c8*2/3 c8*4/3 c8*2/3 }

A possible more generic interface could be something like this:

  (define-music-function (unequal duration weight-list sequential-music)
     (ly:duration? list? ly:music?)
     [...]

Anyway, this approach does not touch MIDI at all. It all happens very long before the music touches the C++ MIDI code. It should even be possible to implement this as a preprocessor to Lilypond. In Perl. Stupid, but possible.

So is there any reason this can't be done in Scheme?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]