Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: erich am Samstag, 20. Februar 2016, 09:22

Titel: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Samstag, 20. Februar 2016, 09:22
Hallo allen

Ich habe in einem kleinen LP-Script versucht einen Fehler zu lokalisieren
 \version "2.18.2"

#(define-public GES     37291/100003)
#(define-public G        8798/100003)

pitch-names =
  #`(
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
    ) 

pitchGlyphs =
  #`(
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
    )
 
accidentalGlyphs =
  #`(
     (-37291/100003 . "accidentals.natural") ; Gb
     (  8798/100003 . "accidentals.natural") ; G
    )        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
}}

#(ly:parser-set-note-names parser pitch-names)

\score {
     \new Voice {\time 2/2 ges'2 g'| ges'2 g'! | ges'2 g'? }
     \layout {}
     \midi {}
}

dieses rendert zu
(http://www.kielnet.net/home/erich.meyer/fehlersuche.png)

Wie man sieht, fehlt in den beiden ersten Takten das Auflösungszeichen vor den G's; der dritte Takt zeigt eine nicht ganz korrekte Umgehung.
Jedoch gibt die MIDI-Ausgabe die Töne richtig wieder.

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: fugenkomponist am Samstag, 20. Februar 2016, 11:25
Könntest du einen Bug-Report (auf englisch) erstellen? (siehe Punkt 3 hier (http://lilypond.org/bug-reports.de.html)) Der Fehler scheint nämlich noch nicht bekannt zu sein.

Edit: Bin mir nicht hundertprozentig sicher, ob man das irgendwie umgehen kann, aber meiner Meinung nach sollte das schon standardmäßig funktionieren, deshalb würd ich es als bug einstufen.
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Sonntag, 21. Februar 2016, 06:50
Ich habe einen bugreport gepostet.
Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: fugenkomponist am Sonntag, 21. Februar 2016, 13:13
Danke. Ich habe die Bug-Liste abonniert und sag bescheid, wenn sich was ergibt. Laut David Kastrup ist das so gewollt, weil du ja für G kein Vorzeichen ansagst (per ""). Dann wird auch nie eins gesetzt, deswegen hab ich jetzt mal nachgefragt, obs überhaupt ne Möglichkeit gibt, LilyPond etwas anderes als „immer“ und „nie“ beizubringen …
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: harm6 am Sonntag, 21. Februar 2016, 19:51
Der ganze Thead zum bug-report ist nachlesbar:
http://lilypond.1069038.n5.nabble.com/vergessenes-Auflosungszeiche-Fehler-in-LP-td187494.html (http://lilypond.1069038.n5.nabble.com/vergessenes-Auflosungszeiche-Fehler-in-LP-td187494.html)

David hat natürlich recht.

Allerdings fehlt ihm natürlich der Kontext zum ganzen Projekt "reine und andere Stimmungen" welches hier im Forum an unterschiedlichen Stellen thematisiert wurde.

Ich vermute mal, das Problem sollte man anders angehen.
Aus irgendeinem Grund funktioniert bei mir momentan kein einziges  Program zum abspielen von midis, insoweit kann ich meine Vermutungen leider nicht überprüfen, nichtsdestotrotz hier sind sie:

Deine Definition des Tones "g" weicht ab vom 5. Ton der default-Skala, die mittels
(ly:set-default-scale (ly:make-scale #(0 1 2 5/2 7/2 9/2 11/2)))
in lily.scm gesetzt wird.
Eine temperierte Skala.

Insoweit sieht LilyPond eine Alteration, sobald Du "g" schreibst. Das Zeichen für diese Alteration ist von Dir mit "" angegeben, also kein sichtbarer output.

Ich habe versucht das zu überprüfen, indem ich zusätzlich noch ein temperiertes "my-g" eingefügt habe, mit einem ausgefallenen Zeichen für das Auflösezeichen. ;)

\version "2.18.2"

#(define-public GES     37291/100003)
#(define-public G        8798/100003)

pitch-names =
  #`(
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
      (my-g . ,(ly:make-pitch -1 4    0))
    )

pitchGlyphs =
  #`(
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "accidentals.natural") ; G
      (0             . "scripts.turn")                       ; my-g
    )
 
accidentalGlyphs =
  #`(
     (-37291/100003 . "accidentals.flat") ; Gb
     (  8798/100003 . "accidentals.natural") ; G
     (0             . "scripts.turn")                ; my-g
    )        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
  }
}

#(ly:parser-set-note-names parser pitch-names)

\new Voice { \time 2/2 g'1 ges'2 g'| ges'2 g'! | ges'2 g'? g'1 }

\new Voice { \time 2/2 my-g'1 ges'2 my-g' | ges'2 my-g'! | ges'2 my-g'? my-g'1 }

\new Voice { \time 2/2 g'1 ges'1 my-g' ges'2 my-g' }

Ich denke deshalb Du solltest bei der default-Skala ansetzen, diese verändern, so daß der pitch für "g" wirklich 0 als Alteration ergibt.
Die Versetzungszeichen dann als Abweichung von dieser Skala...


HTH,
  Harm
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Sonntag, 21. Februar 2016, 22:38
Hallo Harm,

ich freue mich, dass Du Dir die Sache angesehen hast.

Ich habe versucht, die Einwände gegen mein Vorbringen zu verstehen; ich glaube, es ist eine missbräuchliche Anwendung von LP, die ich intendiere.
Ich definiere meine   reine f-moll-Scala relativ zu der üblichen und möchte dabei, dass sie auf A mit 440 Hz abgestimmt ist. Das A hat bei mit daher eine  Abweichung von 1/100003 Cent also quasi keine. Durch die Verwendung von 100003 im Nenner - einer Primzahl -, vermeide ich eine Kürzung der Brüche und erhalte so die von mir gewählten Werte, auch wenn ich sie mit \displayMusic ausgebe.

Hier nun mein hoffentlich etwas aussagekräftiges Beispiel:
\version "2.18.2"

\paper {
 line-width = 190\mm
}

\header {
 title =   "Impromptu in f-moll"
 subtitle = "D 935-1 (Opus 142 No 1.) Franz Schubert"
}

#(define-public CES     38269/100003)
#(define-public C        7821/100003)
#(define-public DX      36314/100003)
#(define-public D        9776/100003)
#(define-public EX      34359/100003)
#(define-public E         978/100003)
#(define-public FES     39246/100003)
#(define-public F        6843/100003)
#(define-public FIS     52934/100003)
#(define-public GES     37291/100003)
#(define-public G        8798/100003)
#(define-public AX      35337/100003)
#(define-public A           1/100003)
#(define-public BX      44134/100003)
#(define-public B        1957/100003)

pitch-names =
  #`(
      (ces  . ,(ly:make-pitch -1 0 (- CES)))
      (c    . ,(ly:make-pitch -1 0    C))
      (dx   . ,(ly:make-pitch -1 1 (- DX)))
      (d    . ,(ly:make-pitch -1 1    D))
      (ex   . ,(ly:make-pitch -1 2 (- EX)))
      (e    . ,(ly:make-pitch -1 2    E))
      (fes  . ,(ly:make-pitch -1 3 (- FES)))
      (f    . ,(ly:make-pitch -1 3    F))
      (fis  . ,(ly:make-pitch -1 3    FIS))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
      (ax   . ,(ly:make-pitch -1 5 (- AX)))
      (a    . ,(ly:make-pitch -1 5    A))     
      (bx   . ,(ly:make-pitch -1 6 (- BX)))
      (b    . ,(ly:make-pitch -1 6    B))
    ) 
 
 
pitchGlyphs =
  #`( ; 100003 is a prime number
      (-38269/100003 . "accidentals.flat") ; Cb
      (  7821/100003 . "") ; C
      (-36314/100003 . "accidentals.flat") ; Dx = Db
      (  9776/100003 . "") ; D
      (-45112/100003 . "accidentals.flat") ; Eb
      (-34359/100003 . "accidentals.flat.arrowup") ; Ex = E↑b
      (   978/100003 . "accidentals.natural") ; E
      (-39246/100003 . "accidentals.flat") ; Fb
      (  6843/100003 . "") ; F
      ( 52934/100003 . "accidentals.sharp") ; F#
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
      (-35337/100003 . "accidentals.flat.arrowup") ; Ax = A↑b
      (-46091/100003 . "accidentals.flat") ; Ab
      (     1/100003 . "") ; A equivalent zu 440 Hz 1/100003 ~ 0
      (-44134/100003 . "accidentals.flat") ; Bx = Bb
      (  1957/100003 . "") ; B
    )
 
accidentalGlyphs =
  #`((  8798/100003 . "accidentals.natural")
     (     1/100003 . "accidentals.natural")
     (  1957/100003 . "accidentals.natural")
     (  6843/100003 . "accidentals.natural")
     (   978/100003 . "accidentals.natural")
     (  9776/100003 . "accidentals.natural")
     (  7821/100003 . "accidentals.natural")
     (-37291/100003 . "accidentals.natural")
    )        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
    \override AccidentalCautionary.parenthesized = ##f
}}

#(ly:parser-set-note-names parser pitch-names)


\score {
  \new PianoStaff
  <<
     \new Voice { \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX))) 
       \times 2/3 {c'16 [f' ax']} c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]| % 1
       f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 | % 2
       bx8. c'16 ax8. bx16 ges8. ax 16 f8. g?16| % 3
       e8 r8 <g' bx' dx''>8 r8 r2| % 4
     }
     
    \new Voice { \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
        << {\clef "bass"
          <f, ax>2. <g, c>4 | % 1
          ax, a, bx, c | % 2
          dx c <bx, dx> <ax, c>|}\\
         {\clef "bass" \stemDown
            <f,~ c>1 <f,~ f> <f, f>2 s2 |}
       >> % 3
       <g, bx,>8 r <ex g bx dx'>8 r8 r2 | % 4
        }
  >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=100}
}

(http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.png)
Der "Fehler" tritt im letzen Ton im dritten Takt auf; ich vermeide ihn durch ein work around
http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.mp3 (http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.mp3)


Soll ich damit die Kollegen vom LP-Team weiterhin behelligen? Ich habe vor, eine bessere Darstellung auf meiner homepage zu veröffentlichen; vielleicht ist so mein Anliegen besser  zu vermitteln. Es ist ja nicht ganz trivial, was mir da vorschwebt, und scheint nicht im Horizont der Entwickler zu liegen. Das ist nicht verabsetzend gemeint!

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Sonntag, 21. Februar 2016, 22:44
Hallo Harm,

ich freue mich, dass Du Dir die Sache angesehen hast.

Ich habe versucht, die Einwände gegen mein Vorbringen zu verstehen; ich glaube, es ist eine missbräuchliche Anwendung von LP, die ich intendiere.
Ich definiere meine   reine f-moll-Scala relativ zu der üblichen und möchte dabei, dass sie auf A mit 440 Hz abgestimmt ist. Das A hat bei mit daher eine  Abweichung von 1/100003 Cent also quasi keine. Durch die Verwendung von 100003 im Nenner - einer Primzahl -, vermeide ich eine Kürzung der Brüche und erhalte so die von mir gewählten Werte, auch wenn ich sie mit \displayMusic ausgebe.

Hier nun mein hoffentlich etwas aussagekräftiges Beispiel:
\version "2.18.2"

\paper {
 line-width = 190\mm
}

\header {
 title =   "Impromptu in f-moll"
 subtitle = "D 935-1 (Opus 142 No 1.) Franz Schubert"
}

#(define-public CES     38269/100003)
#(define-public C        2721/100003)
#(define-public DX      36314/100003)
#(define-public D        9776/100003)
#(define-public EX      34359/100003)
#(define-public E         978/100003)
#(define-public FES     39246/100003)
#(define-public F        6843/100003)
#(define-public FIS     52934/100003)
#(define-public GES     37291/100003)
#(define-public G        8798/100003)
#(define-public AX      35337/100003)
#(define-public A           1/100003)
#(define-public BX      44134/100003)
#(define-public B        1957/100003)

pitch-names =
  #`(
      (ces  . ,(ly:make-pitch -1 0 (- CES)))
      (c    . ,(ly:make-pitch -1 0    C))
      (dx   . ,(ly:make-pitch -1 1 (- DX)))
      (d    . ,(ly:make-pitch -1 1    D))
      (ex   . ,(ly:make-pitch -1 2 (- EX)))
      (e    . ,(ly:make-pitch -1 2    E))
      (fes  . ,(ly:make-pitch -1 3 (- FES)))
      (f    . ,(ly:make-pitch -1 3    F))
      (fis  . ,(ly:make-pitch -1 3    FIS))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
      (ax   . ,(ly:make-pitch -1 5 (- AX)))
      (a    . ,(ly:make-pitch -1 5    A))     
      (bx   . ,(ly:make-pitch -1 6 (- BX)))
      (b    . ,(ly:make-pitch -1 6    B))
    ) 
 
 
pitchGlyphs =
  #`( ; 100003 is a prime number
      (-49022/100003 . "accidentals.flat") ; Cb
      (  7821/100003 . "") ; C 
      (-47067/100003 . "accidentals.flat") ; Dx
      (  9776/100003 . "") ; D 
      (-55866/100003 . "accidentals.flat") ; Eb
      (-45112/100003 . "accidentals.flat.arrowup") ; Ex
      (   978/100003 . "accidentals.natural") ; E 
      (-50000/100003 . "accidentals.flat") ; Fb
      (  6843/100003 . "") ; F
      ( 63688/100003 . "accidentals.sharp") ; F#
      (-48045/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
      (-56843/100003 . "accidentals.flat") ; Ab
      (-46090/100003 . "accidentals.flat.arrowup") ; Ax
      (     1/100003 . "") ; A
      (-54888/100003 . "accidentals.flat") ; Bx
    )
 
accidentalGlyphs =
  #`(
      (-49022/100003 . "accidentals.natural") ; Cb 
      (-47067/100003 . "accidentals.natural") ; Dx
      (  9776/100003 . "accidentals.natural") ; D
      (-55866/100003 . "accidentals.natural") ; Eb
      (-45112/100003 . "accidentals.natural") ; Ex
      (   978/100003 . "accidentals.natural") ; E 
      (-50000/100003 . "accidentals.natural") ; Fb
      (  6843/100003 . "accidentals.natural") ; F#
      (-48045/100003 . "accidentals.natural")        ; Gb
      (  8798/100003 . "accidentals.natural") ; G
      (-56843/100003 . "accidentals.natural") ; Ab
      (-46090/100003 . "accidentals.natural") ; Ax
      (     1/100003 . "accidentals.natural") ; A
      (-54888/100003 . "accidentals.natural") ; Bx
    )        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
    \override AccidentalCautionary.parenthesized = ##f
}}

#(ly:parser-set-note-names parser pitch-names)


\score {
  \new PianoStaff
  <<
     \new Voice { \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX))) 
       \times 2/3 {c'16 [f' ax']} c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]| % 1
       f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 | % 2
       bx8. c'16 ax8. bx16 ges8. ax 16 f8. g?16| % 3
       e8 r8 <g' bx' dx''>8 r8 r2| % 4
     }
     
    \new Voice { \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
        << {\clef "bass"
          <f, ax>2. <g, c>4 | % 1
          ax, a, bx, c | % 2
          dx c <bx, dx> <ax, c>|}\\
         {\clef "bass" \stemDown
            <f,~ c>1 <f,~ f> <f, f>2 s2 |}
       >> % 3
       <g, bx,>8 r <ex g bx dx'>8 r8 r2 | % 4
        }
  >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=100}
}

(http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.png)
Der "Fehler" tritt im letzen Ton im dritten Takt auf; ich vermeide ihn durch ein work around
http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.mp3 (http://www.kielnet.net/home/erich.meyer/Schubert_Beispiel.mp3)


Soll ich damit die Kollegen vom LP-Team weiterhin behelligen? Ich habe vor, eine bessere Darstellung auf meiner homepage zu veröffentlichen; vielleicht ist so mein Anliegen besser  zu vermitteln. Es ist ja nicht ganz trivial, was mir da vorschwebt, und scheint nicht im Horizont der Entwickler zu liegen. Das ist nicht verabsetzend gemeint!

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: Arnold am Dienstag, 23. Februar 2016, 10:24
Hallo,

ich habe mir die Details zwar bisher nicht angesehen, nur etwas die Beschreibungen gelesen, trotzdem möchte ich mein Verständnis dieses Problems mitteilen.

Es soll die reine Stimmung auf einer gleichschebend termperierten Skala dargestellt werden. Dadurch ergeben sich teilweise extrem kleine Abweichungen gegenüber den Skalentönen, z. Bsp. 0,1 Cent.
Der Zielkonflikt entsteht nun, da man mehrere »algebratisch berechnete, minimal unterschiedliche, aber fast gleiche Tonhöhen« gleich darstellen will, und auch in der Darstellung mit dem einen Skalenton gleichsetzen will.

Vielleicht wäre ein brauchbarer Workaround (für den Notendruck, nicht für die Midi-Ausgabe) doch eine MusicMap-Funktion, welche alle Pitches auf den nächstliegenden Vorzeichenschritt (z. Bsp. Viertelton) hinrundet, und den dadurch entstandenen Versatz als \finger vor den Notenkopf setzt.

Arnold.
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Dienstag, 23. Februar 2016, 12:50
Hallo Arnold

Die Darstellung auf meiner homepage bedraf einer Überarbeitung; solltest Du Dich auf diese beziehen, könnte es zu Missverständnissen kommen; die Arbeit ist bei mir noch sehr im Fluss.

Was hat es mit den geringen Abweichungen der Skalentöne auf sich und warum das überhaupt:

Ich verwende LP ingewisserweise missbräuchlich; daher rühren einige Komplikationen.

LP verwendet die Alterationen, um die Versetzungszeichen zu bestimmen und zwar werden diese für alle Tonstufen (gemeint sind Notenlinien und Zwischenräume) einheitlich festgelegt. Eine Alteration von 1/2 führt dann immer zu einem # als Versetzungszeichen.

Ich verwende aber die Alterationen auch zu einer differierenden Stimmung; die Alterationen haben daher zwei Bedeutungen gleichzeitig; es kann vorkommen, dass eine Alteration in meinem Sinne nicht notwendigerweise immer das gleiche Versetzungszeichen zur Folge haben soll. Um hier eine Unterscheidung treffen zu können, wähle ich 100003 (Primzahl!!!) als Nenner für die Brüche und erhalte dadurch eine "übertriebene" Genauigkeit für die Tonhöhen; es macht also nichts, wenn ich die Zähler der Brüche in der letzten Stelle variiere und so unterschiedliche Versetzungszeichen ausfiltern kann.

Um mir das Leben beim Notenschreiben in LP zu erleichtern, nutze ich Vorzeichen: die Töne, beispielsweise E↓# (um ein syntonisches Komma erniedrigt und um einen Halbton erhöt), erhalten dann einen einfachen Tonnamen beispielsweise ex; alle Tonnamen für Töne mit Vorzeichen erhalten dieses x; ich muss mir daher weder neue Tonnamen ausdenken noch mir solche merken.

Die Reine Stimmung muss in der Darstellung nicht direkt zum Ausdruck kommen; ich meine, die Verwendung von Vorzeichen hat sich in der musikalischen Praxis sehr bewährt und sollte beibehalten werden. Mir geht es vornehmlich darum, Musik in Reiner Stimmung setzen  und als MIDI-Ausgabe rendern zu können.

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: Arnold am Dienstag, 23. Februar 2016, 15:56
Hallo Erich,

so einigermaßen bin ich wohl doch auf der richtigen Fährte.

So könnte das Music-Schnipsel Musik = \new PianoStaff << ... (oder andere Konstrukte) die allgemeine Definition der "musikalischen Ereignisse" sein.

Die visuelle Darstellung (PDF, Notenschrift), beispielsweise auf Vierteltöne reduziert, könnte dann so erzeugt werden:
\score  {
  \roundPitchesToNextQuartertone \Musik
  \layout {}
}
Mit einer relativ einfachen (noch zu erstellenden) MusicMap-Funktion roundPitchesToNextQuartertone.

Und für Midi dann z. Bsp.:
\score  {
  \articulate \unfoldRepeats \Musik
  \midi {}
}
Also ohne die Piches zurechtzustutzen.

Arnold

Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Dienstag, 23. Februar 2016, 22:43
Hallo Arnold,

mir scheint, als glaubst Du, Du könntest ein herkömmliches LP-Noten-Script nehmen und darauf eine \roundPitchesToNextQuartertone-Funktion loslassen.
Hast Du dabei bedacht, dass diese Funktion zugleich eine harmonische Analyse beinhalten muss? In Reiner Stimmung unterscheidet sich Dur von der Mollvariante in einem Ton um das syntonische Komma; die Funktion muss also einen Wechsel von Dur zu Moll erkennen, aber auch sonst einen Wechsel der Tonart, die ja nicht immer durch einen Vorzeichenwechsel explizit angezeigt wird. Mit andern Worten, die Information, die ein herkömmliches LP-Noten-Script beinhaltet, ist nur theoretisch ausreichend.
Der Name Deiner Funktion lässt jedoch darauf schließen, dass Du gar nicht zu einer Reinen Stimmung kommen willst; dann sieht natürlich alles anders aus.

Gruß Erich

P.S. Sollte Dich die Komma-Problematik etwas genauer interessieren, so kannst Du Dir auf meiner homepage dieses https://meyerich.pythonanywhere.com/Reine_Stimmung/default/snippet/13 (https://meyerich.pythonanywhere.com/Reine_Stimmung/default/snippet/13) dazu ansehen.
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: Arnold am Mittwoch, 24. Februar 2016, 09:26
Hallo Erich,

mein Gedanke ist, daß die Musik-Definition mehr oder minder exakt in reiner Stimmung ist. Da der Logarithmus (zur Basis 2) einer Bruchzahl (außer Zweierpotenzen mit ganzahligem, auch negativem Exponenten) nie eine Bruchzahl ergibt, wird immer ein winziger Rundungsfehler bleiben, der sich aufaddieren kann.

Nur für den Notensatz (PDF), nicht für die MIDI-Ausgabe, dachte ich an eine Funktion, welche die "Tonhöhen" zurechtrundet. Natürlich wäre das Runden zum nächsten Viertelton ein so grobes (wenn auch gleichmäßiges) Raster, daß viele (wenn nicht alle) Kommata glattgebügelt würden.

In deinem Beispiel sah ich für das Symbol accidentals.flat.arrowup die Delta-Pitch-Definitionen -45112/100003 und -46090/100003 . Da würde ich z. Bsp. das Symbol nur für den Mittelwert -45601/100003 definieren, und mit der MusicMap-Funktion dann alles im Bereich plus/minus 500/100003 von diesem Versatz (ca. plus/minus 1 cent) auf den Anzeige-Nominalwert -45601/100003 setzen.

Arnold.
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Mittwoch, 24. Februar 2016, 11:02
Hallo Arnold

Zitat
mein Gedanke ist, daß die Musik-Definition mehr oder minder exakt in reiner Stimmung ist.

das verstehe ich nicht! Musik-Definition ist für mich eine Frage der Formulierungungsmöglichkeiten im LP-Script; Stimmung ist dagegen doch eine Frage der Interpretation durch LP.

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: Arnold am Mittwoch, 24. Februar 2016, 12:44
Hallo Erich.

Mit Musik = <<
  \new Staff \with {
    ...
  } {
    ...
  }
  ...
>>
wird letzlich erst einmal eine Datenstruktur angelegt. Die Music-Events darin beschreiben das musikalische Geschehen.

Anschließend wird mittles\score {
  \Musik
  \midi {}
}
dieses interpretiert, von den Performern im Lilypond ausgewertet und als MIDI-Datei ausgegeben.

Dabei muß \Musik nicht unbearbeitet bleiben. Das bekannte \unfoldRepeats erzeugt eine Kopie von der angegebenen Music-Event-Datenstruktur, bei der alle repeat volta, repeat percent, repeat tremolo durch repeat unfold ersetzt wurden.

Bis heute nicht üblich (außer z. Bsp. bei meiner Akkordeon-Baß-Schreibweise) ist es, auch MusicMap-Funktionen für die PDF-Ausgabe vorzuschalten, also in etwa \score {
   \roundPitchesForMyLayout \Musik
   \layout {}
}

Im konkreten Fall enthielte also \Musik alle notwendigen Informationen, während für die PDF-Erzeugung diese Datenstruktur nochmal "vereinfacht" wird, damit die Engraver besser damit zurechtkommen.

Arnold.
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Mittwoch, 24. Februar 2016, 14:00
Hallo Arnold

Zitat
Im konkreten Fall enthielte also \Musik alle notwendigen Informationen, während für die PDF-Erzeugung diese Datenstruktur nochmal "vereinfacht" wird, damit die Engraver besser damit zurechtkommen.

Aber dazu müssen doch die Beschreibungsmittel zuvor erweitert worden sein; ein "normales" LP-Script enthält doch nicht genügend explizite Information. Ich sage explizit im Wissen, dass man auch Programme entwickeln könnte, die eine musikalische Analyse eines Stückes leistet. Das liegt aber außerhalb der sinnvollen Erweiterungsmöglichkeiten von LP.

Gruß Erich
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: Arnold am Mittwoch, 24. Februar 2016, 15:37
Hallo Erich.

Zitat
Aber dazu müssen doch die Beschreibungsmittel zuvor erweitert worden sein; ein "normales" LP-Script enthält doch nicht genügend explizite Information. Ich sage explizit im Wissen, dass man auch Programme entwickeln könnte, die eine musikalische Analyse eines Stückes leistet. Das liegt aber außerhalb der sinnvollen Erweiterungsmöglichkeiten von LP.

Stimmt, genauso wie das von dir erwähnte syntonische Komma nicht im standard-Lilypond definiert ist, mußt du alle Informationen, die du später für eine programmtechnische Auswertung benötigst, in die »ly:music?«-Datenstruktur einbringen.

Mein Augenmerk lag darin, die Vorzeichen für die Notenschrift (aber nicht für die MIDI-Ausgabe) "unscharf" zu betrachten, also statt einem exakten Pitch-Diff-Wert ein Vorzeichen zuzuordnen, einem Pitch-Diff-Bereich ein Vorzeichensymbol zuzuordnen. Damit nicht in die Engraver eingegriffen werden muß, würde ich die Engraver aber weiterhin mit exakten Pitch-Diff-Werten arbeiten lassen, und das "Zusammenfassen der Pitch-Diff-Bereiche" in ein "Runden zu den nominalen Pitch-Diff-Werten per musicMap-Funktion" auslagern.

Arnold
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: harm6 am Donnerstag, 25. Februar 2016, 00:43
Ich denke noch immer man sollte bei der default-skala ansetzen.

Ich hab' da mal was zusammengebraut, allerdings scheine ich nicht verstanden zu haben wie Du zu Deinen pitches und deren Alterationen kommst. D.h. der gedruckte output ist besser, aber hör Dir bloß nicht das midi an.

Ich poste es trotzdem, da ich denke den richtigen Ansatz zu verfolgen. Nötig wäre m.E. nur eine Korrektur der Berechnungen. Diese sind übrigens alle manuell ausgeführt und codiert, um sie leichter nachvollziehbar zu halten.

\version "2.18.2"
%% alternativen für 2.19 sind kommentiert

\paper {
 line-width = 190\mm
}
%
%\header {
% title =   "Impromptu in f-moll"
% subtitle = "D 935-1 (Opus 142 No 1.) Franz Schubert"
% }
%
%#(define-public CES     38269/100003)
%#(define-public C        7821/100003)
%#(define-public DX      36314/100003)
%#(define-public D        9776/100003)
%#(define-public EX      34359/100003)
%#(define-public E         978/100003)
%#(define-public FES     39246/100003)
%#(define-public F        6843/100003)
%#(define-public FIS     52934/100003)
%#(define-public GES     37291/100003)
%#(define-public G        8798/100003)
%#(define-public AX      35337/100003)
%#(define-public A           1/100003)
%#(define-public BX      44134/100003)
%#(define-public B        1957/100003)


pitch-names =
  #`(
      (ces  . ,(ly:make-pitch -1 0    (+ (+    0/200 7821/100003) -38269/100003)))
      (c    . ,(ly:make-pitch -1 0    0))
      (dx   . ,(ly:make-pitch -1 1    (+ (+  200/200 9776/100003) -36314/100003)))
      (d    . ,(ly:make-pitch -1 1    0))
      (ex   . ,(ly:make-pitch -1 2    (+ (+  400/200  978/100003) -34359/100003)))
      (e    . ,(ly:make-pitch -1 2    0))
      (fes  . ,(ly:make-pitch -1 3    (+ (+  500/200 6843/100003) -39246/100003)))
      (f    . ,(ly:make-pitch -1 3    0))
      (fis  . ,(ly:make-pitch -1 3    (+ (+  500/200 6843/100003)  52934/100003)))
      (ges  . ,(ly:make-pitch -1 4    (+ (+  700/200 8798/100003) -37291/100003)))
      (g    . ,(ly:make-pitch -1 4    0))
      (ax   . ,(ly:make-pitch -1 5    (+ (+  900/200    1/100003) -35337/100003)))
      (a    . ,(ly:make-pitch -1 5    0))
      (bx   . ,(ly:make-pitch -1 6    (+ (+ 1000/200 1957/100003) -44134/100003)))
      (b    . ,(ly:make-pitch -1 6    0))
    )
 
scalepitches =
#(vector (+    0/200 7821/100003 -7821/100003)   ; c
         (+  200/200 9776/100003 -7821/100003)   ; d
         (+  400/200  978/100003 -7821/100003)   ; e
         (+  500/200 6843/100003 -7821/100003)   ; f
         (+  700/200 8798/100003 -7821/100003)   ; g
         (+  900/200    1/100003 -7821/100003)   ; a
         (+ 1000/200 1957/100003 -7821/100003)   ; b
         )
#(ly:set-default-scale (ly:make-scale scalepitches))
   
pitchGlyphs =
  #`( ; 100003 is a prime number
      (,(+ (+    0/200 7821/100003) -38269/100003) . "accidentals.flat")   ; Cb
      (,(+ (+  200/200 9776/100003) -36314/100003) . "accidentals.flat")   ; Dx = Db
      (,(+ (+  400/200  978/100003) -34359/100003) . "accidentals.flat.arrowup")  ; Ex = E↑b
      (,(+ (+  500/200 6843/100003) -39246/100003) . "accidentals.flat")   ; Fb
      (,(+ (+  500/200 6843/100003)  52934/100003) . "accidentals.sharp")   ; F#
      (,(+ (+  700/200 8798/100003) -37291/100003) . "accidentals.flat")          ; Gb
      (,(+ (+  900/200    1/100003) -35337/100003) . "accidentals.flat.arrowup")  ; Ax = A↑b
      (,(+ (+ 1000/200 1957/100003) -44134/100003) . "accidentals.flat")   ; Bx = Bb
      (0 . "accidentals.natural"))

\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
%    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
%    \override AccidentalCautionary.parenthesized = ##f
}}

#(ly:parser-set-note-names parser pitch-names)
%% 2.19:
%#(ly:parser-set-note-names pitch-names)

%%{
\score {
  \new PianoStaff
  <<
     \new Voice {
       \set Staff.keySignature =
       %% 2.19:
       %\set Staff.keyAlterations =
       #`(
          (6 . ,(+ (+ 1000/200 1957/100003) -44134/100003))
          (2 . ,(+ (+  400/200  978/100003) -34359/100003))
          (5 . ,(+ (+  900/200    1/100003) -35337/100003))
          (1 . ,(+ (+  200/200 9776/100003) -36314/100003)))
       \times 2/3 { c'16 [f' ax'] } c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]| % 1
       f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 | % 2
       bx8. c'16 ax8. bx16 ges8. ax 16 f8. g16| % 3
       e8 r8 <g' bx' dx''>8 r8 r2| % 4
     }
     
    \new Voice {
    \set Staff.keySignature =
    %% 2.19
      %\set Staff.keyAlterations =
      #`(
         (6 . ,(+ (+ 1000/200 1957/100003) -44134/100003))
         (2 . ,(+ (+  400/200  978/100003) -34359/100003))
         (5 . ,(+ (+  900/200    1/100003) -35337/100003))
         (1 . ,(+ (+  200/200 9776/100003) -36314/100003)))
        << {\clef "bass"
          <f, ax>2. <g, c>4 | % 1
          ax, a, bx, c | % 2
          dx c <bx, dx> <ax, c>|}\\
         {\clef "bass" \stemDown
            <f,~ c>1 <f,~ f> <f, f>2 s2 |}
       >> % 3
       <g, bx,>8 r <ex g bx dx'>8 r8 r2 | % 4
        }
  >>
 \layout {indent = 0\cm}
 %\midi {\tempo 4=100}
}


Ansonsten habe ich diese Imslp-preview gefunden

(http://imslp.org/images/e/ef/PV-Schubert_Werke_Breitkopf_Serie_11_No_110_Op_142.jpg)

Da sieht man ja einige Unterschiede.
Besonders
Takt 1 Unterstimme: 4. Viertel e nicht c
Takt 2 Unterstimme: Auflösungszeichen vor 2. Viertel
Takt 4 Unterstimme: 2.Viertel Dein `ex' kann nicht richtig sein.


Gruß,
  Harm
 
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Donnerstag, 25. Februar 2016, 09:05
Grüß Dich harm

Zitat
Ich denke noch immer man sollte bei der default-skala ansetzen.

Darüber denke ich auch schon nach; hoffentlich ist die Parametrisierung so wie ich sie mir vorstelle, das würde dann einiges vereinfachen. Ich werde aber erst am Wochenende dazu kommen - zu Deinen Ausführungen vielleicht früher.

Danke Erich

p.s. Deine Anmerkungen zu den Fehlern sind korrekt; der eine resultiert noch aus der Zeit, als ich noch kein work around für das Auflösungszeichen kannte.

Kannst Du mir vielleicht sagen, wie man den Vorschlag in
(http://www.kielnet.net/home/erich.meyer/frage-2.png)
zu interpretieren hat.

Da Du eine zuverlässigere Ausgabe der Schubert-Noten hast als ich, kannst Du bitte überprüfen,
ob die Takte 44-45 so stimmen.
(http://www.kielnet.net/home/erich.meyer/frage-1.png)
Titel: Re: vergessenes Auflösungszeiche (Fehler in LP?)
Beitrag von: erich am Donnerstag, 25. Februar 2016, 16:45
Hallo allen,

ich habe mal versucht,  nach dem Munster von harm das Script mit  modifizierten scalepitches  umzuschreiben. Das führt zwar zu einem brauchbaren Notensatz aber die MIDI-Ausgabe ist leider vollkommen unbrauchbar.

\version "2.18.2"
scalepitches =
#(vector (+    0/200 7821/100003)   
         (+  200/200 9776/100003)   
         (+  400/200  978/100003)   
         (+  500/200 6843/100003)   
         (+  700/200 8798/100003)   
         (+  900/200    1/100003)   
         (+ 1000/200 1955/100003) 
         )
#(ly:set-default-scale (ly:make-scale scalepitches))

#(define-public SF   46091/100003) 
#(define-public SFK  56844/100003)

pitch-names =
  #`(
      (ces  . ,(ly:make-pitch -1 0 (- SF)))
      (c    . ,(ly:make-pitch -1 0 NATURAL))
      (cis  . ,(ly:make-pitch -1 0 SF))     
      (dx   . ,(ly:make-pitch -1 1 (- SF)))
      (d    . ,(ly:make-pitch -1 1 NATURAL))
      (ex   . ,(ly:make-pitch -1 2 (- SFK)))
      (e    . ,(ly:make-pitch -1 2 NATURAL))
      (fes  . ,(ly:make-pitch -1 3 (- SF)))
      (f    . ,(ly:make-pitch -1 3 NATURAL))
      (fis  . ,(ly:make-pitch -1 3 SF))
      (ges  . ,(ly:make-pitch -1 4 (- SF)))
      (g    . ,(ly:make-pitch -1 4 NATURAL))
      (gis  . ,(ly:make-pitch -1 4 SF))
      (ax   . ,(ly:make-pitch -1 5 (- SFK)))
      (a    . ,(ly:make-pitch -1 5 NATURAL))     
      (bx   . ,(ly:make-pitch -1 6 (- SF)))
      (b    . ,(ly:make-pitch -1 6 NATURAL))
    ) 


pitchGlyphs =
  #`(
      (-46091/100003 . "accidentals.flat")
      (  0 . "accidentals.natural")
      ( 46091/100003 . "accidentals.sharp")
      (-56844/100003 . "accidentals.flat.arrowup")
    ) 
 
accidentalGlyphs =
  #`(
      (-46091/100003 . "accidentals.natural")
      ( 46091/100003 . "accidentals.natural")
      (-56844/100003 . "accidentals.natural")
      ( 0 ."accidentals.natural")
    )
 
  \layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
    \override AccidentalCautionary.parenthesized = ##f
}}

#(ly:parser-set-note-names parser pitch-names)



\score {
  <<
     \new Voice { \set Staff.keySignature = #`((6 . ,(- SF)) (5 . ,(- SFK)) (2 . ,(- SFK)) (1 . ,(- SF)))
       
      \times 2/3 {c'16 [f' ax']} c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]| % 1
       f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 | % 2
       bx8. c'16 ax8. bx16 ges8. ax 16 f8. g?16| % 3
       e8 r8 <g' bx' dx''>8 r8 r4 \times 2/3 {c''16 [dx'' ex'']} dx''16 c''16| % 4

     }
     
    \new Voice { \set Staff.keySignature = #`((6 . ,(- SF)) (5 . ,(- SFK)) (2 . ,(- SFK)) (1 . ,(- SF)))
       
        <<
         {\clef "bass" \stemDown
            <f,~ c>1 <f,~ f> <f, f>2 s2 |}\\
         {\clef "bass" \stemUp
          <f, ax>2. <g, e?>4 |
          ax, a,? bx, c |
          dx c <bx, dx> <ax, c>|}
       
       >>
       <g, bx,>8 r <e? g bx dx'>8 r8 r2 |
       

    }                                       
  >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=100}
}

Mag sein, dass ich was  übersehen habe.

Gruß Erich