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

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

Re: Bug de LilyPond : \bar "" avec note*a/b


From: Jean ABOU SAMRA
Subject: Re: Bug de LilyPond : \bar "" avec note*a/b
Date: Sun, 16 Dec 2018 18:08:57 +0100

Bonjour,

Je me rends compte que mon exemple, que j'avais voulu simplifier, n'était peut-être pas très clair.

En fait, la musique est écrite sans barres de mesure, mais, comme vous l'avez deviné, j'aimerais quand même profiter des numéros en début de système dans le but de faciliter le travail de répétition. Ceux-ci seraient incrémentés à chaque croche.
Donc, je ne peux pas utiliser \cadenzaOn car cela arrête complètement le Timing comme vous l'avez bien montré. Je ne peux pas non plus supprimer le "Bar_engraver" car je souhaite avoir malgré tout une double barre à la fin du morceau.

Je préférerais que les rondes s'adaptent aux croches plutôt que l'inverse car ce sont elles qui ont une durée fixe ; si je fais rentrer les séries de croches dans les rondes, comme j'ai des nombres de croches différents à chaque fois, elles ne prennent plus le même espace ; de plus, mettre plusieurs croches dans la même mesure pose des problèmes au niveau des sauts de ligne.
Ayant réfléchi à nouveau au problème et fouillé la documentation, j'ai trouvé quelques propriétés d'espacement qui permettent un résultat acceptable.

Mon nouvel exemple se trouve à la fin de ce message.

J'avoue que certaines choses sont un peu tordues mais je n'ai pas trouvé mieux. Il faut :
— définir le chiffrage à 1/8 (pour les numéros de mesure) ;
— le cacher ;
— supprimer les barres de mesure ;
— annuler cette suppression pour la dernière barre de mesure ;
— activer deux propriétés “magiques” du SpacingSpanner pour supprimer l'espace inséré normalement entre deux mesures.

Cordialement,

Jean Abou Samra

\version "2.18.2"
% exemple où l'on a besoin d'une note à cheval sur deux mesures en fin de morceau
% on ne peut pas utiliser \cadenzaOn car on souhaite des numéros de mesure
% on va donc imiter ses effets un par un sans supprimer vraiment les mesures

phraseUne = \relative c' { f8 e f d e c d }
phraseDeux = \relative c' { f8 f g f e d c e f e }

portéeHaut = {
    \phraseUne
    d1*7/8
    \phraseDeux
    d1*10/8
    \phraseUne
    d1*7/8
    \phraseDeux
    d1*11/8
}

portéeBas = {
    s1*7/8
    \transpose d b, \phraseUne
    b1*10/8
    \transpose d b, \phraseDeux
    b1*7/8
    \transpose d b, \phraseUne
    b1*10/8
    \transpose d b, \phraseDeux
    b1*1/8

\layout {
  \context {
    \Staff
    % désactiver l'impression de l'armure
    \omit TimeSignature
    % supprimer les barres de mesure
    \omit BarLine
  }
  \context {
    \Score
    % réglages d'espacement
    \override SpacingSpanner.strict-note-spacing = ##t
    \override SpacingSpanner.uniform-stretching = ##t
  }
}

<<
  \new Staff \relative c' {
    % les numéros de mesure s'incrémenteront à chaque croche
    % de plus, cela fait porter à chaque note ses altérations accidentelles
    % les ligatures automatiques sont désactivées de fait
    \time 1/8
    \portéeHaut
    \undo \omit Staff.BarLine
    \bar "|."
  }
  \new Staff \relative c' {
    \portéeBas
    \undo \omit Staff.BarLine
  }
>>




Le 9 déc. 2018 à 20:02, Valentin Villenave <address@hidden> a écrit :

On 12/9/18, Jean ABOU SAMRA <address@hidden> wrote:
Bonjour,
Merci pour vos réponses rapides.

De rien ; n’oubliez pas d’inclure la liste si vous souhaitez que la
discussion puisse se prolonger de façon plus élargie.

Pour ce qui est du point ou non de « d2 », il est vrai que de le supprimer
fait revenir le fonctionnement à la normale. Toutefois, il ne s’agit pas
d’une faute de frappe mais bien d’un ajout délibéré : il est vrai que
LilyPond gère la situation lorsque le ré est une blanche, mais il relève du
bug qu’il échoue à faire la même chose avec une blanche pointée. D’ailleurs,
selon mes expérimentations,  le problème se produit lorsque la durée du ré
de la portée du bas devient supérieure à celle du do de la portée du haut
(testé à l’aide d’un script qui a généré cent partitions et relevé les
erreurs).

Oui, d’ailleurs peu importe l’ordre des deux portées, le bug se
produit de toute façon.

Plus intéressant : si l’on donne à la commande \bar un argument
qu’elle connaît, le bug n’advient pas.

\bar "|" % -> pas de bug
\bar "||" % -> pas de bug
\bar "|." % -> pas de bug
\bar "n'importequoi" % -> bug
\bar "" % -> bug

C’est ici que réside, à mon sens, le véritable bug : \bar "" est une
syntaxe tout à fait admise et recommandée officiellement, or il se
comporte comme un argument non-reconnu.

Pour ce qui est de trouver un exemple de musique où l’on a besoin de notes
qui chevauchent une mesure à la fin du morceau, voici un aperçu du genre de
musique sur lequel je travaillais :

\version "2.18.2"
% exemple où l'on a besoin d'une note à cheval sur deux mesures en fin de
morceau
% les deux \omit et le \autoBeamOff peuvent se résumer dans un \cadenzaOn
% cela évite l’espacement anormal sur la deuxième portée
% et cela fige la mesure en cours
<<
 \new Staff \relative c' {
   % désactiver l'impression de l'armure et des barres de mesure
   \omit Staff.TimeSignature
   \omit Staff.BarLine
   % désactiver les ligatures automatiques
   \autoBeamOff
   f8 e f d e c d d1*15/8
   \undo \omit Staff.BarLine
   \bar "|."
 }
 \new Staff \relative c' {
   \omit Staff.TimeSignature
   \omit Staff.BarLine
   \autoBeamOff
   r1*7/8 f8 e f d e c d d1
   \undo \omit Staff.BarLine
 }


Il s’agit d’une notation un peu ancienne transcrite avec des glyphes récents
(d’où le choix dans l'exemple de la phrase du Dies Iræ). La ronde n’indique
pas vraiment une durée de huit croches mais une note longue, de durée
étirable, et l’alignement vertical avec l’autre portée doit indiquer
l’endroit où l’on reprend.

Oui, c’est exactement ce à quoi sert \cadenzaOn comme vous le faites
remarquer. Sauf que ce que vous faites ici ne correspond pas
exactement à ce que fait \cadenzaOn, comme vous pouvez le voir dans le
fichier property-init.ly dans le répertoire ly/ de votre installation
de LilyPond :

cadenzaOn  = \set Timing.timing = ##f

cadenzaOff = \set Timing.timing = ##t

cadenzaOn a pour effet de désactiver entièrement (et pour toutes les
voix, toutes les portées) le compteur de temps et de mesures ; il n’y
a donc plus de barres de mesure ni de ligatures.

Notez bien que dans cet exemple, les mesures sont bien présentes, même si
l’on a désactivé l’affichage de l’armure et des barres de mesure. Pour
preuve, il y a un espace anormal sur la deuxième portée entre la première et
la deuxième croche, à l’endroit où l’on devrait normalement trouver une
barre de mesure.

Cet inconvénient ne se produirait pas avec cadenzaOn, comme vous
l’avez fait remarquer. Une autre possibilité serait d’enlever
complètement le graveur de barres de mesure (ce qui n’affecte pas la
double barre finale) :

\layout {
 \context {
   \Score
   \remove Default_bar_line_engraver
 }
}

Néanmoins, le bug constaté semble provenir de causes plus profondes que le
chevauchement d’une mesure en fin de morceau, comme le montre la
constatation plus haut : dans la nouvelle formulation proposée — qui est
effectivement étonamment simple — le ré blanche pointée ne traverse pas la
mesure à 4/4. De plus, j’avais été confronté au problème en utilisant
\cadenzaOn plutôt que les deux \omit , or la commande \cadenzaOn est censée
figer la mesure en cours, donc pas de chevauchement de mesure.

Donc si je comprends bien, vous avez besoin que les mesures existent
quand même, sans qu’on n’en voie aucune trace ? (Quid des numéros de
mesure en début de système, par exemple ?)

Posé comme cela, il me semble que le problème est moins d’adapter la
durée des rondes que celle des croches, de façon à les faire rentrer
dans des mesures à 4 temps, comme ceci :

 f8*8/7 e f d e c d d1

Ou bien en utilisant \scaleDurations :

<<
 \new Staff \relative c' {
   \omit Staff.TimeSignature
   \omit Staff.BarLine
   \autoBeamOff
   \scaleDurations 8/7 {f8 e f d e c d} d1*2
   \scaleDurations 8/9 {f8 g f e d c e f e} d1*2
   \undo \omit Staff.BarLine
   \bar "|."
 }
 \new Staff \relative c' {
   \omit Staff.TimeSignature
   \omit Staff.BarLine
   \autoBeamOff
   r1
   \scaleDurations 8/7 {f8 e f d e c d} d1
   r
   \scaleDurations 8/9 {f8 g f e d c e f e} d1
   \undo \omit Staff.BarLine
 }


D’ailleurs je viens d’ajouter le snippet suivant sur le LSR, qui
offrirait une fonction encore plus simple d’utilisation que
\scaleDurations :

\scaleToLength 1 {f8 e f d e c d}

http://lsr.di.unimi.it/LSR/Item?id=1077

En tout cas puisque vous n’utilisez pas \cadenzaOn, vous avez la
possibilité d’utiliser bel et bien les mesures à quatre temps pour la
synchronisation verticale entre les voix, mais en adaptant ce qui se
passe à l’intérieur plutôt que de laisser les barres de mesure
(invisibles ou non) tomber au milieu des croches.

Cordialement,
V. Villenave.


reply via email to

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