Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: erich am Donnerstag, 28. Januar 2016, 16:18

Titel: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Donnerstag, 28. Januar 2016, 16:18
Hallo

Das Snippet "http://lsr.di.unimi.it/LSR/Snippet?id=785"  lässt sich bei mir als version "2.18.22" rendern. Wenn ich jedoch die Zeile 25

Zitat
scalepitches = #(list->vector . . .

auskommentiere und statt dessen  in Zeile 30

Zitat
% scalepitches = `#( 0 . . .

die Auskommentierung rückgängig mache, erhalte ich unter anderen die Fehlermeldung:

Zitat
Wrong type to apply: 0
Wrong type argument in position 1 (expecting vector of rational): "`"
 

Die vermutete zunächst einen Tippfehler und habe die beiden Zeichen `# mal vertauscht, das führte jedoch nicht zum Erfolg.

Ich habe dann das Script soweit ausgedünnt, dass nur noch das folgende übrig bleibt:
\version "2.18.2"

%% http://lsr.di.unimi.it/LSR/Item?id=785
%% see also http://lilypond.org/doc/v2.18/Documentation/notation/creating-midi-files.fr.html

% The tempered fifth in quarter-comma meantone is (from any mathematical
  %  music theory reference book) 0.5805 of an octave, which is 696.6 cents
FIFTH = # 5805/10000  % or equivalently, # 6966/12000
  % 31-equal-temperament has
  %  FIFTH = # 18/31
  % 12-equal-temperament has
  %  FIFTH = # 7/12
  % 53-equal-temperament has
  %  FIFTH = # 31/53
  %
  % When you experiment, stay within the range 1/2 < FIFTH < 3/5
  % so that two fifths <c d'> is more than an octave,
  % and five fifths <c b''> is less than three octaves.
  %
#(define fracpart (lambda (x) (- x (floor x))))
#(define tones-from-c (lambda (nfifths) (* 6 (fracpart (* FIFTH nfifths)))))
  %
  % This is a list of pitches, in units of an equal tempered whole tone,
  %  for the notes c d e f g a b, relative to c
% scalepitches = #(list->vector (map tones-from-c '(0 2 4 -1 1 3 5)))

  % One may skip the Scheme code and simply enter the pitches in cents.
  % For quarter-comma meantone, these can be found in a book:
  % scalepitches = `#(0 193/200 386/200 503/200 697/200 890/200 1083/200)
scalepitches = `#( 0 193/200 386/200 503/200 697/200 890/200 1083/200)

#(ly:set-default-scale (ly:make-scale scalepitches))

SHARP = #(tones-from-c 7)
  % Alternatively, for quarter-comma meantone, SHARP = # 76/200
#(define-public FLAT         (* SHARP -1))
#(define-public DOUBLE-SHARP  (* SHARP 2))
#(define-public DOUBLE-FLAT  (* SHARP -2))

  % Reload the note names (c, cis, des, d, etc.) ...
#(ly:load "define-note-names.scm") \language "nederlands"

  % and the table of glyphs for alterations ...
alterationList = #`(
  (,NATURAL . "accidentals.natural")
  (,FLAT . "accidentals.flat")
  (,SHARP . "accidentals.sharp")
  (,DOUBLE-SHARP . "accidentals.doublesharp")
  (,DOUBLE-FLAT . "accidentals.flatflat")
)
  % and the table of alterations in any modes (major, minor, dorian) you use
minor = #`(
  (0 . ,NATURAL)
  (1 . ,NATURAL)
  (2 . ,FLAT)
  (3 . ,NATURAL)
  (4 . ,NATURAL)
  (5 . ,FLAT)
  (6 . ,FLAT)
)
  % so that these tables are indexed to pitches from our tuning.

  % keyAlterationOrder needs to know our pitches to typeset key signatures.
  % Each object that draws accidentals to know the size of our alterations.
\layout{
  \context {
    \Score
  keyAlterationOrder = #`(
    (6 . ,FLAT) (2  . ,FLAT) (5 . ,FLAT) (1  . ,FLAT) (4  . ,FLAT) (0  . ,FLAT) (3  . ,FLAT)
    (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
    (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
    (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (1 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP)
    )
    \override KeySignature.glyph-name-alist = \alterationList
    \override Accidental.glyph-name-alist = \alterationList
    \override AccidentalCautionary.glyph-name-alist = \alterationList
    \override TrillPitchAccidental.glyph-name-alist = \alterationList
    \override AmbitusAccidental.glyph-name-alist = \alterationList
  }
}
  % MIDI implements microtones as a pitch bend, with one bend per channel.
  % These lines below assign one channel to each Voice, in case there are
  % multiple voices on a staff, so that each voice can have its correct
  % pitch bend.
\midi {
  \context {
    \Staff
    \remove "Staff_performer"
    \remove "Key_performer" % avoid midi bug, issue 748
  }
  \context {
    \Voice
    midiInstrument = "drawbar organ"
    \consists "Staff_performer"
  }
  \tempo 4 = 30
}

  % The end of a Chorale from Bach's St Matthew Passion.
  %
  % The original choral music, in B-minor, involves notes such as
  % E-sharp and D-sharp that do not exist on an organ, those keys
  % being tuned to F and E-flat, respectively.
  %
  % Therefore we transpose to D minor to make it playable on the organ.
  %
\score {
  \new PianoStaff \with { instrumentName = "Organ" } \transpose b d' <<
    \partial 4
    \new Staff \relative c'' {
     % \key b\minor
     % s1*0^\markup\huge"transposed from St. Matthew Passion, J. S. Bach"
      << {
        d4 %| cis  b  e  d8 cis | cis2 b
      } \\ {
       % fis4 | e8 fis gis ais b4 b | b ais fis2
      } >>
    }
    \new Staff \relative c' {
      %\key b\minor
      %s1*0_\markup { \line { $(format "Fifths tempered by ~,1F cents relative to perfect fifth"
      %(* (- FIFTH 0.5849625) 1200)) }}
      << {
        \clef bass
        a8 b %| cis dis e4 b8 cis d4 | gis, cis dis2
      } \\ {
      %  fis,8 gis %| a4 gis g fis | eis fis b,2
      } >>
    }
  >>
  \layout{}
  \midi{}
}

Auch so hatte ich keinen Erfolg;

Kann mir bitte jemand helfen.

Gruß
Erich
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: harm6 am Donnerstag, 28. Januar 2016, 20:56
Hallo Erich,

Du siehst diese Zeile:
#(ly:set-default-scale (ly:make-scale scalepitches))
wobei ly:make-scale einen vector erwartet.

Es gibt das funktionierende
scalepitchess = #(list->vector (map tones-from-c '(0 2 4 -1 1 3 5)))
Ein vector eben.

Das auskommentierte
scalepitches = `#(0 193/200 386/200 503/200 697/200 890/200 1083/200)
ist gar nix...
Es sollte wohl auch ein vector sein, Deine Vermutung eines Tippfehlers dürfte deshalb richtig sein.

scalepitches = ##(0 193/200 386/200 503/200 697/200 890/200 1083/200)
wäre korrekt.

Es führt allerdings zu anderen Problemen, zahlreiche Warnungen vom Typ:
warning: Could not find glyph-name for alteration -1/2
warning: Could not find glyph-name for alteration -119/1000
...

ly:set-default-scale setzt die Skala global, deshalb dürfte die übliche Vorgehensweise (getrennte scores für layout/midi) ebenfalls nicht funktionieren.


Im Moment weiß ich da keinen Ausweg, aber ich hab' auch nicht groß drüber nachgedacht.
Für mich ist midi keine Musik, sondern tot.
Reiner Tod ist immer noch tot ... ;)
Insoweit nichts, was mich interessiert.

Aber es gibt tatsächlich eine Reihe versierter Leute, die das anders sehen....


Allerdings sollte das LSR-snippet schon gefixt werden...

Gruß,
  Harm
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: harm6 am Donnerstag, 28. Januar 2016, 21:01
Den Tippfehler hab ich im LSR korrigiert, aber das ist eben noch nicht alles...

Gruß,
  Harm
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Donnerstag, 28. Januar 2016, 23:58
Hallo Harm,

vielen Dank für den Hinweis. Jedenfalls lässt sich nun das von mir zusammengestrichene Script fehlerfrei rendern. Wie sich die Warnhinweise des vollständige Scripts ausmerzen lassen, wird sich zeigen müssen.

Du schreibst "für mich ist midi keine Musik". Ich bin froh, dass es midi gibt: ich bin kein Klavierspieler und kann mir mit Hilfe von midi Musik vergegenwärtigen und dadurch vieles entdecken. Ich bin zufällig auf das Buch von William A. Sethares "Tuning, Timbre, Spectrum, Scale" gestoßen, in dem der Author beschreibt, wie er erst durch den Einsatz von Rechnern auf akustische Phänomene gestoßen ist, die ohne die Synthetisierbarkeit von Klängen nicht erfahrbar wären. Zur Zeit interessiert mich die reine Stimmung (just intonation) und wie sie sich mit Hilfe von Lilypond realisieren lässt.

Gruß
Erich
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: Arnold am Freitag, 29. Januar 2016, 09:51
Hallo Erich,

zur "reinen Intonation" und LILYPOND noch ein paar kleine Anmerkungen von mir.


Arnold
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Samstag, 30. Januar 2016, 10:35
Hallo Arnold

Wir sollten die von Dir aufgezeigten Aspekte weiter vertiefen; allerdings würde an dieser Stelle kaum jemand danach suchen. Ich habe unter Spezielle Projekte angeregt, für Fragen von MIDI usw. eine eigene Rubrik vorzusehen; dort könnten wir dann weiter kommunizieren.

Noch eine kleine Anmerkung: Du benutzt die Bezeichnung E31, sollten wir nicht lieber zu der sich international einbürgernden Bezeichnung 31 edo (gleich geteilte Oktave) übergehen.

Gruß Erich
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: Arnold am Montag, 1. Februar 2016, 09:29
Hallo erich,

ich hatte das »E31« nur irgendwo aufgeschnappt, aber noch keine (bessere) Literatur über das ganze Thema gelesen. Also werde ich in Zukunft von »31edo« sprechen.

Zu den »Cent-Angaben« ist mir noch einfallen: Ich könnte eine \musicMap-Funktion erstellen, welche den Cent-Offset in \finger-Bezeichnungen hinzufügt. Doch das Aufräumen wiederholter solcher Ersatz-Vorzeichen müßte ein Engraver übernehmen, und dann noch die unterschiedlichen Vorzeichen-Modi beachten. Alles zusamen in einem "Cent-Offset-Text-for-undefined-Alterations-Fallback-Engraver" wäre sinnvoller, aber auch sicher deutlich aufwendiger, und ich bin mir keineswegs sicher, daß ich so etwas schaffen würde.

Arnold.
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Montag, 1. Februar 2016, 17:11
Hallo Arnold
Ich bin dabei die reine Stimmung über eine eigene Sprachdefinition zu implementieren; um Dir einen Eindruck zu geben, wie eine C-Dur-Tonleiter dann intern gespeichert ist, gebe ich sie mal mit \displayMusic aus
        (make-music
          'NoteEvent
          'duration
          (ly:make-duration 0 0 1)
          'pitch
          (ly:make-pitch -1 0 0))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 1 391/20000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 2 -1369/20000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 3 -49/5000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 4 39/4000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 5 -313/4000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch -1 6 -587/1000)
          'duration
          (ly:make-duration 0 0 1))
        (make-music
          'NoteEvent
          'pitch
          (ly:make-pitch 0 0 0)
          'duration
          (ly:make-duration 0 0 1))

Ich berechne dazu die Abweichungen der Tonhöhen in reiner Stimmung relativ zur gleichstufigen Stimmung (12 edo).

 Für die Darstellung der Noten beziehe ich mich auf die reine C-Dur-Scala (5-limit tuning); d.h. die Noten sind dann als in reiner Stimmung stehend zu verstehen.  Man muss dann (nur) geeignete Versetzungszeichen erstellen, bei denen es sich hauptsächlich um eine Einbeziehung des syntonischen Kommas handelt.

Wenn ich damit durch bin, werde ich alles auf meiner Homepage zur Kenntnis geben.

Gruß Erich

 
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: Arnold am Dienstag, 2. Februar 2016, 13:09
Hallo Erich,

für meine Zwecke war es quasi einfacher, denn ich habe irgendwo "regular.ly" gefunden, den Parameter auf 31 gesetzt (für 31 edo), und diese Includedatei hat (a) die Pitchdefinitionen für die Eingabe, (b) die Pitchangabe zu den Noten-Y-Koordinaten, und (c) die Vorzeichen-Intervallgrößen (die Schrittweiten für Doppel-B bis Doppelkreuz mit allen Vierteltönen dazwischen) auf dieses Raster umdefiniert.

So meine Erkenntsnisse:
Lilypond rechnet intern mit 12 edo, quasi MIDI-gerecht.
Lilypond sucht vom »diatonisch angegebenen« Ton den Pitch des vorzeichenlosen Tones, ermittelt das Intervall von dort zum vorzeichenbehafteten Ton, und sucht dann, welches Zeichen aus dem aktuellen Notationsfont für dieses Inverall darzustellen ist.

Arnold.
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Dienstag, 2. Februar 2016, 15:19
Hallo Arnold

So weit ich das verstanden habe, ergibt 31 edo eine mitteltönige Stimmung, die dann eine Tonartencharakteristik hat, wenn man midi nutzt. Ist Dir das schon mal aufgefallen?

Gruß Erich
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: Arnold am Dienstag, 2. Februar 2016, 16:26
Hallo Erich,

ich habe nur Details zur mitteltöigen Stimmung gelesen, so auch, daß es viele Varianten gab. Am häufigsten die 1/4-Komma mitteltönige Stimmung, bei der vier »etwas verkleinerte Quinten« sich zur reinen Dur-Terz aufaddieren. Ansonsten gab es auch 1/3-Komma, 1/6-Komma- und viele andere Varianten. Nach meinen Berechungen wäre 31edo dann etwa eine 1/4,15-Komma mitteltönige Stimmung, uns so fand ich es wert, diese einmal auszuprobieren mit einer Musik aus einer Zeit, welche noch stark von der mitteltönigen Stimmung geprägt war - z. Bsp. die leidige Frage »was ist höher oder tiefer, gis oder as?«.

Arnold
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: fugenkomponist am Dienstag, 2. Februar 2016, 20:02
z. Bsp. die leidige Frage »was ist höher oder tiefer, gis oder as?«.
Hab den Rest nicht so ganz mitverfolgt, aber die Antwort hierauf ist doch eindeutig, oder? As ist höher oder gleich.
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: ingmar am Dienstag, 2. Februar 2016, 20:17
na, es kommt darauf an, welches gis und welches as gemeint ist.
--ingmar
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: fugenkomponist am Mittwoch, 3. Februar 2016, 00:16
Ich kenne aber keinen Fall, in dem as tiefer als gis ist (selbe Oktave natürlich vorausgesetzt), hab ich was übersehen?
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: Arnold am Mittwoch, 3. Februar 2016, 10:55
Hallo,

bei Leopold Mozart (Violinschule, unter anderem unter www.imslp.org zu finden) kann man in einer Fußnote nachlesen, daß doch klar sei, daß as höher als gis ist. Auf einer andernen Internetseite habe ich sogar die (von mir nicht prüfbare) Behauptung gefunden, zu damaliger Zeit seien die Streichinstrument gar nicht in reinen Quinten gestimmt worden, sondern in leicht engeren Intervallen.
Demgegenüber wird vielen gelehrt, die Kreuz-Töne immer schön hoch zu nehmen, was (z. Bsp. unter http://www.pian-e-forte.de/texte/01inton.htm - »Fragt man Geiger, ob auf ihrem Instrument das dis oder das es höher sei, so antworten die meisten – und viele mit großer Überzeugtheit – das dis sei höher.«) ich auch schon oft gehört habe. Leitet man as und gis nur vom Quintenzirkel mit reinen Quinten ab, dann wäre auch gis höher als as. Ich vermute, diese "Kreuz ist höher"-Sichtweise kommt aus der (weit nach Mozart) aufkommenden Tradition der Leittonerhöhung. Ich selbst habe noch keine intensiven Studien mit einem veschärften Dur-Septakkord im Frequenzverhältnis 18 : 23 : 27 : 32 durchgeführt. (Der paßt auch etwas schlecht ins 31edo-System hinein)

Arnold.
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: fugenkomponist am Mittwoch, 3. Februar 2016, 12:58
Auf einer andernen Internetseite habe ich sogar die (von mir nicht prüfbare) Behauptung gefunden, zu damaliger Zeit seien die Streichinstrument gar nicht in reinen Quinten gestimmt worden, sondern in leicht engeren Intervallen.
Klar, wenn mitteltönig musiziert wird, muss das ja. Und auch heute noch schwören manche Streicher auf enge Quinten. Denn auch für eine gleichstufige Stimmung müsste man ja jede Quinte ca. 2 Cent kleiner machen (für mitteltönig weitere 3ct, wenn ich mich nicht verrechnet hab).
Zitat
Demgegenüber wird vielen gelehrt, die Kreuz-Töne immer schön hoch zu nehmen, was (z. Bsp. unter http://www.pian-e-forte.de/texte/01inton.htm - »Fragt man Geiger, ob auf ihrem Instrument das dis oder das es höher sei, so antworten die meisten – und viele mit großer Überzeugtheit – das dis sei höher.«) ich auch schon oft gehört habe. Leitet man as und gis nur vom Quintenzirkel mit reinen Quinten ab, dann wäre auch gis höher als as.
Eine Herleitung von reinen Quinten halte ich für unwahrscheinlich. Dafür müsste man ja sehr weit um den Quintenzirkel laufen und hätte außerdem lauter pythagoreische Terzen. Das will heutzutage (seit ein paar Jahrhunderten) niemand hören. Tatsächlich wird in der reinen und mitteltönigen Stimmung hier eher von den reinen Terzen as-c-e-gis ausgegangen bzw. in anderen Stimmungen ein Kompromiss zwischen Terzen und Quinten gefunden.
Zitat
Ich vermute, diese "Kreuz ist höher"-Sichtweise kommt aus der (weit nach Mozart) aufkommenden Tradition der Leittonerhöhung.
Ziemlich sicher, ja. Aber wozu die Leittonerhöhung gut sein soll, hab ich noch nie verstanden. Oder gehört. Für mich klingen hohe Leittöne nicht besser, schon gar nicht, wenn sie Terz einer (Zwischen-)Dominante sind.
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Mittwoch, 3. Februar 2016, 22:14
Wenn man die Tonarten gemäß des Quintenzirkels in reiner Stimmung auflistet, erhält man auch Töne, die um die Apotome zu erhöhen oder zu erniedrigen sind. Die Apotome hat ein Frequenzverhältnis von 2187/2048; sie entsteht, wenn man eine Alteration noch um ein syntonisches Komma erhöhen muss. Bewegt man sich von zwei (benachbarten) Tönen je um die Apotome aufeinander zu, so haben beide Schritte zusammen ein Frequenzverhältnis von (2187/2048)² = 1.140. Das Frequenzverhältnis eines Ganztonschritts ist 9/8 = 1.125 oder 10/9 = 1.111. Ein Ganztonschritt ist also kleiner als zwei Apotome. In reiner Stimmung kann es also vorkommen, dass As niedriger als Gis zu spielen ist. Auch wenn beide Töne nicht gemeinsam in einem Stück auftreten, muss man auf einem bundlosen Saiteninstrument, wenn die Modulation weitgenug fortschreitet, diese Tatsache grifftechnisch erfahren. Es kommt also darauf an, ob As tiefer ist als Gis.
Grüß Euch
Erich
Titel: Re: http://lsr.di.unimi.it/LSR/Item?id=785
Beitrag von: erich am Freitag, 26. Februar 2016, 21:21
Hallo Arnold

weißt Du, was die pitch-bend-Werte in der MIDI-Ausgabe bedeuten; sie stellen eine Korrektur dar aber wie ist die Maßzahl zu verstehen.

Gruß Erich