Accords dans une variable : ça ne fonctionne pas ?

classic Classique list Liste threaded Arborescence
5 messages Options
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Accords dans une variable : ça ne fonctionne pas ?

LilyPond French Users mailing list
Bonjour,

Je voudrais mettre un enchaînement d'accords dans une variable afin de
pouvoir le replacer à plusieurs endroits d'une partition sans devoir le
dupliquer, mais j'obtiens systématiquement une erreur.

La partition de départ, composée d'une tablature pour guitare basse
surmontée des accords :

\score {
  <<
    \new ChordNames { \chordmode {
% enchaînement d'accords 1
      d1:m d:m g:m f
      a1     a     g:m f2 a/cis
      \break
% enchaînement d'accords 2
      d1:m d:m g:m f2 gis:dim
      a1     a     g:m f2 a/cis
    } }%\Accords }
    \new TabStaff \with { stringTunings = #bass-tuning \tabFullNotation } {
d,1 d, }
  >>
  \layout { indent = 0 }
}

Jusque là, tout va bien.

Mais si je mets les accords dans une variable, j'obtiens "Erreur : chaîne
non reconnue ; en dehors d'un script textuel ou de \lyricmode".

AccMotifA = {
  d1:m d:m g:m f
  a1     a     g:m f2 a/cis
}
AccMotifB = {
  d1:m d:m g:m f2 gis:dim
  a1     a     g:m f2 a/cis
}

\score {
  <<
    \new ChordNames { \chordmode {
      \AccMotifA
      \break
      \AccMotifB
    } }
    \new TabStaff \with { stringTunings = #bass-tuning \tabFullNotation } {
d,1 d, }
  >>
  \layout { indent = 0 }
}

Que faut-il faire (je n'ai rien trouvé dans la doc qui puisse me dépanner) ?

Merci.




--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: Accords dans une variable : ça ne fonctionne pas ?

martial

Bonjour,
si j'ai bien compris il suffit de mettre \chordmode dans la variable

AccMotifA = \chordmode {
  d1:m d:m g:m f
  a1     a     g:m f2 a/cis
}


Le sam. 5 oct. 2019 à 14:02, Monteverdi via lilypond-user-fr <[hidden email]> a écrit :
Je voudrais mettre un enchaînement d'accords dans une variable afin de
pouvoir le replacer à plusieurs endroits d'une partition sans devoir le
dupliquer, mais j'obtiens systématiquement une erreur.
 


--
Martial Rameaux


_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
Lilypondement,
Martial Rameaux
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: Accords dans une variable : ça ne fonctionne pas ?

LilyPond French Users mailing list
Merci.

Effectivement, en mettant \chordmode dans la variable ça fonctionne.

Mais ça ne paraît pas logique du tout, car ça fait des instructions
\chordmode imbriquées (voir ci-dessous) :


AccMotifA = \chordmode {
  d1:m d:m g:m f
  a1     a     g:m f2 a/cis
}
AccMotifB = \chordmode {
  d1:m d:m g:m f2 gis:dim
  a1     a     g:m f2 a/cis
}

\score {
  <<
    \new ChordNames \chordmode {  
% ici on s'attend à ce que tout ce qui est entre les crochets {} soit
interprété comme des accords
      d:m d:m d:m d:m
      \AccMotifA
      \break
      \AccMotifB
    }
    \new TabStaff \with { stringTunings = #bass-tuning \tabFullNotation } {
d,1 d, }
  >>
  \layout { indent = 0 }
}


Ce qui paraît plus logique de prime abord, c'est
1. de mettre \chordmode une fois autour de l'expression contenant les noms
des accords ;
2. que l'expansion des variables soit fait avant l'analyse syntaxique (comme
une macro).

Mais bon, l'essentiel est d'obtenir le résultat souhaité :)





--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: Accords dans une variable : ça ne fonctionne pas ?

Olivier Miakinen-3
Bonjour,

Le 05/10/2019 14:49, Monteverdi via lilypond-user-fr a écrit :
>
> Ce qui paraît plus logique de prime abord, c'est
> 1. de mettre \chordmode une fois autour de l'expression contenant les noms
> des accords ;
> 2. que l'expansion des variables soit fait avant l'analyse syntaxique (comme
> une macro).

Je ne sais pas si c'est plus logique, mais de mon point de vue il est
beaucoup plus efficace de savoir dès le début si on est en \chordmode,
en \lyricmode ou en mode de saisie de notes, parce que ça permet de
détecter les erreurs le plus vite, et de les localiser au mieux.

> Mais bon, l'essentiel est d'obtenir le résultat souhaité :)

Oui, et de ne pas perdre trop de temps à débuguer à l'endroit où
on appelle ce qui serait une « macro » alors que le bug se trouve
plusieurs dizaines de lignes plus haut, lors de la définition de
la variable.

Cordialement,
--
Olivier Miakinen

_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: Accords dans une variable : ça ne fonctionne pas ?

Jean Abou Samra
En réponse à ce message posté par LilyPond French Users mailing list
Bonjour,
> Ce qui paraît plus logique de prime abord, c'est
> 1. de mettre \chordmode une fois autour de l'expression contenant les noms
> des accords ;
> 2. que l'expansion des variables soit fait avant l'analyse syntaxique (comme
> une macro).

Notez que par exemple :
variable = \relative { … }
{ \relative { musique… \variable … } }
contient déjà des accolades imbriquées qui sous-entendent \notemode, et imbrique les \relative.

De plus, une expansion des variables réalisée avant l'analyse syntaxique signifierait une double évaluation de variables qui sont appelées plusieurs fois (possiblement dans différents contextes au sens large), ce qui n'est pas souhaitable. En fait, je crois que cette architecture provient même plus fondamentalement de l'absence de distinction apportée par Scheme aux objets de code et à leurs résultats. (Ainsi, LaTeX permet je crois par certains aspects de réaliser de pures « macros » comme vous l'entendez, même si je ne m'avancerais pas trop sur ce sujet.)

> Mais bon, l'essentiel est d'obtenir le résultat souhaité :)

Je suis bien d'accord !
Cordialement,
Jean Abou Samra
_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr