tempoHideNote : Bug ? (gelöst)

Begonnen von rgree, Donnerstag, 21. September 2017, 18:01

« vorheriges - nächstes »

rgree

Hallo,

um dafür zu sorgen, dass eine Tempo-Änderung nur für die MIDI-Erzeugung sichtbar ist, habe ich mich an das entsprechende Code-Beispiel gehalten und benutze :
...
\set Score.tempoHideNote = ##t
\tempo 4 = 96
...
Was mich allerdings völlig irritiert: wenn ich im Script danach - wie es eigentlich gute Praxis ist - das Sonderverhalten wieder zurückzusetzen will a la :
...
\set Score.tempoHideNote = ##t
\tempo 4 = 96
\unset Score.tempoHideNote
...
wird die Tempo-Angabe nicht mehr unsichtbar gemacht .

Beispiel zum Ausprobieren:

\version "2.18.0"

\header {
  texidoc = "
To change the tempo in MIDI output without printing anything, make the
metronome mark invisible.

"
  doctitle = "Changing the tempo without a metronome mark"
}
\score {
  \new Staff \relative c' {
    \set Score.tempoHideNote = ##t
    \tempo 4 = 160
    % wenn folgende Zeile aktiviert wird, funktioniert "tempoHideNote = ##t" nicht
    % \unset Score.tempoHideNote 
    c4 e g b
    c4 b d c
    \set Score.tempoHideNote = ##f
    \tempo 4 = 96
    d,4 fis a cis
    d4 cis e d
  }
  \layout { }
  \midi { }
}


Reinhard

harm6

Hallo Reinhard,

kein bug.

Vielmehr setzt Du zwei Befehle zum selben context-property für denselben context zur selben Zeit. Siehe den terminal-output von:

#(define display-current-moment
#{
  \applyContext
    #(lambda (ctx) (format #t "\ncurr-mmt: ~a" (ly:context-current-moment ctx)))
#})

{
  \display-current-moment
  \set Score.tempoHideNote = ##t
  \display-current-moment
  \tempo 4 = 96
  \display-current-moment
  \unset Score.tempoHideNote
}


Sie widersprechen sich, also wird einer mißachtet. Für gewöhnlich gewinnt der letzte.

Ich denke Du willst eher
\once \set Score.tempoHideNote = ##t

Ich bin mir aber nicht sicher, ob das in 2.18. schon verläßlich arbeitet.
Falls nicht setzt das \unset einfach etwas später.

Gruß,
  Harm

rgree