lokales Umstimmen einzelner Töne

Begonnen von erich, Mittwoch, 24. April 2019, 12:08

« vorheriges - nächstes »

erich

Hallo allen!

Mit der Funktion ly:set-default-scale habe ich beispielsweise für die Töne von C-Dur und C-Moll eine reine Intonation global festgelegt, also für die Tonhöhe von C D D♯↑ E↓ F G G♯ A↓ A♯ B↓; dabei bedeuten ↑ und ↓ die Erhöhung bzw Erniedrigung um ein geeignetes Komma.

Wenn ich zu G-Dur und G-Moll übergehen will, muss ich die Töne F und A↓ in F↑ und A umstimmen und einen neuen Ton F♯↓ einfügen.

Für eine Klaviatur sieht das so aus:

beispiel.png

Ich möchte dieses Umstimmen lokal bewerkstelligen: im Notenbild sollen sich die Tonorte der Töne nicht ändern, es soll aber kenntlich gemacht werden, wie sich die Stimmung geändert hat.

Sieht eine oder einer von euch einen Weg, wie man das Umstimmen in LilyPond lokal vornehmen kann?

Ich probiere so was immer in meiner QuintGen-Notation aus, wenn mir das lokale Umstimmen gelingt, kann man es sicherlich auch in die traditionelle Notenschrift übernehmen.

Gruß Erich

Arnold

#1
Hmmmm.....

Tonart-Vorzeichen (\key) mit den Kommata für alle fein-alterierten Grundskalentöne wird ein wenig unübersichtlich.
Ich wüßte auch noch nicht, in welcher Reihenfolge dann (für C-Dur/c-Moll) e‗littleflat, a‗littleflat und b‗littleflat am sinnvollsten aufzulisten wären.

Bei G-Dur/g-Moll kommt dann eine Kombination traditionelle-Alteration + Komma dazu - bisher kann man als darzustellende Vorzeichen in Lilypond nur einzelne Font-Glyphs auswählen, keine (als \markup definierten) Glyph-Kombinationen, z. Bsp.: fis‗littleflat

Und wenn man das ganze auch noch um die fein-alterierten Tonartalterationen ergänzt - ich denke da so etwas wie f‗littlesharp in eckiger Klammer neben dem fis‗littleflat in G-Dur/g-Moll - dann wird's noch unübersichtlicher.


Vielleicht sollte man sich von den Harfen-Pedal-Symbolen inspirieren lassen, und in einem neu geschaffenen Klaviatur-Symbol unter der Tonart (quasi ein \markup unter \key) die geforderten Fein-Alterierungen für jede der zwölf Tasten einer Oktave angeben.
Oder hat dein Instrument schon wie manche Renaissance-Instrumente 13 Tasten je Oktave, die Unterteilung in gis- und as-Taste  ;)


Und Einzugeben wären dann die Noten dann
entweder alle einschließlich der Kommata in den Tonbezeichnungen
oder "verkürzt", und eine MusicMap-Funktion transponiert dann jeden Ton ein wenig "nach deinen Vorstellungen der reinen Stimmung"

Um dann wieder ein einfaches Notenbild zu erhalten, muß man mit einer weiteren MusicMap-Funktion diese Feinalterierungen aufheben (Runden zum nächsten Halbton) - natürlich nur im \score mit \layout aber ohne \midi, während die Midi-Ausgabe von einem \score mit \midi aber ohne \layout erfolgt.


Musik = {
  \key g \major
  \musicMap #FineTuningG {
    g'4 a' b' c'' d'' e'' fis'' g''
  }
  \key c \major
  \musicMap #FineTuningC {
    c'4 d' e' f' g' a' b' c''
  }
  \bar "|."
}

\score {
  \musicMap #RoundToNearestSemitone \Musik
  \layout {}
}

\include "articulate.ly"
\score {
  \articulate \Musik
  \midi {}
}


Arnold

erich

Hallo Arnold,

vielen Dank für deine Anregung!

Mir scheint jedoch, man kann die zu beginn mit  ly:set-default-scale definierte Scala nicht lokal modifizieren. Ich muss also alle Tonhöhen - in meinem Fall 36 - als Scala definieren und dann die Zuordnung der Tonnamen zu dieser Scala temporär vornehmen.

Na, mal sehen, ob das geht.

Gruß Erich

erich

#3
Hallo allen,

ich habe eine erste Lösung gefunden:

die Oktave wird in 36 Töne unterteilt, also 3x so viele wie das Klavier Tasten je Oktave hat; jeder der Töne
C C♯ D D♯ E F F♯ G G♯ A A♯ B  bekommt in QuinGen einen eigenen Tonort; die alterierten Töne werden ohne Versetzungszeichen notiert. Die Altetationen sind also graphisch nicht zu erkennen, sie können jedoch über eine Midi-Anweisung hörbar gemacht werden.

Mit diesen 36 Tönen können 17 reine Dur- und Moll-Scalen dargestellt werden.

\version "2.19.82"
\include "pythagoreisch-eq.ly"

#(ly:set-default-scale (ly:make-scale
'#( 0
-20856/199999 0/199999 20856/199999
0453/199999 91309/199999 112166/199999
182619/199999 203476/199999 224332/199999
273929/199999 294785/199999 315642/199999
386095/199999 406952/199999 427808/199999
477405/199999 498261/199999 519118/199999
589571/199999 610428/199999 631284/199999
680881/199999 701738/199999 722594/199999
772191/199999 793047/199999 813904/199999
884357/199999 905214/199999 926070/199999
975667/199999 996523/199999 1017380/199999
1087833/199999 1108690/199999 1129546/199999)
))

Ces-pitch-names  =
    #`(
        (cise    .  ,(ly:make-pitch -1 5 ))
        (d    .  ,(ly:make-pitch -1 8 ))
        (disee . ,(ly:make-pitch -1  10 ))
        (ee  .  ,(ly:make-pitch -1 14 ))
        (fise     .  ,(ly:make-pitch -1 19 ))
        (g    .  ,(ly:make-pitch -1 23 ))
        (gisee  .  ,(ly:make-pitch -1 25 ))
        (a  .  ,(ly:make-pitch -1 29 ))
        (aisee .  ,(ly:make-pitch -1 31 ))
        (be  .  ,(ly:make-pitch -1 34 ))
     )
   
Ces = #(define-void-function () () (ly:parser-set-note-names  Ces-pitch-names)  #{#})
\score{
  <<
   \new Staff \with {
                                      \remove "Accidental_engraver"
                                      \eClef
                  staffLineLayoutFunction = #(lambda (p) (floor (/ (- (ly:pitch-steps p) 1) 3)))}
 
          \new Voice {\u1
            \Ces  be2 cise' disee' ee'  fise' gisee'  aisee' be' \bar "||"
                     be2 cise' d' ee' fise' g' a' be' \bar "||"\break           }
    >> 
\layout{}
\midi{}
}


Es werden die herkömmlichen Tonnamen verwendet und gegebenenfalls um ein oder zwei e's verlängert, wenn die pythagoreische Tonhöhe um ein oder zwei Kommata erniedrigt sein sollen.

In der default-scale stehen die drei Töne, die sich einen Tonort teilen hintereinander,
so dass durch
staffLineLayoutFunction = #(lambda (p) (floor (/ (- (ly:pitch-steps p) 1) 3)))
der Tonort für QuintGen berechnet wird.

Durch \Ces werden in Lilypond die nachfolgenden Notennamen als zu C♭-Dur oder C♭-Moll gehörende Töne interpretiert; aufs Klavier bezogen werden so 10 Tasten belegt.

Wollte man diese Vorgehensweise auf die herkömmliche Notation anwenden, muss man die staffLineLayoutFunktion geeignet programmieren; das dürfte als Folge der unsystematischen Tonabstände etwas umständlich sein.

Was mir nun noch fehlt: ich möchte die Ces-Anweisung fortlassen können und dann sollen  auch die Versetzungszeichen angezeigt werden.

Gruß Erich