Variables variées...

Bonsoir,

Comment mettre en variable des indications de transposition ?
Hors notes et lyrics bien évidemment, cela fonctionne pour l'armure
(pourtant non suivi d'une expression musicale) :
  ARMURE = {
    \set Score.tempoHideNote = ##t \tempo 4=110 % (pour donner le tempo au
midi)
    \clef treble
    \key fa \major
    \time 4/4
  } %%% peut être repris ensuite en tant que \ARMURE

...mais pas pour autre chose, en tout cas pas pour cela :
  SINGHI = { \transpose do do' } %%% pour rendre écoutable le midi d'un
canon à 4 voix...
  SINGMID = { \transpose do do } %%% à utiliser devant chaque voix genre :
  SINGLOW = { \transpose do' do } %%% \new Voice \SINGLOW { musique... }
  SINGBASS = { \transpose do' do, }
(avec ou sans parenthèses c'est du pareil au même...)

(j'ai l'impression que je devrais écrire, pour ce simple besoin de
simplification, une fonction en SCHEME, langage que je ne connais pas, et je
vais devoir abandonner avant même de commencer...)

Merci de vote aide !

Jean-Christophe

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Variables-variees-tp5488765p5488765.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

là même moi j'y arrive - ou n'est-ce qu'un coup de chance?!

SINGHI = #(define-music-function (parser location music) (ly:music? )
  #{ \transpose c c' { $music }
#})

et l'évocation ce fait par

{
  \SINGHI {a b c d }
}

le tout sans garantie!!!

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Variables-variees-tp5488765p5488951.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Merci BEAUCOUP : "même ça", je n'y serai jamais arrivé tout seul, ou bien
avec trois semaines de tests et d'essais dans tous les sens. J'ai bien
essayé de regarder un peu dans les docs, mais tout cela reste du charabia à
mes yeux...

Je testerai... et te tiendrai au courant (pour la "garantie" ;o).

Ciao,
Jean-Christophe

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Variables-variees-tp5488765p5491581.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

C'est super, cela fonctionne parfaitement !

Merci encore,
Jean-Christophe.

Remarque personnelle

Il s'agit néanmoins de programmation, et je crois que ce n'est pas forcément
évident pour tout le monde.
Pour déclarer ce qui est une simple VARIABLE dans d'autre environnements
codés (programmation), il faut ici procéder à l'écriture d'une routine ou
fonction dans un langage qui dépasse le cadre de Lilypond.

Je trouverai personnellement pratique un moyen simple de déclarer en
variable un bout de code musical hors contexte, que l'on pourrait ensuite
placer n'importe où dans la partition...

par exemple : FORMA = [ \bold \italic ] (ou {} ou autre...)
dans le texte, ensuite : \format "Mot ou expression" (sans les " pour un
simple mot) donnerait Mot ou expression

Cela rendrait accessible l'automatisation de codes souvent utilisés à un
plus large public.

Je ne suis pas à hauteur pour faire pareille chose, aussi je me contente de
partager mon idée... si cela peut donner de l'inspiration à l'un ou l'autre
!... (si cela n'existe pas déjà, évidemment...)

Bonne soirée !

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Variables-variees-tp5488765p5492976.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Si je puis me permettre de m'immiscer dans ce fil, ça ne doit pas poser de problème particulier, la dernière version fournit un moyen élégant d'inclure du code «tout prêt»

New features in 2.13 since 2.12- New option -dinclude-settings=INCLUDEFILE.ly, which causes lilypond to include the given file before the score is processed.

Il faut toutefois être suffisamment rigoureux pour gérer ces ajouts, surtout si l'on travaille sur plusieurs machines, ou si l'on change de machine (ça peut être rendu obligatoire par une défaillance).
Quoi de plus énervant de vouloir compiler un source composé quelques années auparavant, et de voir cette compilation échouer à cause d'un fichier nécessaire qu'on n'arrive pas à retrouver...
Il arrive qu'on ait envie de reprendre un travail après plusieurs années.

···

Bonjour,

Jean-Jacques Rétorré-2 wrote:

Si je puis me permettre de m'immiscer dans ce fil, ...

Pas de problème, bien évidemment !

Jean-Jacques Rétorré-2 wrote:

...ça ne doit pas poser de problème particulier, la dernière version
fournit un moyen élégant d'inclure du code «tout prêt»

New features in 2.13 since 2.12
  New option -dinclude-settings=INCLUDEFILE.ly, which causes lilypond to
include the given file before the score is processed.

Cela ressemble à une option de compilation, dans le but d'insérer
systématiquement des variables ou paramètres globaux sans avoir à les
déclarer dans chaque source... A mon niveau, la fonction \include le fait
également, et je m'en contente.

Je précise donc ma question : il ne s'agit pas d'inclure du code, mais de
mettre en variable un extrait quelconque de code LilyPond (peu importe s'il
est ensuite inclu en local ou en global).

Pour reprendre ma question de départ en exemple, je trouverais pratique de
pouvoir écrire :
SingHI = [ \transpose do do' ] % crochets...
--ou bien--
SingLow = { \transpose do do, } % ...ou parenthèses, ou n'importe quoi
d'autre...
--ou encore --
SingBass = \transpose do' do, % ...voire rien du tout !

...sans avoir à développer une fonction en SCHEME... euh, j'aurais du écrire
:
...sans avoir à faire développer une fonction en SCHEME par ELUZE...

Bon après-midi à tous,
Jean-Christophe

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Variables-variees-tp5488765p5495232.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Bonjour !

Cela ressemble à une option de compilation, dans le but d'insérer systématiquement des variables ou paramètres globaux sans avoir à les déclarer dans chaque source... A mon niveau, la fonction \include le fait
également, et je m'en contente.

Je suis assez d'accord, cette option peut être bien pratique mais écrire un \include pour les fonctions utilisées dans la partition est plus ingénieux. Après c'est vrai que cela peut être pratique pour changer la présentation par exemple sans avoir à toucher au fichier d'origine.

Je précise donc ma question : il ne s'agit pas d'inclure du code, mais de
mettre en variable un extrait quelconque de code LilyPond (peu importe s'il
est ensuite inclu en local ou en global).

Ce que tu demandes est très clairement impossible. Tu voudrais qu'une variable soit une fonction, hors ce sont 2 choses différentes répondant à des besoins différents.

Pour reprendre ma question de départ en exemple, je trouverais pratique de
pouvoir écrire :
SingHI = [ \transpose do do' ] % crochets...
  --ou bien--
SingLow = { \transpose do do, } % ...ou parenthèses, ou n'importe quoi
d'autre...
  --ou encore --
SingBass = \transpose do' do, % ...voire rien du tout !

La fonction transpose prend 3 arguments pour fonctionner. Les 2 premiers sont la note de départ et la note d'arrivée. Le 3e est la musique. Ces arguments ne sont pas optionnels, ils doivent impérativement être précisés à la suite de \transpose
Je pense qu'il faut vraiment garder à l'esprit les déficitions de "variable" et "fonction" :

- Qu'est ce qu'une variable ?
Une variable c'est une valeur, un objet, c'est un raccourcis vers une information. Imagine que tu écrives un dictionnaire, il comporte plein d'entrées (= variables), chacune d'elles associée à une définition (= contenu de la variable). Tu peux ajouter de nouveau mots à ton dictionnaire, tu peux modifier des définitions, etc. Mais tu ne peux pas dire à ton dictionnaire de créer quelque chose. La définition que tu écris dans ton dictionnaire doit être complète, tu ne peux pas écrire que les 3 premiers mots de la définition, ce serait incompréhensible. Ta définition doit se suffire à elle-même.

- Qu'est ce qu'une fonction ?
Une fonction exécute une action, une tâche, produit un résultat. Elle traite une ou des informations et renvoie un résultat qui lui-même peut être une information. C'est comme un petit programme qui transforme des données en d'autres données.

Imaginons :
Je souhaite ajouter 3 à un nombre, nous disposons du "+" qui prend impérativement 2 arguments.

Solution 1 :Je crée la variable \ajouteTrois
ajouteTrois = 3 +
resultat = \ajouteTrois 5
Lilypond exécute ton code, il arrive sur la définition de ajouteTrois. "3 +", mais trois plus quoi ??? Pris séparément (donc comme un mot dans le dictionnaire) cela ne veut rien dire ! Il est impossible d'écrire une définition comme cela, il y a erreur.

Solution 2 : Créer une fonction \ajouteTrois
Le code scheme doit expliquer ceci : "Je suis une nouvelle fonction qui nécessite un nombre x, mon résultat est 3 + x"
Ensuite quand on utilisera resultat = \ajouteTrois 5 Lilypond va reconnaître qu'il s'agit d'une fonction, exécuter l'action demandée, et renvoyer le résultat dans la variable resultat. Dans notre dictionnaire, en cherchant à resultat nous auront 8

Je ne suis pas sûre d'être très claire avec mes histoires de dictionnaires...
Enfin, gardons les 2 règles d'or :
- Quand une fonction utilise des arguments obligatoires ces arguments doivent impérativement être spécifiés en même temps que l'on appelle la fonction. Sinon ce serait comme donner une recette de cuisine sans les ingrédients.
- Une variable est "inerte", elle n'exécute rien et ne prends pas de paramètres.
Cela est valable dans tous les langages de programmation.

Bon après-midi
Cécile

···

On 03/09/2010 14:55, Jean-Christophe D wrote:

Le 03/09/2010 16:02, Cile disait :

Bonjour !

[...]
Je précise donc ma question : il ne s'agit pas d'inclure du code, mais de
mettre en variable un extrait quelconque de code LilyPond (peu importe
s'il est ensuite inclus en local ou en global).

Ce que tu demandes est très clairement impossible. Tu voudrais qu'une
variable soit une fonction, hors ce sont 2 choses différentes répondant
à des besoins différents.
Je pense qu'il faut vraiment garder à l'esprit les déficitions de
"variable" et "fonction" :

- Qu'est ce qu'une variable ?
Une variable c'est une valeur, un objet, c'est un raccourcis vers une
information. Imagine que tu écrives un dictionnaire, il comporte plein
d'entrées (= variables), chacune d'elles associée à une définition (=
contenu de la variable). Tu peux ajouter de nouveau mots à ton
dictionnaire, tu peux modifier des définitions, etc. Mais tu ne peux pas
dire à ton dictionnaire de créer quelque chose. La définition que tu
écris dans ton dictionnaire doit être complète, tu ne peux pas écrire
que les 3 premiers mots de la définition, ce serait incompréhensible. Ta
définition doit se suffire à elle-même.

- Qu'est ce qu'une fonction ?
Une fonction exécute une action, une tâche, produit un résultat. Elle
traite une ou des informations et renvoie un résultat qui lui-même peut
être une information. C'est comme un petit programme qui transforme des
données en d'autres données.

Enfin, gardons les 2 règles d'or :
- Quand une fonction utilise des arguments obligatoires ces arguments
doivent impérativement être spécifiés en même temps que l'on appelle la
fonction. Sinon ce serait comme donner une recette de cuisine sans les
ingrédients.
- Une variable est "inerte", elle n'exécute rien et ne prends pas de
paramètres.
Cela est valable dans tous les langages de programmation.

C'est la raison pour laquelle je préfère IDENTIFICATEUR à variable :

Le code barre 1234567890123 est un identificateur
\1234567890123 = { camembert au lait cru suffisamment crémeux }
\9873513210987 = { bol rempli de panure bien sèche et jaune d'œuf }

\score {
   \new Staff = "camembert pané <<
     \new Voice = "enrobage" { \987651321987 }
     \new lyrics \lyricsto "enrobage" { \1234567890123 }
   >>
   \layout {
     \context {
       \four_à_chaleur_tournante
       \override Thermostat #'grill = #250
      }
     \context {
       \four_à_chaleur_tournante
       \override Minuterie #'durée = #15
      }
   }
}

À servir sur quelques feuilles de salade, et un petit coup de rouge !

Quand le temps variable n'est ni beau ni pourri !

@+
Jean-Charles

···

On 03/09/2010 14:55, Jean-Christophe D wrote: