[Scheme] Voix séparées ou ensemble - suite

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

[Scheme] Voix séparées ou ensemble - suite

Olivier Miakinen-3
Bonjour,

Il y a quelques jours je demandais comment concilier l'affichage
d'une partition avec le rendu MIDI, dans le cas où une voix se
partage parfois en deux sur une seule portée, mais que je veux
faire deux fichiers MIDI séparés, un pour chaque voix.

J'en suis venu à créer quatre fonctions, \upSplit et \downSplit
pour saisir les notes du haut et du bas quand les voix se
séparent, et \upTogether et \downTogether quand elles se
rejoignent. Le résultat est ici : <http://lilybin.com/bw68to/3>.

Ce qui m'embête, c'est que la fonction \downTogether a besoin
de deux paramètres, l'un étant la musique à afficher, et l'autre
une série de \skip ou s de même durée.

Définition :
  downTogether = #
  (define-music-function
   (parser location musique silence) (ly:music? ly:music?)
   #{
     \voiceTwo
     \tag #'midi $musique
     \tag #'print $silence
   #})

Usage :
  \downTogether { c''8 r f' r f'' r g' r } { s1 }

Aussi, je me demande s'il n'y a pas moyen en Scheme de lui passer une
expression musicale et qu'il remplace cette expression en une série
de \skip de durée équivalente.

Par exemple, en lui passant { c''8 r f' r f'' r g' r }, il pourrait
retourner { s1 } ou (ce qui revient au même) { s8 s s s s s s s }.

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: [Scheme] Voix séparées ou ensemble - suite

Olivier Miakinen-3
Le 11/11/2017 14:05, j'écrivais :
>
> [...] je me demande s'il n'y a pas moyen en Scheme de lui passer une
> expression musicale et qu'il remplace cette expression en une série
> de \skip de durée équivalente.
>
> Par exemple, en lui passant { c''8 r f' r f'' r g' r }, il pourrait
> retourner { s1 } ou (ce qui revient au même) { s8 s s s s s s s }.

En cherchant dans le répertoire scm, je crois que j'ai trouvé ce dont
j'ai besoin dans le fichier music-functions.scm :

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (skip-of-length mus)
  "Create a skip of exactly the same length as @var{mus}."
  (let* ((skip
          (make-music
           'SkipEvent
           'duration (ly:make-duration 0 0))))

    (make-event-chord (list (ly:music-compress skip (ly:music-length
mus))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Mais c'est une fonction définie par define-public et non par
define-music-function. Est-ce que je peux l'appeler directement
depuis lilypond, ou bien est-ce que je dois l'enrober d'une
manière ou d'une autre ?


_______________________________________________
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
|

[Résolu ?] [Scheme] Voix séparées ou ensemble - suite

Olivier Miakinen-3
Le 14/11/2017 22:53, j'écrivais :

>>
>> [...] je me demande s'il n'y a pas moyen en Scheme de lui passer une
>> expression musicale et qu'il remplace cette expression en une série
>> de \skip de durée équivalente.
>>
>> Par exemple, en lui passant { c''8 r f' r f'' r g' r }, il pourrait
>> retourner { s1 } ou (ce qui revient au même) { s8 s s s s s s s }.
>
> En cherchant dans le répertoire scm, je crois que j'ai trouvé ce dont
> j'ai besoin dans le fichier music-functions.scm :
>
> [...]
>
> Mais c'est une fonction définie par define-public et non par
> define-music-function. Est-ce que je peux l'appeler directement
> depuis lilypond, ou bien est-ce que je dois l'enrober d'une
> manière ou d'une autre ?

Je pense que j'ai résolu mon petit problème, en tout cas ceci semble
fonctionner :

=====================================================================
\version "2.18.2"

silence = #(define-music-function
            (parser location musique) (ly:music?)
            (skip-of-length musique))

notes = { a'4 b'8. c''16 d''2 }

<<
  { \notes | \notes | \silence \notes | }
  \\
  { \notes | \silence \notes | \notes | }
>>
=====================================================================

De même qu'avec ça :

=====================================================================
silence = #(define-music-function
            (parser location musique) (ly:music?)
            #{
              #(skip-of-length musique)
            #})
=====================================================================



_______________________________________________
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
|

[RÉSOLU] [Scheme] Voix séparées ou ensemble - suite

Olivier Miakinen-3
Le 15/11/2017 01:15, Olivier Miakinen a écrit :
>
> Je pense que j'ai résolu mon petit problème [...]

Je dirais même plus :

http://lilybin.com/bw68to/4

Lorsqu'un passage est commun à \voiceOne et \voiceTwo, il
suffit de le mettre à l'identique dans les deux parties,
pour l'un comme paramètre à \voiceOneWithTwo, pour l'autre
comme paramètre à \voiceTwoWithOne. Ensuite la partition
pour impression sera précédée d'un \keepWithTag #'print
tandis que celle pour le midi aura un \keepWithTag #'midi.


_______________________________________________
liste de diffusion lilypond-user-fr
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr