MultipleTransposes

Zur Navigation springen Zur Suche springen
Automatisch in mehrere Tonarten transponieren

Ein Musikausdruck soll automatisch in verschiedene Tonarten transponiert werden.

Scheme-Code

multipleTransposes =
#(define-music-function (m music)(ly:music? ly:music?)
   (music-clone m
     'elements
     (map (lambda (pitch)
            (ly:music-property #{ \transpose c $pitch $music #} 'element))
       (event-chord-pitches m))))

Einfügen: {{Score:MultipleTransposes/incl}}

Anwendung

\version "2.20.0"
\language "deutsch"

\paper {
  markup-markup-spacing.padding = #5
  %markup-system-spacing.padding = #5
  markup-markup-spacing.minimum-distance = #1
  oddHeaderMarkup = ##f
  evenHeaderMarkup = #oddHeaderMarkup
  oddFooterMarkup = ##f %\markup \fill-line { \null "Jazz-Akkorde" \null }
  evenFooterMarkup = #oddHeaderMarkup
  ragged-right = ##t
  ragged-last = ##t
  ragged-bottom = ##t
  top-margin = #20
}

\header {
  title = \markup \center-column { "Sophisticated multipleTransposes" " " " " }
}

myMusik = \relative c' { e c des e }
myTrans = { c f' \clef bass a, }

multipleTransposes =
#(define-music-function (m music)(ly:music? ly:music?)
   (music-clone m
     'elements
     (map (lambda (pitch)
            (ly:music-property #{ \transpose c $pitch $music #} 'element))
       (event-chord-pitches m))))

\new Staff
{
  \textLengthOff
  \override Score.RehearsalMark.self-alignment-X = #-1
  \mark "Musik"
  \myMusik
  \mark "Transpositionsfolge"
  \myTrans
}

\markup "Alles in einen Staff"
\new Staff
$(make-sequential-music
  (map
   (lambda (p)
     #{ { \transpose c $p \myMusik } #})
   (event-chord-pitches myTrans)))

\markup "All new Scores"

%% Jeweils neue Scores:
%% "add-score" und "scorify-music" finden sich in lily-library.scm
%% "add-score" Kommentar:
%%    ;; Add a score to the current bookpart, book or toplevel
%% "scorify-music" verwendet "ly:make-score", doku dafür:
%%    "Return score with music encapsulated in it."
%% Man ist jetzt natürlich komplett auf scheme-level
%% Neue Elemente müssen dann auch via scheme eingeführt werden
%% Dazu gibt es einige weitere Funktionen in lily-library.scm

#(for-each
  (lambda (p)
    (add-score
     (scorify-music #{ { \transpose c $p \myMusik } #} )))
  (music-pitches myTrans))

%% Thanks David Kastrup
%% Examples

\markup "die transponierte Musik hintereinander"
\new Staff
\multipleTransposes \myTrans \myMusik

\markup "jede Transponierung erzeugt einen neuen Staff in einem einzigen Score"
\new StaffGroup
<<
  \multipleTransposes << c f a >> \relative c'' \new Staff \myMusik
>>

\markup "alle Transponierungen in einen Akkord, Musik muss aus 1 Ton bestehen"
\new Staff
\multipleTransposes < c f a > e'

Ausgabe