Subject: Frescobaldi & CLI

From: [email-masked]
Date: Thu, 10 Nov 2022 13:56:06 +0100 (CET)

Bonjour,

En parcourant la documentation de Frescobaldi, je n'ai pas trouvé de moyen d'obtenir la‌ commande lilypond précise que Frescobaldi invoque pour graver (en publication) les partitions.
J'ai essayé la gravure via Frescobaldi, via lilypond en ligne de commande, et comparé binairement les 2 fichiers que j'obtiens. Ils sont très semblables mais pas totalement. J'en déduis que la commande invoquée n'est pas exactement identique.

Précisions: Frescobaldi a été configuré avec le même binaire lilypond que celui que j'utilise en CLI.

A priori pas de différence visuelle, mais j'ai besoin de générer des partitions en batch (multiples transpositions, multiples clefs), et j'ai peur de passer à côté de différences dues au fait que Frescobaldi n'utilise pas de commande lilypond standard.
Est-ce que ça pourrait être dû à l'implémentation de python-ly?

Si pas possible de faire converger exactement Frescobaldi et lilypond (donc d'obtenir la commande lancée par Frescobaldi lors de la gravure), est-ce qu'il existe un moyen de faire boucler la génération sur des \transpose et des \clef au sein d'un unique appel lilypond ?

La plupart des partitions sont des partitions de chœur, j'ai donc une \clef pour la portée "SA" et une \clef pour la portée "TB". Je veux faire jouer cette partition par divers instruments (flûte, clarinette/trompette, violon alto...)
=> j'ai besoin de sortir cette partition de chœur en tenant compte des spécificités de chacun de ces instruments et instrumentistes (oui, un.e flûtiste lit rarement couramment la clef de fa ;-) )

Pour info, les versions en question:
Lilypond:

	2.23.80
	Guile 2.2

Frescobaldi:

	Frescobaldi: 3.1.3
	Extension API: 0.9.0
	Python: 3.10.7
	python-ly: 0.9.7
	Qt: 5.15.6
	PyQt: 5.15.6
	sip: 6.1.0.dev2104271705
	poppler: 22.1.0
	python-poppler-qt: 21.3.0
	glibc2.35

p, li { white-space: pre-wrap; }

Merci pour votre aide!
Emmanuel

---

From: Bernard Barbier <[email-masked]>
Date: Thu, 10 Nov 2022 16:58:09 +0100

Bonjour,

Alors...

Est-ce qu'il n'y aurait pas une piste à explorer de ce côté ?

*$ llilypond --help *

**[snip]* *

*-d, --define-default=SYM[=VAL] affecte VAL (par défaut #t) à l'option 
Scheme SYM ; utiliser -dhelp pour avoir de l'aide.*****

**[snip]**

*utiliser -dhelp pour avoir de l'aide. $ lilypond -dhelp*

*[snip] *

*point-and-click (#t) Add point & click links to PDF and SVG output*

*[snip]*

Belle fin de journée à tous.

Bernard.

Le 10/11/2022 à 13:56, emmanuel.franquemagne--- via LilyPond 
French-speaking list a écrit :
> Bonjour,
>
> En parcourant la documentation de Frescobaldi, je n'ai pas trouvé de 
> moyen d'obtenir la‌ commande lilypond précise que Frescobaldi invoque 
> pour graver (en publication) les partitions.
> J'ai essayé la gravure via Frescobaldi, via lilypond en ligne de 
> commande, et comparé binairement les 2 fichiers que j'obtiens. Ils 
> sont très semblables mais pas totalement. J'en déduis que la commande 
> invoquée n'est pas exactement identique.
>
> A priori pas de différence visuelle, mais j'ai besoin de générer des 
> partitions en batch (multiples transpositions, multiples clefs), et 
> j'ai peur de passer à côté de différences dues au fait que Frescobaldi 
> n'utilise pas de commande lilypond standard.
> Si pas possible de faire converger exactement Frescobaldi et lilypond 
> (donc d'obtenir la commande lancée par Frescobaldi lors de la 
> gravure), est-ce qu'il existe un moyen de faire boucler la génération 
> sur des \transpose et des \clef au sein d'un unique appel lilypond ?
>
> La plupart des partitions sont des partitions de chœur, j'ai donc une 
> \clef pour la portée "SA" et une \clef pour la portée "TB". Je veux 
> faire jouer cette partition par divers instruments (flûte, 
> clarinette/trompette, violon alto...)
> => j'ai besoin de sortir cette partition de chœur en tenant compte des 
> spécificités de chacun de ces instruments et instrumentistes (oui, 
> un.e flûtiste lit rarement couramment la clef de fa ;-) )
>
>
>   * 2.23.80
>   * Guile 2.2
>   * Frescobaldi: 3.1.3
>   * Extension API: 0.9.0
>   * Python: 3.10.7
>   * python-ly: 0.9.7
>   * Qt: 5.15.6
>   * PyQt: 5.15.6
>   * sip: 6.1.0.dev2104271705
>   * poppler: 22.1.0
>   * python-poppler-qt: 21.3.0
>   * glibc2.35
>
>
> Merci pour votre aide!
> Emmanuel
>

---

From: Bernard Barbier <[email-masked]>
Date: Thu, 10 Nov 2022 17:05:52 +0100

Désolé...

Carrément hors sujet. En musique, ça s'appelle un canard !

Bernard.

Le 10/11/2022 à 16:58, Bernard Barbier a écrit :
>> j'ai peur de passer à côté de différences dues au fait que 
>> Frescobaldi n'utilise pas de commande lilypond standard.
>> => j'ai besoin de sortir cette partition de chœur en tenant compte 
>> des spécificités de chacun de ces instruments et instrumentistes 
>> (oui, un.e flûtiste lit rarement couramment la clef de fa ;-) )
>>
>>

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 11 Nov 2022 18:29:12 +0100

Bonjour,

Le 10/11/2022 13:56, emmanuel.franquemagne--- via LilyPond French-speaking
> pour graver (en publication) les partitions.

En choisissant l'item de menu « LilyPond / Graver (personnalisé) » ou le
raccourci « Ctrl+Shift+M », je vois comme ligne de commande :

  $lilypond -dpoint-and-click -ddelete-intermediate-files $include
    --pdf $filename

Cette ligne change selon certains choix cliquables dans cette fenêtre.

En espérant que cela puisse t'aider...

-- 
Olivier Miakinen

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 11 Nov 2022 21:06:36 +0100

Le 11/11/2022 20:53, [email-masked] m'a répondu (par
erreur en privé au lieu de sur la liste) :
> 
> Merci beaucoup pour cette réponse! Lorsque je fais CTRL-SHFT-M, je tombe
> bien sur la fenêtre en question, mais je ne  voix pas le détail de la
> commande...‌ L'équivalent de ton "$lilypond -dpoint-and-click
> -ddelete-intermediate-files $include --pdf $filename"

En effet. D'ailleurs le titre de cette zone s'appelle chez toi « Additional
Command Line Options » (en anglais alors que presque tout le reste est en
français comme chez moi). Chez moi c'est « Ligne de commande : ».

J'ai Frescobaldi 3.0.0, et toi ?

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 11 Nov 2022 21:08:32 +0100

> J'ai Frescobaldi 3.0.0, et toi ?

Ah, pardon, tu as déjà donné cette info : Frescobaldi 3.1.3.

Régression ?

---

From: Jean Abou Samra <[email-masked]>
Date: Fri, 11 Nov 2022 22:55:02 +0100

Bonjour,

En mode « Graver (publication) », Frescobaldi rajoute simplement
l'option « -dno-point-and-click », qui sert à supprimer les liens
des objets dans le PDF vers le code source, ceux qui font que
l'on est transporté au bon endroit dans le code si on clique
sur une note. D'une part ces liens ne sont pas utiles si on n'a
pas le fichier .ly exactement au même emplacement dans son ordinateur
(et certains n'aiment pas trop que le nom du dossier où ils ont
placé leur fichier .ly soit visible dans le PDF), d'autre part
les enlever peut diminuer nettement la taille du PDF.

Par ailleurs, on peut tout à fait produire les partitions depuis le
même fichier .ly, ce qui reste le plus simple. Voici un exemple :

\version "2.22.2"

partition =
#(define-scheme-function (transposition clef-name) (ly:pitch? string?)
    #{
      \score {
        \transpose c #transposition <<
          \new Staff { c'1 }
          \new Staff { \clef #clef-name c'1 }
        >>
      }
    #})

\book {
   \bookOutputName "clé-sol"
   \partition c "treble"
}
\book {
   \bookOutputName "clé-sol-transposé-en-ré"
   \partition d "treble"
}
\book {
   \bookOutputName "clé-fa"
   \partition c "bass"
}

La partie de la documentation à lire est ici :

https://lilypond.org/doc/v2.23/Documentation/notation/using-music-functions

Cordialement,
Jean

---

From: [email-masked]
Date: Sat, 12 Nov 2022 14:08:38 +0100 (CET)

Bonjour,

Merci pour toutes ces réponses. Voici mes nouvelles constatations, qui me déroutent un peu:

Les fichiers générés par Frescobaldi et lilypond en direct sont visuellement identiques MAIS les fichiers pdf générés ne sont pas binairement identiques, ce qui me posait un problème d'idempotence. Je pensais que ça venait de Frescobaldi, mais en fait non, c'est bien lilypond qui n'est pas idempotent:
Sur la suggestion de Luc De Rossi, j'ai effectué le test suivant (détail après ma signature dans ce mail):

	Prendre un fichier myfile.ly qui compile sans aucune erreur ni warning
	Générer myfile.pdf via lilypond et le renommer myfile_2.pdf
	Re-générer myfile.pdf via la même commande lilypond
	Comparer les 2 fichiers
	Guess what: les 2 fichiers ne sont PAS binairement identiques: lilypond n'es pas idempotent, ce qui me tarabuste un peu: un même fichier .ly généré deux fois via la même commande donne 2 pdf différents.

Ce n'est pas forcément grave, mais ça me pose question: Est-ce que certaines libs contiennent des données aléatoires mais non utiles (un peu comme les introns et les exons dans l'adn) qu'elles écrivent sans se poser de question? Y a-t-il une autre raison ?

En tout cas, la conclusion à ma question initiale est que Frescobaldi génère bien la même chose qu'un appel lilypond standard (pas d'ajout caché d'options chelou, p.ex. ;-) )

Si quelqu'un a une idée...

Bonne journée à tous!
Emmanuel

* * * Détail (j'ai expurgé la sortie de lilypond, aucune erreur/warning):

$ lilypond -dno-point-and-click  --pdf myfile.ly

$mv myfile.pdf myfile_2.pdf

$ lilypond -dno-point-and-click  --pdf myfile.ly

$ cmp -l myfile.pdf myfile_2.pdf
110202  64  61
110204  63  64
110205  62  61
110261  64  61
110263  63  64
110264  62  61
110458 142  64
110459  63 144
110460 141 142
110461  71 143
110462  70 146
110463  62 141
110464  65 143
110465  60 146
111004  64  61
111005  63  64
111006  62  61
111038  64  61
111039  63  64
111040  62  61
112701  61  65
112702 106  60
112703  67  65
112704 103  66
112705  64  67
112706  61  64
112707  64 102
112708  61 103
112709  71  66
112710  63  67
112711  67 106
112712  62 103
112713  70 102
112714 105  71
112715 103 105
112716  66  63
112717  62  65
112718 102  64
112719 102  71
112720 101 106
112721  64  65
112722  66 105
112723 101  62
112724 104  61
112725  67  71
112727 106  64
112728  71 102
112730  71  70
112731  71  60
112732  63  70
112735  61  65
112736 106  60
112737  67  65
112738 103  66
112739  64  67
112740  61  64
112741  64 102
112742  61 103
112743  71  66
112744  63  67
112745  67 106
112746  62 103
112747  70 102
112748 105  71
112749 103 105
112750  66  63
112751  62  65
112752 102  64
112753 102  71
112754 101 106
112755  64  65
112756  66 105
112757 101  62
112758 104  61
112759  67  71
112761 106  64
112762  71 102
112764  71  70
112765  71  60
112766  63  70

De : "Jean Abou Samra"
A : [email-masked],"Lilypond-user Fr"
Envoyé: vendredi 11 Novembre 2022 22:55
Objet : Re: Frescobaldi & CLI
 
Bonjour,

\version "2.22.2"

partition =

\book {

Cordialement,
Jean

---

From: Olivier Miakinen <[email-masked]>
Date: Sat, 12 Nov 2022 18:52:40 +0100

Le 12/11/2022 14:08, emmanuel.franquemagne--- via LilyPond French-speaking
list a écrit :
> Les fichiers générés par Frescobaldi et lilypond en direct sont
> visuellement identiques MAIS les fichiers pdf générés ne sont pas
> binairement identiques, ce qui me posait un problème d'idempotence. Je
> pensais que ça venait de Frescobaldi, mais en fait non, c'est bien
> lilypond qui n'est pas idempotent

Si les fichiers ont la même taille, il y a de grandes chances que le
contenu soit le même, modulo quelques modifications mineures telles
que la date, l'heure, ou le nom d'un éventuel fichier temporaire.

> $ cmp -l myfile.pdf myfile_2.pdf

Seulement 80 octets de différence sur un fichier de plus de 100 k octets, ce
n'est rien. Qui plus est, il n'y a que des chiffres (en octal 60-71), des
lettres majuscules (101-132) et des lettres minuscules (141-172). Bref, rien
que de très normal ÀMHA.

Cordialement,
-- 
Olivier Miakinen

---

From: Olivier Miakinen <[email-masked]>
Date: Sat, 12 Nov 2022 18:59:43 +0100

Le 12/11/2022 18:52, j'écrivais :
>> ...

Je dirai même plus : il n'y a que des chiffres hexadécimaux, puisque les
seules lettres sont entre A et F (101-106) ou entre a et f (141-146).

Qui plus est, il n'y a aucun mélange entre l'écriture hexadécimale en
majuscules et celle en minuscules. Elles sont dans des zones séparées.

---

From: [email-masked]
Date: Sat, 12 Nov 2022 21:40:14 +0100 (CET)

Je suis d'accord sur plusieurs points, bien que cela ne représente pas le fond de ma question:

	80o sur 100k‌ n'est pas une grosse proportion
	Les différences ne semblent pas "importantes" puisque les fichiers ne sont visuellement pas différents.

Mon point est de dire que je trouve curieux que 2 appels identiques de lilypond sur un fichier identique ne donne pas un résultat identique.

De mon expérience d'informaticien, un programme qui n'est pas idempotent, sans qu'il y ait d'autre explication rationnelle que "y a pas beaucoup de différence" et il n'y a que de l'octal et des lettre majuscules (ce qui n'a pas de signification sur un fichier binaire), est en général inquiétant.
D'où ma question. :-)
Mais j'imagine qu'il y a une explication pragmatique à ces différences.

Et pour en revenir à mon problème initial, où je craignais que Frescobaldi utilisait une invocation exotique de lilypond, il s'avère qu'en fait Frescobaldi n'utilise pas autre chose qu'une brave invocation basique, ce qui est parfait! Donc pour moi le sujet initial de mon thread est clos.

Le reste est, si quelqu'un a une réponse technique, uniquement pour ma culture. :-)

Emmanuel

De : "Olivier Miakinen"
A : [email-masked]
Envoyé: samedi 12 Novembre 2022 18:53
Objet : Re: Frescobaldi & CLI

Cordialement,
--
Olivier Miakinen

---

From: Olivier Miakinen <[email-masked]>
Date: Sat, 12 Nov 2022 23:54:36 +0100

Le 12/11/2022 21:40, [email-masked] a écrit :
> 
> Mon point est de dire que je trouve curieux que 2 appels identiques de
> lilypond sur un fichier identique ne donne pas un résultat identique.
> 
> De mon expérience d'informaticien, un programme qui n'est pas idempotent,
> sans qu'il y ait d'autre explication rationnelle que "y a pas beaucoup de
> différence" et il n'y a que de l'octal et des lettre majuscules (ce qui
> n'a pas de signification sur un fichier binaire), est en général
> inquiétant. D'où ma question. :-) Mais j'imagine qu'il y a une
> explication pragmatique à ces différences.

Oh, j'ai l'impression que s'installe un quiproquo et je voudrais
clarifier les choses.

Tout d'abord, il n'y a pas « de l'octal » dans les différences, ce qui
effectivement n'aurait pas une grance signification pour un fichier
binaire.

Si le résultat s'affiche en octal, c'est seulement parce qu'il s'agit
de l'affichage par défaut de la commande 'cmp -l'. Mais justement, ce
que j'ai constaté, c'est que les différences sont sur du texte en ASCII,
et qu'en outre ce texte en ASCII est l'affichage lisible par un humain
de chiffres hexadécimaux.

D'ailleurs je viens de faire le test moi-même, en utilisant 'cmp -lb'
pour avoir directement les caractères au lieu de seulement leur code
en octal, puis en utilisant 'strings -a' pour retrouver dans quelles
chaînes de caractères on trouve ces différences.

Extrait des résultats :

> <rdf:Description rdf:about='uuid:cfd610b1-9af7-11f8-0000-9a83d87be210' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.50'/>
  ==>
> <rdf:Description rdf:about='uuid:c5b41231-9af7-11f8-0000-9a83d87be210' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.50'/>

En effet, un « uuid » est censé être unique, donc non reproductible d'une
fois sur l'autre.

---

From: [email-masked]
Date: Sun, 13 Nov 2022 02:24:45 +0100 (CET)

Merci beaucoup d'avoir poussé ces investigations !

En regardant de mon côté, j'ai pu effectivement voir que les différences concernent les métadonnées du fichier: des ids uniques, c'est vrai, mais pas que: plusieurs champs concernent les dates de génération. Détail auquel je n'avais pas songé: je restais sur le contenu des partitions. L'image ci-après représente la colonne de gauche du diff des outputs de strings sur les 2 fichiers.

͏‌ 

Je m'en veux d'avoir zappé ce point des métadonnées ! :">

Merci encore pour cette discussion très intéressante et très instructive !

Bonne fin de soirée,
Emmanuel  

‌

De : "Olivier Miakinen"
A : [email-masked]
Envoyé: samedi 12 Novembre 2022 23:55
Objet : Re: Frescobaldi & CLI

Extrait des résultats :

==>

---

From: Christian LE BARS <[email-masked]>
Date: Sun, 13 Nov 2022 09:14:22 +0100

Bonjour Emmanuel.

Juste une petite remarque.

tu a choisi un corps d'écriture un peu trop petit pour mes vieux yeux, 
peut tu augmenter ton corps d'écriture?

par avance merci.

Christian

---

From: Olivier Miakinen <[email-masked]>
Date: Sun, 13 Nov 2022 10:57:47 +0100

> peut tu augmenter ton corps d'écriture?

Tiens, je n'avais même pas remarqué ! Mais c'est parce que je fais aussi
partie des vieux, ceux qui ont toujours préféré les messages en texte seul
plutôt que la modernité du HTML. ;-)

Puisque tu utilises Thunderbird comme moi je te donne cette astuce, d'un
ancien à un autre ancien :
   Affichage > Corps du message en > Texte seul

Tu peux même ajouter un bouton dédié grâce à l'extension Toggle HTML :
https://addons.thunderbird.net/en-US/thunderbird/addon/toggle-html/

Un autre avantage, c'est que certains spams en MIME/Multipart ont le contenu
de leur pub dans la partie HTML et une partie texte complètement vide, ce
qui fait un bon filtre de ces spams !

Cordialement,
-- 
Olivier Miakinen

---

From: Valentin Villenave <[email-masked]>
Date: Sun, 13 Nov 2022 12:23:05 +0100

On 11/13/22, Olivier Miakinen <[email-masked]> wrote:
> ceux qui ont toujours préféré les messages en texte seul

Présent !

-- V.

---

From: Jacques Menu <[email-masked]>
Date: Sun, 13 Nov 2022 12:24:52 +0100

> Le 13 nov. 2022 à 12:23, Valentin Villenave <[email-masked]> a écrit :
> 

Les rubans et cartes perforées, c’était bien aussi…

JM

---

From: Martial R <[email-masked]>
Date: Sun, 13 Nov 2022 14:15:04 +0100

. . .  _ _ _ . . .

;- )

-- 
Martial Rameaux