lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Convertir du lyricmode en "vrai" texte


From: Nicolas Sceaux
Subject: Re: Convertir du lyricmode en "vrai" texte
Date: Mon, 25 Feb 2008 21:23:58 +0100

Le 25 févr. 08 à 01:34, Valentin Villenave a écrit :

Bonjour à tous, bonjour Nicolas,

après avoir passé un certain temps à examiner le code des partitionc
de Lully, Rameau et Couperin avec la plus grande perplexité, j'avoue
ne pas être parvenu à trouver exactement comment effectuer des
substitutions de regexp en Scheme. J'ai bien vu passer des fonctions
regexp-substitute, mais je ne sais pas comment les utiliser.

Voici ce que j'essaye de faire : j'aimerais arriver à sortir
automatiquement le livret de mon opéra, en partant de la même source
que les paroles des chanteurs (en lyricmode). En d'autres termes, j'ai
chaque réplique des personnages dans des variables telles que :

HamletAA= \lyricmode { Cou -- cou. __ _ _ }
TitaniaAA= \lyricmode { Bon -- _ _ jour_! }
HamletAB= \lyricmode { Co -- mment va_? }

...et je voudrais, grâce à deux trois formules magiques, obtenir comme sortie :

     HAMLET
Coucou.

     TITANIA
Bonjour !

     HAMLET
Comment va ?

Ce n'est pas avec des regex que tu t'en sortiras, comme le montre ce
qui suit:

HamletAA = \lyricmode { Cou -- cou. __ _ _ }
\displayMusic \ HamletAA
==>
(make-music 'SequentialMusic
 'elements (list (make-music 'EventChord
                  'elements (list (make-music 'LyricEvent
                                   'duration (ly:make-duration 2 0 1 1)
                                   'text "Cou")
                                  (make-music (quote HyphenEvent))))
                 (make-music 'EventChord
                  'elements (list (make-music 'LyricEvent
                                   'duration (ly:make-duration 2 0 1 1)
                                   'text "cou.")
                                  (make-music (quote ExtenderEvent))))
                 (make-music 'EventChord
                  'elements (list (make-music 'LyricEvent
                                   'duration (ly:make-duration 2 0 1 1)
                                   'text " ")))
                 (make-music 'EventChord
                  'elements (list (make-music 'LyricEvent
                                   'duration (ly:make-duration 2 0 1 1)
                                   'text " ")))))

Il va plutôt s'agir de chercher les infos intéressantes dans cette
expression musicale.

Le problème sera de décider si __ est au milieu ou à la fin d'un mot,
de même pour les _.

Voici une ébauche de fonctions, montrant ces problèmes :

#(define (extract-lyrics music)
  (let ((strings (list))
        (no-space #t))
    (music-map (lambda (m)
                 (cond ((eqv? (ly:music-property m 'name) 'LyricEvent)
                        (let ((str (ly:music-property m 'text)))
                          (set! strings
                                (cons str
                                      (if no-space
                                          strings
                                          (cons " " strings))))
                         (set! no-space #f)))
((eqv? (ly:music-property m 'name) 'HyphenEvent)
                         (set! no-space #t))))
               music)
    (apply string-append (reverse! strings))))

#(define (display-lyrics music)
   (newline)
   (display (extract-lyrics music)))

#(display-lyrics HamletAA)
#(display-lyrics TitaniaAA)
#(display-lyrics HamletAB)
==>
Coucou.
Bon    jour !
Comment va ?

Par ailleurs, il est possible dans l'absolu de faire automatiquement la
liste d'identifiant ayant un certain nom. Mais ici, cela nécessiterait
de modifier le code c++ pour ajouter des accesseurs.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]