Autor Thema: \quoteDuring und \transposition  (Gelesen 1842 mal)

fugenkomponist

  • Member
\quoteDuring und \transposition
« am: Freitag, 10. Juli 2015, 14:05 »
Hallo allerseits,

angenommen ich hab Cello und Bass, die über weiter Strecken eines Stücks das gleiche spielen (notiert gleich, klingend im Oktavabstand). Dann kann ich ja den Bass vieles einfach zitieren lassen mit \quoteDuring. Probleme gibts dann aber beim MIDI-Output, bei dem ich mit \transposition c den Bass transponiere. Die zitierten Teile werden davon nämlich nicht beeinflusst, die direkt eingegebenen schon. Nun kann ich in der NR nichts finden von wegen „das ist ein bekanntes Problem“, mach ich hier was falsch oder ist LilyPond schuld?

\version "2.19.20"

vc = \relative {
  \clef bass
  g a b c d e fis g
}
\addQuote "vc" \vc

cb = \relative {
  \clef bass
  \quoteDuring "vc" s1 d'1
}

\score {
  <<
    \new Staff \vc
    \new Staff \cb
  >>
}

\score {
  <<
    \new Staff \with {
      midiInstrument = "cello"
    } \vc
    \new Staff \with {
      midiInstrument = "contrabass"
    } {
      \transposition c \cb
    }
  >>
  \layout { }
  \midi { }
}

Edit: Es ist überhaupt erst seit Version 2.19.19 (April 2015) so, dass zitierte Musik ins Midi aufgenommen wird, siehe https://code.google.com/p/lilypond/issues/detail?id=4343. Hier spielt also die LilyPond-Version tatsächlich eine entscheidende Rolle.

Edit 2: Ich sehe gerade, es ist kein Problem des MIDI-Outputs allein, sondern schon eins in der Kombination von \transposition und \quoteDuring, siehe Bild.
« Letzte Änderung: Freitag, 10. Juli 2015, 16:34 von fugenkomponist »

harm6

  • Member
Re: \quoteDuring und \transposition
« Antwort #1 am: Freitag, 10. Juli 2015, 16:37 »
Hallo,

hilft das:

\version "2.19.22"

transposedQuoteDuring =
#(define-music-function
   (what pitch main-music)
   (string? ly:pitch? ly:music?)
   (make-music 'QuoteMusic
               'element main-music
               'quoted-music-name what
               'quoted-transposition pitch))

vc = \relative {
    \clef bass
    g a b c d e fis g
}
\addQuote "vc" \vc

cb = \relative {
  \clef bass
  \transposedQuoteDuring "vc" c' s1 d'1
}

\score {
  <<
    \new Staff \vc
    \new Staff \displayMusic \cb
  >>
}

\score {
  <<
    \new Staff \with {
      midiInstrument = "cello"
    } \vc
    \new Staff \with {
      midiInstrument = "contrabass"
    } {
       \transposition c
       \cb
    }
  >>
  \midi { }
}

Aber ein bug-report ist wohl fällig.

Gruß,
  Harm
« Letzte Änderung: Freitag, 10. Juli 2015, 16:54 von harm6 »

fugenkomponist

  • Member
Re: \quoteDuring und \transposition
« Antwort #2 am: Freitag, 10. Juli 2015, 16:44 »
Leider hilft mir das nicht, ich kann es nämlich mit 2.19.20 (Linux 64 bit) nicht kompilieren:

Starte lilypond 2.19.20 [harmsloesungtransposedquote.ly]...
Processing `/…/harmsloesungtransposedquote.ly'
Parsing...
Interpreting music.../usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f (what pitch main-music)>
Wurde mit dem Return-Code 1 beendet.

Ich weiß auch gerade nicht, woran es scheitert. Ich probier mal, die Fehlermeldungen nachzuvollziehen, meine ersten Ansätze haben aber noch nichts gebracht.

Edit: mit 2.19.22 gehts, danke! Es ist zwar nervig, die Transposition beim Zitat mit angeben zu müssen, aber da kann ich mir ja nen abkürzenden Befehl schreiben, der immer die gleiche Transposition verwendet.
« Letzte Änderung: Freitag, 10. Juli 2015, 16:52 von fugenkomponist »

harm6

  • Member
Re: \quoteDuring und \transposition
« Antwort #3 am: Freitag, 10. Juli 2015, 16:55 »
Richtig, ich habe 2.19.22 verwendet (die version ist jetzt korrigiert)

Für 2.19.21 und davor sollte folgendes klappen:

transposedQuoteDuring =
#(define-music-function
   (parser location what pitch main-music)
   (string? ly:pitch? ly:music?)
   (make-music 'QuoteMusic
               'element main-music
               'quoted-music-name what
               'quoted-transposition pitch))

Gruß,
  Harm

fugenkomponist

  • Member
Re: \quoteDuring und \transposition
« Antwort #4 am: Freitag, 10. Juli 2015, 17:11 »
Oh, sehr schöne Änderung. Ich hab mich schon immer gefragt, was „parser“ und „location“ da zu suchen haben, wenn die eh nie jemand verwendet ;)

Wenn ich mir mal das Ergebnis des folgenden Codes anschau, dann hab ich das Gefühl, dass \quoteDuring sich einfach wie \newQuoteDuring verhalten sollte, oder? Es scheint sich sowohl mit \transposition als auch mit \transpose zu verstehen (bei ersterem hatte ich erst meine Zweifel, weil es in define-music-properties.scm heißt, dass quoted-transposition \transposition überschreibt.

\version "2.19.22"

newQuoteDuring =
#(define-music-function
  (what main-music)
  (string? ly:music?)
  (make-music 'QuoteMusic
    'element main-music
    'quoted-music-name what
    'quoted-transposition #{ c' #} ))

A = \relative {
  \key c \major
  c'4 d e f
  g a b c
}
\addQuote "a" \A

B = \relative {
  \quoteDuring "a" s1
  g'2 f4 e
}

C = \relative {
  \newQuoteDuring "a" s1
  g'2 f4 e
}

\score {
  <<
    \new StaffGroup <<
      \new Staff { \A }
      \new Staff { \B }
      \new Staff { \C }
    >>
    \new StaffGroup <<
      \new Staff { \transposition a \A }
      \new Staff { \transposition a \B }
      \new Staff { \transposition a \C }
    >>
    \new StaffGroup <<
      \new Staff { \transpose a c' \A }
      \new Staff { \transpose a c' \B }
      \new Staff { \transpose a c' \C }
    >>
  >>
}

Edit: falsch gedacht, es überschreibt doch eine \transposition. Nämlich die des zitierten Teils:
\version "2.19.22"

newQuoteDuring =
#(define-music-function
  (what main-music)
  (string? ly:music?)
  (make-music 'QuoteMusic
    'element main-music
    'quoted-music-name what
    'quoted-transposition #{ c' #} ))

A = \relative {
  \transposition g
  \key c \major
  c'4 d e f
  g a b c
}
\addQuote "a" \A

B = \relative {
  \transposition g
  \quoteDuring "a" s1
  g'2 f4 e
}

C = \relative {
  \transposition g
  \newQuoteDuring "a" s1
  g'2 f4 e
}

\score {
  <<
    \new StaffGroup <<
      \new Staff { \A }
      \new Staff { \B }
      \new Staff { \C }
    >>
    \new StaffGroup <<
      \new Staff { \transposition a \A }
      \new Staff { \transposition a \B }
      \new Staff { \transposition a \C }
    >>
    \new StaffGroup <<
      \new Staff { \transpose a c' \A }
      \new Staff { \transpose a c' \B }
      \new Staff { \transpose a c' \C }
    >>
  >>
}

2. Edit mit Lösung: Ich habe jetzt beschlossen, dass das geänderte Verhalten bezüglich Transpositionen mich nicht stört, weil nur Fälle anders sind, die ich sowieso nicht benutze (nämlich dann, wenn man schon in den Noten-Variablen Transpositionen setzt – Ich setze aber erst in der Partitur alle möglichen Transpositionen). Daraufhin habe ich die Funktion erweitert und umbenannt: \ottavaQuoteDuring kann Zitate beliebig viele Oktaven transponieren; außerdem färbe ich Zitate jetzt ein, um zu wissen, welche Stimme gerade das „Original“ hat. Code ist zu finden in der Datei advanceQuote.ily in diesem Post.
« Letzte Änderung: Mittwoch, 19. August 2015, 13:24 von fugenkomponist »