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 :
- 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.
- 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 :
- 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.
- 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.
- 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.
- 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