Autor Thema: Vorzeichen in Akkorden  (Gelesen 2976 mal)

chf

  • Member
Vorzeichen in Akkorden
« am: Montag, 5. März 2012, 17:05 »
Liebe Freunde,

wieder ein kleines großes Problem:
Es ist keine Tonart vorgegeben. Ich setze alle Vorzeichen konkret. Es wechseln also
\override Staff.Accidental #'transparent = ##t  und - - - = ##f.
Im folgenden Beispiel möchte ich im 2. Akkord bei "b" kein Auflösungszeichen sehen.

\version "2.14.2"
\relative c' {
<bes! d e>1 <b d es!>

Ich habe es auch mit zweistimmiger Notierung versucht - das Ergebnis ist "alles oder nichts".
Gibt es dafür eine Lösung?

Gruß
chf

ding-dong

  • Member
Re: Vorzeichen in Akkorden
« Antwort #1 am: Montag, 5. März 2012, 17:26 »
Zitat
Im folgenden Beispiel möchte ich im 2. Akkord bei "b" kein Auflösungszeichen sehen.

ich sehe keines ;)

warum erwartest du eines?

chf

  • Member
Re: Vorzeichen in Akkorden
« Antwort #2 am: Montag, 5. März 2012, 18:49 »
Entschuldige - da muss ich doch ein wenig weiter ausholen...

harm6

  • Member
Re: Vorzeichen in Akkorden
« Antwort #3 am: Montag, 5. März 2012, 21:54 »
Hallo Christa,

ein override-Befehl wirkt auf alle Ereignisse die zu einem bestimmten Zeitpunkt stattfinden ("alles oder nichts"). Man muß also einen tweak-Befehl bemühen. Es ist allerdings gar nicht so einfach das hinzukriegen, so daß es lange Zeit als unmöglich galt. Seit ein paar Jahren gibt es aber eine Lösung, die hier im Forum auch schon verschiedentlich angewendet wurde.

-> https://liarchiv.joonet.de/index.php?topic=876.msg4825#msg4825
-> https://liarchiv.joonet.de/index.php?topic=345.msg2008#msg2008

Zu Deinem eigentlichen Problem:
Folgende Funktion erlaubt das selektive unsichtbar-machen von Vorzeichen in einem Akkord.

\version "2.14.2"

transpAcc =
#(define-music-function (parser location music) (ly:music?)

(define (transparent-accidental note-grob)
  (let ((accidental (ly:grob-object note-grob 'accidental-grob)))
    (if (not (null? accidental))
      (ly:grob-set-property! accidental 'transparent #t))))
     
         (set! (ly:music-property music 'tweaks)
(acons 'before-line-breaking (lambda (grob) (transparent-accidental grob))
         (ly:music-property music 'tweaks)))
   music)

\relative c' {
        <\transpAcc cis \transpAcc eis! \transpAcc gis? cis>1
}

HTH,
  Harm
« Letzte Änderung: Montag, 5. März 2012, 22:49 von harm6 »

harm6

  • Member
Re: Vorzeichen in Akkorden
« Antwort #4 am: Montag, 5. März 2012, 22:14 »
Hallo nochmal,

vielleicht ist es Dir ja lieber die Vorzeichen nicht nur unsichtbar zu machen, sondern selektiv ganz zu entfernen, denn auch unsichtbare Vorzeichen nehmen Platz ein.
-> PNG

\version "2.14.2"

transpAcc =
#(define-music-function (parser location music) (ly:music?)

(define (transparent-accidental note-grob)
  (let ((accidental (ly:grob-object note-grob 'accidental-grob)))
    (if (not (null? accidental))
      (ly:grob-set-property! accidental 'transparent #t))))
     
         (set! (ly:music-property music 'tweaks)
(acons 'before-line-breaking (lambda (grob) (transparent-accidental grob))
         (ly:music-property music 'tweaks)))
   music)

\relative c' {
        <\transpAcc cis \transpAcc eis! \transpAcc gis? cis>1
}

killAcc =
#(define-music-function (parser location music)(ly:music?)

(define (suppress-accidental note-grob)
  (let ((accidental (ly:grob-object note-grob 'accidental-grob)))
    (if (not (null? accidental))
      (ly:grob-suicide! accidental))))
     
         (set! (ly:music-property music 'tweaks)
(acons 'before-line-breaking (lambda (grob) (suppress-accidental grob))
         (ly:music-property music 'tweaks)))
   music)
   
\relative c' {
        <\killAcc cis \killAcc eis! \killAcc gis? cis>1



Gruß,
  Harm

chf

  • Member
Re: Vorzeichen in Akkorden
« Antwort #5 am: Dienstag, 6. März 2012, 12:01 »
Danke!!!

Arnold

  • Member
Re: Vorzeichen in Akkorden
« Antwort #6 am: Donnerstag, 8. März 2012, 08:48 »
Nur noch so ein Gedankenspiel:

Wenn alle Vorzeichen sowieso explizit angegeben werden sollen (Ausrufezeichen hinter dem Pitch), dann könnte man sich auch einen Vorzeichenmodus erstellen, der erst einmal gar keine Vorzeichen anzeigt.

Und zum Korrektur-Lesen, würde ich dann die Notenköpfe je nach Vorzeichen (im Pitch der Notenköpfe) anders färben. Das dürfte mit einer globalen »before-line-breaking-prozedur« machbar sein, vielleicht muß ich aber noch nach den korrekten Bezeichnern für »besondere Notenköpfe« (z. Bsp. im pitchedTrill) suchen.

Arnold

harm6

  • Member
Re: Vorzeichen in Akkorden
« Antwort #7 am: Donnerstag, 8. März 2012, 10:32 »
Hallo Arnold,

Zitat
Wenn alle Vorzeichen sowieso explizit angegeben werden sollen (Ausrufezeichen hinter dem Pitch), dann könnte man sich auch einen Vorzeichenmodus erstellen, der erst einmal gar keine Vorzeichen anzeigt.

wußte ich doch, daß mit sowas kommst :)

Aber wenn man den Weg über den Vorzeichenmodus beschreiten möchte, so meine ich, daß man anstatt eine Neudefinition zu versuchen auch mit: #(set-accidental-style 'forget) hinkommen müßte. Und um es wieder zurückzusetzen #(set-accidental-style 'default)

Das gilt für 2.14.2.
Für 2.15.31 kann man einfach \accidentalStyle "forget" bzw \accidentalStyle "default" schreiben.

(Es gibt sooo viele neue, schöne bzw verbesserte Features in 2.15. !!)

Gruß,
  Harm

Arnold

  • Member
Re: Vorzeichen in Akkorden
« Antwort #8 am: Donnerstag, 8. März 2012, 12:35 »
Ja,

mein Gedanke war, wenn ich »forget« benutze, bekommen ich vor jedem tonleiterfremden Pitch ein Vorzeichen, und kann es nur mit einem \tweak beforlinebreaking innerhalb eines Akkords wieder entfernen.
Wenn ich das «forget« zu einem »never« clone, dann kann ich mit einem Ausrufezeichen das Vorzeichen hinzufügen.

Aber vielleicht sollten wir folgenden Verbesserungsvorschlag ausarbeiten:
1) Ein »kopfstehendes Ausrufezeichen« (bin mir nicht sicher, ob das Zeichen eine gute Wahl ist) nach dem Pitch soll bewirken, daß das Vorzeichen gar nicht dargestellt wird.
2) Ein »normales Ausrufezeichen« soll immer bewirken, daß das Vorzeichen dargestellt wird, und zwar ohne Klammer, auch wenn es beim \accidentalSyle "modern-cautionary" (oder ähnlichem) als eingeklammertes Erinnerungs-Vorzeichen dargestellt würde.
- Da ich aber vermute, daß man dafür auch den C-Code anpassen müßte, wird's wohl nicht so einfach gleich einen Lösungsvorschlag mitzuliefern.
 ;)