Autor Thema: fehlerhafte MIDI-Ausgabe  (Gelesen 2874 mal)

erich

  • Member
fehlerhafte MIDI-Ausgabe
« am: Sonntag, 28. Februar 2016, 09:59 »
Hallo allen,

ich denke das Thema gehört in diese Rubrik

Das LP-Script
\version "2.18.2"

#(define-public FIS     63688/100003)
#(define-public GES     37291/100003)


pitch-names =
  #`(
      (fis  . ,(ly:make-pitch -1 3    FIS))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
    ) 

pitchGlyphs =
  #`(
      ( 63688/100003 . "accidentals.sharp") ; F#
      (-37291/100003 . "accidentals.flat")        ; Gb
    ) 
 
accidentalGlyphs =
  #`(
      (  6843/100003 . "accidentals.natural") ; F#
      (-37291/100003 . "accidentals.natural")        ; Gb
    )       
 
\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 {\time 2/2 fis'2 ges' <fis' ges'>}
 \layout {indent = 0\cm}
 \midi {\tempo 4=50}
}

gibt korrekt die Darstellung

aus

aber bei der MIDI-Ausgabe fehlt im Akkord das ges' , wie ich es nicht nur akustisch  sondern auch mit dem Programm KMidimon überprüfen konnte.

Wie kommt man da weiter? Das passt gut zum Thema https://liarchiv.joonet.de/index.php?topic=2130.0 von marno.

Gruß Erich
« Letzte Änderung: Montag, 13. Februar 2017, 15:45 von erich »

fugenkomponist

  • Member
Re: fehlerhafte MIDI-Ausgabe
« Antwort #1 am: Sonntag, 28. Februar 2016, 10:05 »
Naja, das Problem ist ja, dass solche Töne, die von der gleichstufigen Stimmung abweichen, per pitch bend in MIDI realisiert werden. Man kann aber nicht einen Ton gleichzeitig in zwei verschiedene Richtungen benden. Geht der bend nicht sogar nur kanalweise? Dann bräuchtest du die beiden Akkordtöne sowieso auf verschiedenen Kanälen (üblicherweise ein Kanal pro Staff, also bräuchtest du zwei staves, oder?).

Edit: Wenn ich das mit den pitch bends pro Kanal richtig in Erinnerung habe, könnte daran sowieso dein Projekt „reine Klaviermusik in MIDI“ scheitern. Es sei denn, du findest in LilyPond eine Möglichkeit, Akkorde automatisch auf verschiedene Kanäle zu verteilen. Eine Idee wäre, für jeden Ton einen Kanal herzunehmen. Dann kommst du allerdings nur 16 Töne weit (z. B. c, cis, des, d, es, e, f, fis, ges, g, gis, as, a, b, h, ces).
« Letzte Änderung: Sonntag, 28. Februar 2016, 10:08 von fugenkomponist »

erich

  • Member
Re: fehlerhafte MIDI-Ausgabe
« Antwort #2 am: Sonntag, 28. Februar 2016, 19:13 »
Hallo nochmal allen,

ich habe mein Beispiel etwas erweitert, indem ich noch einen Ton (F) dazugenommen habe
\version "2.18.2"

#(define-public F       25000/100003)
#(define-public FIS     63688/100003)
#(define-public GES     37291/100003)


pitch-names =
  #`(
      (f    . ,(ly:make-pitch -1 3      F))
      (fis  . ,(ly:make-pitch -1 3    FIS))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
    ) 

pitchGlyphs =
  #`(
      ( 25000/100003 . "") ; F
      ( 63688/100003 . "accidentals.sharp") ; F#
      (-37291/100003 . "accidentals.flat")        ; Gb
    ) 
 
accidentalGlyphs =
  #`(
      (  6843/100003 . "accidentals.natural") ; F#
      (-37291/100003 . "accidentals.natural")        ; Gb
    )       
 
\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 \displayMusic {f'2 ges' <f' ges'>1}
 >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=50}
}

Ich kann die Tonhöhe von F bis zum angegebenen Wert von 25000/100003 erhöhen, bis zu diesem wird der Akkord am Schuß richtig in der MIDI-Datei  ausgegeben; beim Wert von 25001/100003 kippt das Verhalten um: es wird nur noch ein einziger Ton des Akkords  ausgegeben. Das geschieht also, wenn die Alteration den Wert von 1/4 überschreitet. Kann mir jemand sagen, wo das in LP so programmiert ist.

Gruß Erich
« Letzte Änderung: Sonntag, 28. Februar 2016, 19:37 von erich »

fugenkomponist

  • Member
Re: fehlerhafte MIDI-Ausgabe
« Antwort #3 am: Sonntag, 28. Februar 2016, 21:04 »
Schau mal in die Datei lily/midi-item.cc, da gibts Konstanten PITCH_WHEEL_… und ne Funktion get_fine_tuning, die in to_string aufgerufen wird. Keine Ahnung, ob das die richtige Richtung ist, aber könnte ein Ansatz sein.