Dear Francois,
there is a way to write the symbols of the Riemann-Maler-Functions with
lilypond.
I've started to write a little library with these symbols, but I'm not
finished yet.
I 've attached the file.
There is still something to do. As You can see, the position of the
"verkuerzte D7" ( I don't know the english word for it) is anything but
perfect.
Here is my code:
\version "2.12.3"
\include"funktionen.ly"
\relative c' {
\Sdrei c1 \Tdrei g'
\verkuerzter f \T e
}
Hello,
>
> I would like to know if there is a way (i search quite a while
> whithout success) to write chords according to Riemann's Function
> Theory. In principle, math would do the trick, but there are some
> arguments for a own syntax (have a look at
> <http://de.wikipedia.org/wiki/Datei:FunktionsAnalyseBach.PNG>)
>
> Thanks in advance
>
> Francois
>
>
\version "2.12.0"
\layout{
\context { \Staff \override TextScript #'staff-padding = #4.0 }
\context {
\type "Engraver_group"
\name "Funktion"
\alias Voice
\consists "Output_property_engraver" %keine Ahnung, was das bedeuten soll!
\consists "Text_spanner_engraver"
\consists "Text_engraver"
\consists "Axis_group_engraver"
% \consists "Bar_engraver"
\override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1)
}
\context { \Score \accepts Funktion }
\context { \PianoStaff \accepts Funktion }
} %Ende Layout
% Inspired by slashed-digit from scm/define-markup.scm:
#(define-markup-command (slashed-char layout props ch) (char?)
"A character, with slash."
(let*
((mag (magstep (chain-assoc-get 'font-size props 0)))
(thickness
(* mag
(ly:output-def-lookup layout 'line-thickness)
(chain-assoc-get 'thickness props 1.6)))
(char-stencil (interpret-markup layout props ch))
(num-x (interval-widen (ly:stencil-extent char-stencil X)
(* mag 0.1)))
(num-y (ly:stencil-extent char-stencil Y))
(is-sane (and (interval-sane? num-x) (interval-sane? num-y)))
(slash-stencil
(if is-sane
(ly:make-stencil
`(draw-line
,thickness
,(car num-x) ,(car num-y)
,(cdr num-x) ,(cdr num-y))
num-x num-y)
#f)))
(ly:stencil-add char-stencil slash-stencil)))
%Zuerst die Hauptfunktionen:
%%%%%%%%%%%%% Alle möglichen Tonikas
%zuerst die Durtonikas
Tonika = \markup {T}
T = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Tonika} >>
#})
Tonikamitterzimbass = \markup {T { \hspace #-1.5 \raise #0.25 \sub 3 } }
Tdrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Tonikamitterzimbass} >>
#})
Tonikamitquintimbass = \markup {T { \hspace #-1.5 \raise #0.25 \sub 5 } }
Tfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Tonikamitquintimbass } >>
#})
%Tonika als Textspanner
Tspan = {
\textSpannerDown
\override TextSpanner #'bound-details #'left #'text =
\markup {"T" }
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'style =
#'dashed-line
\override TextSpanner #'dash-period = #0.01
\override TextSpanner #'bound-details #'right #'attach-dir = #1
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'bound-details #'right #'padding = #-0.5
} %damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!
%dasselbe nun in Moll
tonika = \markup {t}
mt = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\tonika} >>
#})
tonikamitterzimbass = \markup {t { \hspace #-1.5 \raise #0.25 \sub 3 } }
tdrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\tonikamitterzimbass} >>
#})
tonikamitquintimbass = \markup {t { \hspace #-1.5 \raise #0.25 \sub 5 } }
tfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\tonikamitquintimbass } >>
#})
%tonika als Textspanner
tspan = {
\textSpannerDown
\override TextSpanner #'bound-details #'left #'text =
\markup {"t" }
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'style =
#'dashed-line
\override TextSpanner #'dash-period = #0.01
\override TextSpanner #'bound-details #'right #'attach-dir = #1
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'bound-details #'right #'padding = #-0.5
}
%
%Alle Dursubdominanten
Subdominante = \markup {S}
S = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Subdominante} >>
#})
Subdominantemitterzimbass = \markup {S { \hspace #-1.5 \raise #0.25 \sub 3 } }
Sdrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Subdominantemitterzimbass} >>
#})
Subdominantemitquintimbass = \markup {S { \hspace #-1.5 \raise #0.25 \sub 5 } }
Sfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Subdominantemitquintimbass } >>
#})
%%% Moll Subdominante
subdominante = \markup {s}
ms = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\subdominante} >>
#})
%sixte ajoutee
%der Sixteajoutee in Grundstellung
SubdominantemitQuinteundSexte = \markup {S { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8 \super \teeny 5} }
Sajoutee = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexte } >>
#})
SubdominantemitQuinteundSexteTerzimBass = \markup {S { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8 \super \teeny 5} \hspace #-3 \raise #0.25 \sub 3 }
Sajouteedrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteTerzimBass } >>
#})
SubdominantemitQuinteundSexteQuinteimBass = \markup {S { \super \hspace #-1.5 \raise #1.5 \teeny 6 }
\hspace #-2 \raise #0.25 \sub 5 }
Sajouteefuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteQuinteimBass } >>
#})
SubdominantemitQuinteundSexteSexteimBass = \markup {S { \super \hspace #-1.5 \raise #1.5 \teeny 5 }
\hspace #-2 \raise #0.25 \sub 6 }
Sajouteesechs = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteSexteimBass } >>
#})
%Die Sixteajoutee und ihre Umkehrungen in Moll!
subdominantemitQuinteundSexte = \markup {s { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8 \super \teeny 5} }
sajoutee = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexte } >>
#})
subdominantemitQuinteundSexteTerzimBass = \markup {s { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8 \super \teeny 5} \hspace #-3 \raise #0.25 \sub 3 }
sajouteedrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteTerzimBass } >>
#})
subdominantemitQuinteundSexteQuinteimBass = \markup {s { \super \hspace #-1.5 \raise #1.5 \teeny 6 }
\hspace #-2 \raise #0.25 \sub 5 }
sajouteefuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteQuinteimBass } >>
#})
subdominantemitQuinteundSexteSexteimBass = \markup {s { \super \hspace #-1.5 \raise #1.5 \teeny 5 }
\hspace #-2 \raise #0.25 \sub 6 }
sajouteesechs = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteSexteimBass } >>
#})
%Jetzt der Ssechs
SubdominantemitSexte =
\markup { S \hspace #-1.5 \raise #0 \super \teeny 6 }
Ssechs = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2
s1*0_\SubdominantemitSexte } >>
#})
subdominantemitSexte =
\markup { s \hspace #-1.5 \raise #-0.5 \super \teeny 6 }
ssechs = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2
s1*0_\subdominantemitSexte } >>
#})
%der berühmte Neapolitaner!
Neapolitaner =
\markup { s \hspace #-1.5 \raise #-0.5 \super \teeny n }
sn = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'Y-offset =#-2
s1*0_\Neapolitaner } >>
#})
%Die sogenannten Nebenfunktionen in Dur, erstmal nur deren GrundStellungen:
Tonikaparallele = \markup {Tp}
Tp = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Tonikaparallele} >>
#})
Subdominantparallele = \markup {Sp}
Sp = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Subdominantparallele} >>
#})
Dominantparallele = \markup {Dp}
Dp = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Dominantparallele} >>
#})
Tonikagegenklang = \markup {Tg}
Tg = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Tonikagegenklang} >>
#})
%Diese nun auch in Moll
tonikaParallele = \markup {tP}
tP = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\tonikaParallele} >>
#})
tonikaParalleleterzimbass = \markup {tP { \hspace #-1.5 \raise #0.25
\sub 3 } }
tPdrei= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\tonikaParalleleterzimbass} >>
#})
tonikaParalleleQuintimbass = \markup {tP { \hspace #-1.5 \raise #0.25
\sub 3 } }
tPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\tonikaParalleleQuintimbass} >>
#})
subdominantParallele = \markup {sP}
sP = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\subdominantParallele} >>
#})
subdominantParalleleterzimbass = \markup {sP { \hspace #-1.5 \raise #0.25
\sub 3 } }
sPdrei= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\subdominantParalleleterzimbass} >>
#})
subdominantParalleleQuintimbass = \markup {sP { \hspace #-1.5 \raise #0.25
\sub 3 } }
sPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\subdominantParalleleQuintimbass} >>
#})
dominantParallele = \markup {dP}
dP = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\dominantParallele} >>
#})
dominantParalleleterzimbass = \markup {dP { \hspace #-1.5 \raise #0.25
\sub 3 } }
dPdrei= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\subdominantParalleleterzimbass} >>
#})
subdominantParalleleQuintimbass = \markup {dP { \hspace #-1.5 \raise #0.25
\sub 3 } }
dPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x {
s1*0_\subdominantParalleleQuintimbass} >>
#})
%ein paar Typische Wendungen: Der WechelQuartsextakkord
sechsvier = \markup { \hspace #'1 { \column { \raise #-4 \teeny 6 \raise #-3 \teeny 4 } } }
fuenfdrei = \markup { \hspace #'1 { \column { \raise #-4 \teeny 5 \raise #-3 \teeny 3 } } }
Wechselquartsext= #(define-music-function (parser location x y z ) (ly:music? ly:music? ly:music?)
#{
\Tspan \context Voice << $x { s1*0 \startTextSpan^\fuenfdrei } >>
\context Voice << $y { s1*0^\sechsvier }>>
\context Voice << $z { s1*0 \stopTextSpan^\fuenfdrei }>>
#})
Dspan = {
\textSpannerDown
\override TextSpanner #'bound-details #'left #'text =
\markup {"D" }
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'style =
#'dashed-line
\override TextSpanner #'dash-period = #0.01
\override TextSpanner #'bound-details #'right #'attach-dir = #1
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
\override TextSpanner #'bound-details #'right #'padding = #-0.5
}
Vorhaltsquartsext= #(define-music-function (parser location x y ) (ly:music? ly:music? )
#{
\Dspan \context Voice << $x { s1*0 \startTextSpan^\sechsvier } >>
\context Voice << $y { s1*0 \stopTextSpan^\fuenfdrei }>>
#})
%%Die Dominante
Dominante = \markup {D}
D = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\markup { \Dominante } } >>
#})
Dominantemitterzimbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 3 } }
Ddrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Dominantemitterzimbass} >>
#})
Dominantemitquintmbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 5 } }
Dfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Dominantemitquintmbass} >>
#})
% Dominante in klammern
KlammerDominante = \markup {(D)}
kD = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'extra-offset = #'(0 . 2.1) s1*0_\markup {(D)} } >> }
#})
klammerDominantemitterzimbass = \markup {\KlammerDominante { \hspace #-1.5 \raise #0.25 \sub 3 } }
kDdrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\klammerDominantemitterzimbass} >>
#})
klammerDominantemitquintmbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 5 } }
kDfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\klammerDominantemitquintmbass} >>
#})
%alle Dsiebens
Dominantsept = \markup { D \hspace #-1.75 \super \small 7 }
% verkuerzter D7
Dominantemitquinteimbassohnegrundtonmitsepte = \markup { \raise #3 \slashed-char #"D" \raise #3 \super \teeny 7 \hspace #-3 \raise #3.25 \sub 5 }
verkuerzter = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x s1*0 _\Dominantemitquinteimbassohnegrundtonmitsepte >>
#})
Dsieben= #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'extra-offset = #'(0 . 3.1) s1*0_\Dominantsept} >>
#})
DsiebenTerzimBass = \markup {D { \hspace #-2 \sub 3 \hspace #-1.75 \super \small 7 } }
Dsiebenrei = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'extra-offset = #'(0 . 3.1) s1*0_\DsiebenTerzimBass} >> }
#})
Dominantterzquart = \markup {D { \hspace #-2 \sub 5 \hspace #-1.75 \super \small 7 } }
Dsiebenfuenf = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { \once \override TextScript #'extra-offset = #'(0 . 3.1) s1*0_\Dominantterzquart} >> }
#})
% die Doppeldominante, mit allen Umkehrungen:
Doppeldominante = \markup{D \hspace#-2.2 \raise #0.9 D }
DD = #(define-music-function (parser location x) (ly:music?)
#{
\context Voice << $x { s1*0_\Doppeldominante} >>
#})
%DoppeldominanteTerzimBass = \markup { \Doppeldominante
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user