-
Notifications
You must be signed in to change notification settings - Fork 0
Motif
Ils permettent de travailler plus facilement avec les partitions.
Ce sont des groupes de notes (ou même une note seule) qu'on peut définir plus précisément grâce à toutes les méthodes que les motifs possèdent, ou qu'on peut dupliquer en les modifiant.
@usage simple :
instance_motif = Motif::new <donnees>
@exemple :
mon_motif = Motif::new "c d e"
@usage complexe :
instance_motif = Motif::new(
:motif => <motif>,
:octave => <octave>,
:duree => <duree>
)
<motif>
, ci-dessus, est une suite de notes, au format ou non LilyPond, en note anglo-saxonnes ou italienne.
Par exemple :
Motif::new "ré mi fa# sib"
Motif::new "d e fis bes"
<octave>
est l'indication de l'octave à laquelle, par défaut, le motif doit être joué. Mais il peut être facilement modifié à l'écriture.
La valeur par défaut de l'octave (i.e. quand on ne la précise pas) est de 3.
<durée>
, qu'on peut aussi définir à l'aide de la clé :duration
est la durée du motif (donc de chaque note), au format LilyPond (1 pour la ronde, 2 pour la blanche, 4 pour la noire, etc.).
En supposant que PAUL
est un musicien défini dans l'ORCHESTRE :
def score
...
motif_pour_paul = Motif::new "ré8( fa la sib la2)"
PAUL << motif_pour_paul
..
end
ou
def score
...
PAUL.add motif_pour_paul
...
On peut joindre un motif à un autre motif :
<motif>.join(<autre motif>)
Le motif <motif>
contiendra alors les notes des deux motifs.
Mais on peut également créer un nouveau motif (pour préserver le premier) avec la directive :
<nouveau motif>.join(<autre motif>, :new => false)
Par exemple :
motif_un = Motif::new( :motif => "d f a r", :octave => 3)
motif_de = Motif::new( :motif => "r d a f", :octave => 3)
nouveau_motif = motif_un.join(motif_de, :new => true)
# => motif_un contiendra toujours "d f a r"
# nouveau_motif contiendra "d f a r r d, a f"
Tandis que :
motif_un.join(motif_de, :new => false)
# ou simplement :
motif_un.join motif_de
# => motif_un contiendra à présent : "d f a r r d, a f"
mon_motif_do = Motif::new "c e g"
mon_motif_re = mon_motif_do.plus(2)
# => Motif contenant "d fis a"
mon_motif_sibemol = mon_motif_do.moins(2)
puts mon_motif_sibemol.class
# => <#Motif xxxxx @motif="bes d f" @octave=2 @duration=4...>
Le nombre en paramètre de plus
et moins
correspond au nombre de demi-tons dont il faut baisser au augmenter le motif.
Noter un point très important ici : pour ces méthodes, un NOUVEL OBJET motif est créé. Le motif mon_motif_do
ci-dessus est laissé intact, contrairement à d'autres méthodes qui agissent directement sur le motif lui-même.
On peut néanmoins contourner ce comportement en utilisant en second paramètres : :new => false
:
motif_do = Motif::new "c e g"
motif_re = motif_do.plus(2)
# motif_do.to_s => "c e g" -- il est inchangé
# motif_re.to_s => "d fis a" -- un nouveau motif a été créé
motif_re = motif_do.plus(2, :new => false)
# motif_do.to_s => "d fis a" -- cette fois, le motif_do a été modifié
Les méthodes suivantes transforment l'objet lui-même, SAUF si le second argument contient :new => true
(c'est le contraire de ce que nous venons de voir avec moins
et plus
).
<motif>.legato
Ajoute une liaison d'expression (pas de durée) du début à la fin des notes du motif.
mo = Motif::new "a b c d e"
mo.legato
# mo.to_s => "a( b c d e)"
<motif>.surlegato
Ajoute une "sur-liaison d'expression" du début à la fin des notes du motif. Cette deuxième méthode permet de lier expressivement des notes qui contiennent déjà des liaisons d'expression.
Par exemple :
motif_avec_liaisons = Motif::new "a b( c d) e( f g)"
motif_avec_liaisons.surlegato
# .to_s => "a\( b( c d) e( f g)\)"
L'utilisation de legato
ci-dessus produirait une erreur lilypond.
(note : sauf si le second argument contient :new => false
)
<motif>.plus(<demi-tons>[, <params>])
Hausse du nombre de demi-tons voulus toutes les notes du motif, en renvoyant par défaut une nouvelle instance de Motif.
<motif>.moins(<demi-tons>[, <params>])
Baisse du nombre de demi-tons voulus toutes les notes du motif, en renvoyant par défaut une nouvelle instance de Motif.
<motif>.crescendo([<params>])
Crée un crescendo depuis la première note du motif jusqu'à la dernière.
<params> peut contenir :
:start => '<dynamique>' # valeur dynamique de départ, p.e. 'mf', 'ffff', 'pp', etc.
:end => '<dynamique>' # valeur dynamique de fin du crescendo, p.e. idem
:new => false # Modifie l'objet lui-même
<motif>.decrescendo([<params>])
Crée un decrescendo depuis la première note du motif jusqu'à la dernière.
<params> peut contenir les mêmes valeurs que crescendo
ci-dessus.