Subject: ly:make-duration

From: Jacques Menu <[email-masked]>
Date: Wed, 5 Apr 2023 12:13:23 +0200

Bonjour,

Cette fonction apparaît 3 fois dans le LPNR 2.24.1, mais avec un nombre d’arguments variable :

(ly:make-duration 3 0)
(ly:make-duration 2 0)
breveTP = #(ly:make-duration -1 0 3/2)

Cela mériterait une présentation de la signification des arguments dans ce manuel, quid?

Je suis tombé là-dessus parce qu’xml2ly génère actuellement ça :

  \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "8") :

qui ne passe plus en 2.25, avec un message d’erreur sur le :calc-denominator-text "8") :

erreur fatale : make-note-markup : Argument invalide à la position 1.
duration requis, trouvé "8".

On trouve bien sûr ly:make-duration dans les Internals, et elle prend en fait jusqu’à 4 arguments :

ly:make-duration length dotcount num den

Make a duration. length is the negative logarithm (base 2) of the duration: 1 is a half note, 2 is a quarter note, 3 is an eighth note, etc. 
The number of dots after the note is given by the optional argument dotcount.

The duration factor is optionally given by integers num and den, alternatively by a single rational number.
A duration is a musical duration, i.e., a length of time described by a power of two (whole, half, quarter, etc.) and a number of augmentation dots.

JM

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 05 Apr 2023 14:13:52 +0200

> Cela mériterait une présentation de la signification des arguments dans ce manuel, quid?

Ou bien juste une simplification, cela peut aussi s'écrire

```
breveTP = \breve*3/2
```

> duration requis, trouvé "8".

Oui, cela fait un certain temps (version 2.21.0) que la commande `\markup \note` prend une durée au lieu d'une chaîne de caractères, ce qui se répercute indirectement sur tuplet-number::append-note-wrapper. La syntaxe actuelle est

```
  \once \override TupletNumber.text =
    #(tuplet-number::append-note-wrapper
      tuplet-number::calc-denominator-text
      #{ 8 #})
```

Tu peux aussi remplacer le `#{ 8 #}` par `(ly:make-duration 3)`, même si personnellement je trouve ça moins clair. J'utilise surtout `ly:make-duration` quand les paramètres ne sont pas déterminés à l'avance.

Cordialement,

Jean