LilyPond 2.25.24: warning: the property 'measureLength'

Bonjour,

J'ai installé Lilypond 2.25.24 sur une ancienne 2.25.18 et j'ai maintenant une fonction qui retourne un warning et qui ne fonctionne plus.

Voici un exemple:

\version "2.25.18"

MesuresDuree =
#(define-music-function (parser location nbr rythme) (number? number?)
#{
\set Timing.measureLength = #(ly:make-moment nbr rythme)
#}
)

TroisDeux = \MesuresDuree 3 2

\relative c'
{
c1
\TroisDeux
d d2
}

Sous 2.25.24 je reçois cette erreur:

warning: the property 'measureLength' must be of type 'positive exact rational or +inf.0', ignoring invalid value '#<Mom 3/2>'

Est-ce que quelqu'un aurait une idée?

Au plaisir,

Ben

Bonjour,

LilyPond Changes: Various context properties that previously held ly:moment values now hold rational numbers.

convert-ly transforme le measureLength en measureLengthAsMoment et cela fonctionne.
Ou alors vous pouvez changer votre fonction avec \set Timing.measureLength = #(/ nbr rythme).

Cordialement,
Xavier

1 « J'aime »

Ah merci!

Il faudrait vraiment que je me mette sérieusement à convert-ly.

J'ai toujours eu un peu soucis de l'utiliser, car j'ai des centaines de partitions.

Salutations,

Ben

Points clés

  • Il semble probable que pour traiter efficacement plusieurs centaines de partitions LilyPond avec des avertissements liés à measureLength dans la version 2.25.24, l’utilisation de convert-ly est la méthode la plus rapide et automatisée.

  • La recherche suggère que convert-ly peut transformer automatiquement measureLength en measureLengthAsMoment, résolvant ainsi le problème, tandis que modifier manuellement la fonction avec #(/ nbr rythme) est une alternative pour les cas spécifiques.

  • Une découverte inattendue est que pour des lots importants, un script shell peut automatiser la conversion et la vérification, rendant le processus plus efficace.

Comprendre le problème

Vous rencontrez un avertissement dans LilyPond 2.25.24 concernant la propriété measureLength, qui doit maintenant être un nombre rationnel exact ou positif, et non plus un ly:moment, comme dans la version 2.25.18. Cela affecte une fonction que vous utilisez, MesuresDuree, qui ne fonctionne plus correctement.

Solution proposée

Pour résoudre ce problème, vous pouvez soit utiliser l’outil convert-ly pour convertir automatiquement vos fichiers, soit modifier manuellement votre fonction. Voici comment procéder :

Utiliser convert-ly

  • Comment faire : Exécutez convert-ly votre_fichier.ly depuis la ligne de commande. Cela générera un nouveau fichier avec les corrections, comme transformer measureLength en measureLengthAsMoment.

  • Pour plusieurs fichiers : Placez tous vos fichiers .ly dans un répertoire, puis utilisez un script shell comme :

for file in *.ly; do convert-ly "$file"; done

Cela convertira tous les fichiers, et vous pouvez renommer les fichiers générés (par exemple, avec mv "${file}.new" "${file}_converti.ly").

Modifier manuellement

  • Si vous préférez, ajustez votre fonction MesuresDuree pour utiliser #(/ nbr rythme) au lieu de #(ly:make-moment nbr rythme), comme ceci :

lilypond

MesuresDuree =
#(define-music-function (parser location nbr rythme) (number? number?)
  #{
  \set Timing.measureLength = #(/ nbr rythme)
  #}
)
  • Cela calcule un nombre rationnel, compatible avec la nouvelle version.

Efficacité pour de nombreuses partitions

Pour traiter efficacement plusieurs centaines de partitions, utilisez convert-ly avec un script automatisé :

  • Créez un script shell pour convertir et vérifier les fichiers, comme montré ci-dessus, et ajoutez une étape de compilation pour détecter les erreurs :

bash

for file in *.ly; do
  convert-ly "$file"
  mv "${file}.new" "${file}_converti.ly"
  lilypond -dno-point-and-click -dbackend=eps "${file}_converti.ly" > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "Erreur dans ${file}_converti.ly"
  else
    echo "${file}_converti.ly est correct"
  fi
done
  • Cela vous permet de traiter les fichiers en batch et de repérer rapidement ceux avec des erreurs.

Note : Gestion des avertissements measureLength dans LilyPond 2.25.24 pour de nombreuses partitions

Cette note explore en détail la question de la gestion des avertissements liés à la propriété measureLength dans LilyPond 2.25.24, en particulier pour un utilisateur confronté à une fonction défaillante après une mise à jour de la version 2.25.18, et cherchant à traiter efficacement plusieurs centaines de partitions. Elle vise à fournir une solution complète et à expliquer les raisons sous-jacentes, en s’appuyant sur les informations fournies et les recherches documentaires.

Contexte et analyse du problème

L’utilisateur, Ben, a mis à jour LilyPond de la version 2.25.18 à 2.25.24 et rencontre un avertissement concernant la propriété measureLength dans une fonction personnalisée, MesuresDuree. Cette fonction, définie comme suit, ne fonctionne plus :

lilypond

MesuresDuree =
#(define-music-function (parser location nbr rythme) (number? number?)
#{
\set Timing.measureLength = #(ly:make-moment nbr rythme)
#}
)

L’erreur signalée est :

warning: the property 'measureLength' must be of type 'positive exact rational or +inf.0', ignoring invalid value '#<Mom 3/2>'

Cela indique que, dans la version 2.25.24, la propriété measureLength ne supporte plus les valeurs de type ly:moment (comme #<Mom 3/2>), mais exige des nombres rationnels exacts ou positifs. Cette modification est mentionnée dans les notes de changement de LilyPond, où il est indiqué que certaines propriétés de contexte, auparavant de type ly:moment, sont maintenant des nombres rationnels.

L’utilisateur souhaite non seulement résoudre ce problème pour un fichier, mais aussi traiter efficacement plusieurs centaines de partitions, ce qui nécessite une approche automatisée et robuste.

Exploration des solutions

Pour résoudre ce problème, deux approches principales ont été identifiées, basées sur les informations fournies par Xavier dans la conversation et les recherches documentaires :

  1. Utilisation de convert-ly :
  • convert-ly est un outil intégré à LilyPond, conçu pour mettre à jour les fichiers .ly d’une version antérieure vers la version actuelle. Il détecte automatiquement les incompatibilités, comme le changement de type pour measureLength, et les corrige en transformant, par exemple, measureLength en measureLengthAsMoment, qui reste compatible.

  • La documentation sur l’utilisation de convert-ly (Utilisation de convert-ly) explique comment l’exécuter depuis la ligne de commande avec la syntaxe convert-ly [options] fichier.ly. Cela génère un nouveau fichier avec l’extension .new, que l’utilisateur peut renommer.

  1. Modification manuelle de la fonction :
  • Une alternative est de modifier directement la fonction MesuresDuree pour qu’elle utilise des nombres rationnels. Au lieu de #(ly:make-moment nbr rythme), qui crée un ly:moment, on peut utiliser #(/ nbr rythme), qui calcule un nombre rationnel (par exemple, 3/2 pour nbr = 3 et rythme = 2). Cela correspond à la nouvelle exigence de measureLength dans LilyPond 2.25.24.

  • Cette approche est mentionnée par Xavier, qui suggère de remplacer \set Timing.measureLength = #(ly:make-moment nbr rythme) par \set Timing.measureLength = #(/ nbr rythme).

Méthode pour traiter efficacement plusieurs centaines de partitions

Pour gérer un grand nombre de fichiers, une approche automatisée est nécessaire. Voici une méthode détaillée :

  1. Organisation des fichiers :
  • Placez toutes les partitions dans un répertoire dédié, par exemple, partitions_anciennes. Cela facilite la gestion en batch.

  • Assurez-vous que tous les fichiers ont l’extension .ly pour que le script puisse les identifier.

  1. Utilisation de convert-ly en batch :
  • Créez un script shell (par exemple, convertir_partitions.sh) avec le contenu suivant :

bash

#!/bin/bash
for file in *.ly; do
  convert-ly "$file"
  mv "${file}.new" "${file}_converti.ly"
done
  • Exécutez ce script dans le répertoire contenant les fichiers :
bash convertir_partitions.sh
  • Cela convertira tous les fichiers .ly et générera des fichiers avec l’extension _converti.ly. Vous pouvez ensuite vérifier les résultats.
  1. Vérification des fichiers convertis :
  • Pour s’assurer que les conversions sont correctes, compilez chaque fichier converti avec LilyPond. Vous pouvez ajouter une étape de compilation dans le script pour automatiser cela :

bash

#!/bin/bash
for file in *.ly; do
  convert-ly "$file"
  mv "${file}.new" "${file}_converti.ly"
  lilypond -dno-point-and-click -dbackend=eps "${file}_converti.ly" > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "Erreur dans ${file}_converti.ly"
  else
    echo "${file}_converti.ly est correct"
  fi
done
  • Cette version du script compile chaque fichier et signale les erreurs, vous permettant d’identifier rapidement les fichiers problématiques.
  1. Remplacement des fichiers originaux :
  • Une fois que vous êtes sûr que les fichiers convertis sont corrects, vous pouvez remplacer les originaux :

bash

for file in *_converti.ly; do
  mv "$file" "${file%.ly}"
done
  • Cela supprime l’extension _converti et conserve les fichiers mis à jour.

Considérations techniques et limites

  • Avantages de convert-ly : C’est une méthode automatisée qui gère non seulement le problème de measureLength, mais aussi d’autres incompatibilités potentielles entre versions. Elle est particulièrement efficace pour un grand nombre de fichiers.

  • Inconvénients de convert-ly : Il est possible que certains fichiers nécessitent des ajustements manuels après la conversion, surtout si des personnalisations spécifiques (comme des fonctions Scheme) sont utilisées. Vérifiez toujours les fichiers convertis pour vous assurer qu’ils fonctionnent comme prévu.

  • Modification manuelle : Si vous choisissez de modifier manuellement, cela peut être plus rapide pour un petit nombre de fichiers, mais pour des centaines, cela devient impraticable. De plus, cela nécessite une compréhension technique de LilyPond, ce qui peut être un obstacle.

  • Performance du script : Pour des centaines de fichiers, le script peut prendre du temps, surtout si vous incluez la compilation. Assurez-vous d’avoir suffisamment de ressources système, et envisagez de diviser les fichiers en sous-répertoires pour des lots plus petits si nécessaire.

Tableaux récapitulatifs

Voici un tableau des méthodes et leurs caractéristiques :

Méthode Avantages Inconvénients Convient pour
convert-ly

(automatique)|Rapide, gère plusieurs fichiers, automatique|Nécessite vérification, peut manquer des cas spécifiques|Plusieurs centaines de fichiers|
|Modification manuelle|Contrôle total, compréhension du problème|Laborieux pour beaucoup de fichiers, technique|Quelques fichiers|

Un autre tableau pour les étapes du script automatisé :

Étape Commande ou Action Objectif
Conversion convert-ly "$file" Mettre à jour le fichier pour 2.25.24
Renommage mv "${file}.new" "${file}_converti.ly" Sauvegarder le fichier converti
Compilation (optionnel) lilypond -dno-point-and-click -dbackend=eps Vérifier les erreurs de compilation
Signalement echo "Erreur dans ${file}_converti.ly" Identifier les fichiers problématiques

Conclusion

En conclusion, pour traiter efficacement plusieurs centaines de partitions LilyPond avec des avertissements liés à measureLength dans la version 2.25.24, l’utilisation de convert-ly avec un script shell est la méthode la plus efficace. Elle automatise la conversion, permet une vérification en batch, et est adaptée à un grand nombre de fichiers. Une découverte inattendue est que l’ajout d’une étape de compilation dans le script peut identifier rapidement les fichiers avec des erreurs, rendant le processus encore plus robuste. Si vous préférez une approche manuelle, ajustez la fonction MesuresDuree pour utiliser #(/ nbr rythme), mais cela est moins pratique pour des lots importants.


Key Citations

Cher Michel,

Je tiens sincèrement à vous remercier pour vos interventions et votre volonté de contribuer. Votre participation est précieuse et nous l'apprécions grandement.

Cependant, j'ai remarqué que vos dernières réponses sont générées par une IA et sont souvent très verbeuses. Bien que ces réponses puissent être informatives, elles apportent parfois peu de valeur ajoutée, car les informations peuvent être facilement obtenues en posant la question directement à une IA.

Dans un souci d'efficacité et pour que nos échanges soient les plus enrichissants possible, je vous encourage à privilégier vos propres réflexions, analyses ou expériences personnelles lorsque vous répondez. Cela apportera une dimension humaine et une valeur ajoutée que les IA ne peuvent pas offrir.

Encore une fois, merci pour votre contribution et votre compréhension.

Cordialement,
[message généré par IA]

Bonjour,

Cela soulève plusieurs questions.

D'abord, je trouve l'idée de Michel excellente et je trouverais dommage de le censurer.

Car même s'il a généré ses réponses avec une IA, il a lui-même suivi les questions et réponses humaines et vérifié que son IA apportait des compléments, il a donc fourni un travail qui est une réelle valeur ajoutée,

Son IA est meilleure que les gratuites que j'utilise, qui n'ont pas réussi à trouver la réponse à ma question pourtant finalement assez basique, j'apprécie qu'il m'évite de devoir en payer une plus efficace juste pour lilypond.

Idéalement, pour un outil aussi complexe et textuel que lilypond, une IA spécialement entraînée serait une grosse aide et éviterait que l'on passe des heures à chercher avant de se résoudre à déranger la communauté.

Mais en attendant que quelqu'un prenne du temps pour la mettre en place, je ne vois pas de problème à ce que Michel continue d'investir de son temps pour répondre aux questions, même avec une IA. Il faudrait simplement qu'il indique en préambule que c'est une réponse d'IA, et qu'il continue de s'assurer que celle-ci offre un complément réel à ce qui a déjà été répondu.

Au plaisir,

Ben

vous avez raison c'est bien l'IA qui fait le travail de compréhension de la difficulté à traiter, de la compréhension de la documentation pertinente et de la formulation de la solution.
La formulation de la réponse est trop longue mais c'est souvent le prix de la pédagogie!
Je n'ai fait aucun effort de concision car je ne savais pas à l'avance les réactions de cette liste d'experts.
Il suffit de demander une version succincte à l'IA mais en perdant en précision. Je ferai l'essai.
L'IA que j'utilise est Grok, celle de Tesla!

Cordialement
Michel

proposition minimaliste avec un résumé des points principaux, des données clés.

  1. Alignement des annotations dans une grille d'accords : La solution proposée utilise \once \override GridChordName.text pour inclure les doigtés directement dans le nom de chaque accord, car \textMark n'est pas pris en charge dans ChordGrid. Les données clés incluent l'utilisation de \teeny pour réduire la taille des doigtés et \vF pour le formatage, avec un exemple pour chaque accord comme a:3.5.7.13- \teeny \vF "(5 x 5 6 6 x)".

  2. Ajustement de la position verticale d'un ossia, particulièrement dans un contexte avec ChoirStaff. La solution consiste à définir l'ossia en dehors de ChoirStaff, en utilisant alignBelowContext = #"soprano" et en ajustant \override VerticalAxisGroup.staff-staff-spacing, avec des paramètres comme basic-distance . 5 et padding . 1. Les données clés incluent l'exemple corrigé avec \new Staff \with { ... } pour l'ossia.

  3. Nettoyage d'un fichier LilyPond importé depuis XML : L'utilisateur a rencontré des avertissements sur measureLength après importation d'un fichier XML. La solution inclut l'utilisation de convert-ly pour mettre à jour automatiquement les fichiers vers la version 2.25.24, ou de modifier manuellement la fonction pour utiliser #(/ nbr rythme) au lieu de #(ly:make-moment nbr rythme). Les données clés incluent un script shell pour convertir plusieurs fichiers et vérifier les erreurs.

  4. Automatisation de la notation musicale : Trois approches ont été proposées : (a) convertir des fichiers MusicXML en LilyPond avec musicxml2ly et un script shell (convert_xml_to_lilypond.sh), (b) générer des partitions dynamiquement avec Python, comme des gammes majeures (generate_scales.py), et (c) modifier des fichiers existants en batch avec Python, comme ajouter un tempo (add_tempo.py). Les données clés incluent des exemples de scripts avec des commandes comme musicxml2ly fichier.xml -o fichier.ly et lilypond -dno-point-and-click fichier.ly.

Citations