Subject: fonction scheme

From: Daniel Cartron <[email-masked]>
Date: Thu, 23 May 2013 17:18:27 +0200

Bonjour,

Si j'ai bien compris en écrivant :
maFonction = #(define-music-function (parser location mamusique) (ly:music?)
.....)
je pourrai ensuite appeler cette fonction ainsi :
\maFonction \maMUsique
et la variable $mamusique recevra le contenu de \maMusique, puisque j'ai mis 
(ly:music?).

En tout cas j'espère que c'est bien ça sinon il faut que je revoie tout à 
zéro...

J'aimerais créer une fonction qui soit autonome, à savoir que je n'ai pas 
besoin de l'appeler, elle s'exécute d'office, et elle sait toute seule que la 
variable $mamusique contient \Truc , et comme dans ma partition j'ai écrit 
Truc = {do re mi}, elle va traiter do re mi.

C'est faisable ?

Merci

-- 
Cordialement, Daniel Cartron
« Le mot le plus long de notre dictionnaire, Anticonstitutionnellement, a pour 
anagramme : Et nul mot, ici, n'est tant léonin. »

---

From: Gilles <[email-masked]>
Date: Thu, 23 May 2013 22:29:26 +0200

> Truc = {do re mi}, elle va traiter do re mi.

Tu n'as pas besoin de mettre un paramètre dans la définition d'une fonction

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Truc = {do re mi}
maFonction = #(define-music-function (parser location)()
#{
     %%% faire qqchose avec \Truc

#})

    { \maFonction } % => applique \maFonction à \Truc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Si tu veux que \Truc prenne automatiquement la valeur renvoyée par  
\maFonction, tu peux mettre après la définition de \maFonction :

Truc = \maFonction % redéfinie \Truc à une nouvelle valeur

Bon, je ne sais pas si j'ai bien compris la question.

-- 
Gilles

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 24 May 2013 06:18:52 +0200

> Tu n'as pas besoin de mettre un paramètre dans la définition d'une fonction

Ha je note, ça me reservira surement. Je fais déjà ça dans d'autres langages 
mais scheme est tellement... spécial...

>      %%% faire qqchose avec \Truc

oui mais comment je lui dit que c'est truc qu'il faut traiter ?

> Bon, je ne sais pas si j'ai bien compris la question.

En fait \Truc c'est Tune = sol par exemple,la variable que j'utilise pour 
transposer toutes les parties du morceau en changeant uniquement sa valeur.

En plus de cette utilisation je voudrais récupérer le nom de la note mais en 
anglais, avec son éventuelle altération, et l'écrire en majuscule dans le 
markup de \override Clef. Donc si j'écris Tune = sold je voudrais récupérer G# 
(oui je sais c'est pas un vrai dièse mais c'est pour montrer).

Et comme c'est pas encore assez tordu comme truc je voudrais transposer cette 
note à la quarte (C# dans mon exemple) pour un autre \override Clef.

Voilà tu sais tout.

-- 
Cordialement, Daniel Cartron
« Le chien est l'animal le plus vigilant; pourtant il dort toute la journée. »
Georg Christoph Lichtenberg

---

From: Gilles <[email-masked]>
Date: Fri, 24 May 2013 09:29:09 +0200

> oui mais comment je lui dit que c'est truc qu'il faut traiter ?

Et bien comme d'hab.

maFonction = #(define-music-function (parser location)()
    #{
        \transpose do' \Truc \laMusiqueATransposer
    #}

> anglais
Oups, plusieurs \language dans le même fichier, ça va peut-être être pas  
facile
à gérer. Il faudra surement utiliser la fonction scheme  
ly:music-transpose, (qui est indépendante du language), plutôt que  
\transpose
(ly:music-transpose laMusiqueATransposer Truc)

-- 
Gilles

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 24 May 2013 16:16:16 +0200

> (ly:music-transpose laMusiqueATransposer Truc)

Bon j'ai du rater une étape dans mes explications. Pour le ly:music-transpose 
j'avais plutôt pensé à ly:pitch-transpose utilisé comme ça :
(define monnouveautruc (ly:pitch-transpose \Truc 3)) est-c la bonne syntaxe ?
et une fois que j'ai fait ça je pensais utiliser ly:pitch-notename avec ton 
truc que tu m'as donné pour les basses (string=? text "Bs") (list-ref '("C" 
"D" "E" "F" "G" "A" "B") index)) couplé avec ly:pitch-alteration pour 
déterminer s'il y a une altération et ensuite utiliser tout ça avec un glyphe 
pour avoir au final : "texte avant" + "A" + glyphe + "texte après" par 
exemple.

C'est idiot ou pas ? 

-- 
Cordialement, Daniel Cartron
« Rendre l'âme? D'accord, mais à qui? »
Serge Gainsbourg

---

From: Gilles <[email-masked]>
Date: Sat, 25 May 2013 15:57:00 +0200

Le Fri, 24 May 2013 16:16:16 +0200, Daniel Cartron <[email-masked]> a  
écrit:

> Pour le ly:music-transpose

Presque ...

(define monnouveautruc
           (ly:pitch-transpose Truc (ly:make-pitch 0 3 0)))
\Truc c'est pour Lilypond uniquement
Le paramètre delta de ly:pitch-transpose c'est un pitch en fait, et ce  
n'est pas spécifié dans la doc ...
Tu peux aussi mettre quelque-part

delta = f
  [ ou bien, en français
delta = fa             ]
puis écrire
(define monnouveautruc
           (ly:pitch-transpose Truc delta))

> et une fois que j'ai fait ça je pensais utiliser ly:pitch-notenamecouplé  
> avec ly:pitch-alteration pour
> déterminer s'il y a une altération [ ..]
> C'est idiot ou pas ?

A apriori non. Il faut simplement utiliser les bonnes fonctions pour  
chaque type
ly:music-transpose pour les musiques (ly:music?)
ly:pitch-transpose pour les pitches (ly:pitch?)

-- 
Gilles

---

From: Daniel Cartron <[email-masked]>
Date: Sat, 25 May 2013 16:53:04 +0200

> ly:pitch-transpose pour les pitches (ly:pitch?)

ok ça commence à rentrer, du coup j'ai écrit 

#(define outerBoardPitch (ly:pitch-transpose scoreOut (ly:make-pitch 0 0 
0)))
#(define outerboardNote (ly:pitch-notename outerBoardPitch))
#(define outerBoardAlt (ly:pitch-alteration outerBoardPitch))
#(define innerBoardPitch (ly:pitch-transpose scoreOut (ly:make-pitch 0 3 
0)))
#(define innerBoardNote (ly:pitch-notename innerBoardPitch))
#(define innerBoardAlt (ly:pitch-alteration innerBoardPitch))

c'est probablement très bourrin mais ça marche, en partant de 
scoreOut = gis
je récupère 4 1/2 0 1/2

Ensuite je pense utiliser case pour créer mon markup, là encore je trouve 
que je pisse beaucoup de code pour pas grand chose, mais si j'arrive à mes 
fins mm laborieusement, c'est déjà ça...

Merci de me donner ton avis sur mes tâtonnements et errements...

-- 
Cordialement, Daniel Cartron
« Généralement les gens demandent des conseils et puis ils ne les suivent 
pas ! »
Sacha Guitry - Faisons un rêve

---

From: Daniel Cartron <[email-masked]>
Date: Sat, 25 May 2013 17:47:59 +0200

> ok ça commence à rentrer, du coup j'ai écrit 

je dirais mm plus, j'ai écrit

#(define outerBoardPitch (ly:pitch-transpose scoreOut (ly:make-pitch 0 0 
0)))
#(define outerBoardNote (ly:pitch-notename outerBoardPitch))
#(define outerBoardAlt (ly:pitch-alteration outerBoardPitch))
#(define innerBoardPitch (ly:pitch-transpose scoreOut (ly:make-pitch 0 3 
0)))
#(define innerBoardNote (ly:pitch-notename innerBoardPitch))
#(define innerBoardAlt (ly:pitch-alteration innerBoardPitch))
#(define clefName '(
		(0 . "C")
		(1 . "D")
		(2 . "D")
		(3 . "F")
		(4 . "G")
		(5 . "A")
		(6 . "B")
	))
#(define clefAlt '(
		(1/2 . "accidentals.sharp")
		(0 . "")
		(-1/2 . "accidentals.flat")
	))
#(define diatoTabClefInnerName (assoc-ref clefName innerBoardNote))
#(define diatoTabClefInnerAlt (assoc-ref clefAlt innerBoardAlt))
#(define diatoTabClefOuterName (assoc-ref clefName outerBoardNote))
#(define diatoTabClefOuterAlt (assoc-ref clefAlt outerBoardAlt))

maintenant il faut que je réussisse à concaténer tout ça pour faire à partir 
de mon scoreOut = ges :

#{\markup{\raise #-1.1 \column { \bold {C\musicglyph #"accidentals.sharp" } 
\bold G\musicglyph #"accidentals.sharp"}} #}

en fait il faut que je fasse ça un peu mieux, parce que ce markup m'affiche
C
♯
G
♯
avec des gros dièses

alors que je veux 
C♯
G♯
avec des petits dièses

mais ça c'est plus du scheme, c'est du markup lily

-- 
Cordialement, Daniel Cartron
« L'important n'est pas de convaincre, mais de donner à réfléchir. »
Bernard Werber - Le père de nos pères

---

From: Daniel Cartron <[email-masked]>
Date: Sat, 25 May 2013 18:12:30 +0200

Le samedi 25 mai 2013 17:47:59 Daniel Cartron a écrit :
> maintenant il faut que je réussisse à concaténer tout ça pour faire à
> partir  de mon scoreOut = ges :

ben j'ai fait la concaténation un peu au pif et au bout de 4 ou 5 essais les 
résultats sont nickels...

la seule chose que je veux bien qu'on me dise c'est si on peut faire mieux et 
plus court ou plus propre, que je prenne de bonnes habitudes.

-- 
Cordialement, Daniel Cartron
« N’est pas cocu qui veut, et nous ne devons épouser que de très jolies femmes 
si nous voulons qu’un jour on nous en délivre. »
Sacha Guitry —  Bloompott, exergue du chapitre 1