Notationsspezifisch > Noten für Klavier
Klammerzeichen für "linke Hand"/"rechte Hand"
harm6:
Hallo,
--- Zitat ---Für Ideen, wie man daraus nun eine brauchbare Funktion basteln kann, bin ich natürlich gerne zu haben.
Ich lass den Thread mal noch ein paar Tage offen...
--- Ende Zitat ---
ich hab' mich hier noch nicht eingeschaltet, da ich mit anderen Projekten beschäftigt bin.
Bitte schließ' den Thread erstmal nicht, vielleicht habe ich am Wochenende Zeit (oder nächstes Wochenende ... )
--- Zitat ---Wie oder wo könnte ich denn mal bei den Entwicklern um eine entsprechende Funktion ersuchen?
--- Ende Zitat ---
Auf der bug-mailing-list:
http://www.lilypond.org/website/bug-reports.html
Die ist ja nicht nur für tatsächliche bugs, sondern auch für feature-request zu benutzen.
Ist aber schon vor langem geschehen:
https://code.google.com/p/lilypond/issues/detail?id=1319
Du magst vielleicht auch an diesem Thread interessiert sein:
http://lilypond.1069038.n5.nabble.com/Left-hand-right-hand-editorial-annotation-td161987.html
Gruß,
Harm
chrispema:
Danke Harm, für den Link zu dem Thread. Zu diesem Thema scheinen sich ja Welten aufzutun. ??? Hätte nicht gedacht, dass so ein simples Zeichen nicht schon längst in Lily implementiert ist.
Die anderen Ideen, die ich gefunden habe, sind auch nicht schlecht, aber letztlich halt doch alles nur Behelfe. :(
--- Zitat ---Bitte schließ' den Thread erstmal nicht, vielleicht habe ich am Wochenende Zeit (oder nächstes Wochenende ... )
--- Ende Zitat ---
Mach ich doch gerne! Bin gespannt auf deine Ideen... :) Und mach dir keinen Stress, ich hab's nicht eilig. Ich bin nur aus Spaß an der Freude mit Lily beschäftigt.
Wünsch dir ein wundervolles Wochenende!
Christof
trulli:
Hallo Christof,
soweit ich jetzt deinen Posts entnehme, geht es nur noch um minimale Verschiebungen der Klammer nach oben oder unten. Dafür brauchst du keine eigenen Definitionen zu schreiben.
Mit \override oder \tweak kannst du minimale Anpassungen vornehmen. Für eine derart seltene Schreibweise (ich hatte Klavier ja nur im Zweitfach, aber die Schreibweise mit den Klammern kannte ich gar nicht...) mag das vielleicht genügen.
--- Code: ---\version "2.18.0"
\language "deutsch"
RHlow = \markup { %rechte Hand ab 'a' abwärts
\postscript #"-0.5 0.7 moveto 0 5 rlineto stroke"
\postscript #"-1.1 0.7 moveto 1.1 0 rlineto stroke" }
\relative c' {
g'2-\RHlow
g -\tweak #'Y-offset #-3 -\RHlow
\override TextScript #'Y-offset = #-1
g-\RHlow
g-\RHlow
}
--- Ende Code ---
Vielleicht können wir ja harms Kräfte damit ein wenig schonen. ;)
Grüße von Trulli
chrispema:
Hallo Trulli,
worum es mir geht ist eine Funktion, die die Hand-Klammer (ich nenn's jetzt mal so) automatisch in der Nähe des Kopfes platziert, egal, ob der Hals nach oben oder nach unten zeigt. Schön wäre natürlich auch, wenn die Länge der vertikalen Linie an die jeweilige Situaion angepasst würde, damit die Ästhetik gewahrt bleibt. ;)
Mit der aktuellen Lösung bin ich für meine Zwecke absolut zufrieden, sie ist halt nur leider nicht sehr anwenderfreundlich. Hier nochmal zum besseren Verständnis, wie ich's in etwa gerne hätte:
--- Code: ---\version "2.18.0"
RHlow = \markup {
\postscript #"-0.5 0.7 moveto 0 5 rlineto stroke"
\postscript #"-1.1 0.7 moveto 1.1 0 rlineto stroke" }
RHhigh = \markup {
\postscript #"-0.5 3.2 moveto 0 5 rlineto stroke"
\postscript #"-1.1 3.2 moveto 1.1 0 rlineto stroke" }
\relative c' {
g'2-\RHlow _ok
%% Bei Noten oberhalb der h-Linie soll die Klammer auch in Kopfnähe liegen... %%
c-\RHlow % ... tut sie aber nicht.
d-\tweak #'Y-offset #2 -\RHlow % Verschiebung funktioniert nicht...
d-\tweak #'Y-offset #3 -\RHlow % ...oder Verschiebung ist viel zu groß!
d-\RHhigh _ok % etwa so sollte es aussehen
}
--- Ende Code ---
Wenn so eine Funktion zuviel Arbeit bedeutet, weil sich jemand stunden- oder gar tagelang den Kopf zerbrechen muss, dann ist es das (aus meiner Sicht) nicht wert. Wie ich aber aus anderen Threads und Foren erfahren habe (siehe Links von Harm), ist diese Funktion schon seit langem angefragt und demnach offensichtlich auch nicht so ungewöhnlich.
Ich lass den Thread einfach noch 'ne Weile offen, mal sehen, was passiert...
Beste Grüße
Christof
harm6:
Hier der Ansatz von Robin Bannister.
Er hackt das Arpeggio und seine Funktion thBr braucht einen string als Argument.
In diesem string gibt es verschiedene Einstellmöglichkeiten via Ziffern und Sonderzeichen.
Robin hat leider keine Doku dazu gepostet, afaict. Ich bin mit dem Erforschen der Möglichkeiten auch noch nicht sehr weit gediehen, aber was ich weiß hab' ich ins erste Beispiel geschrieben. Den Rest wirst Du wohl auspropieren müssen.
--- Code: ---\version "2.18.0"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +thumb bracket
#(define (make-thumb-bracket-props location spec-str settings-alist)
(define (inchar? index) (> (string-length spec-str) index))
(define (inchar index) (string-ref spec-str index))
(define (char->dir ch)
(case (char-upcase ch) ((#\R) 1) ((#\L) -1) (else 0)))
(define (char->digit ch)
(if (char-numeric? ch) (- (char->integer ch) (char->integer #\0)) 0))
(define (inhit->1 key-str) (if (string-contains spec-str key-str) 1 0))
(define (get key) (assq-ref settings-alist key))
(define (warn p1 p2) (ly:warning
(_ " ~a bad thumb-bracket ~a ~a~a~a") location p1 "" p2 ""))
(let* ( ;% decode spec
(vdir (if (inchar? 0) (char->dir (inchar 0)) 0))
(vbigger (* 0.5 (if (inchar? 1) (char->digit (inchar 1)) 0)))
(vfurther (* 0.5 (if (inchar? 2) (char->digit (inchar 2)) 0)))
(hcloser (* 0.5 (if (inchar? 3) (char->digit (inchar 3)) 0)))
(hrear (* 0.5 (if (inchar? 4) (char->digit (inchar 4)) 0)))
(vbigger+ (* 5 (string-count spec-str #\|)))
(posdir ((if (string-contains spec-str "*") - +) vdir))
(hcloser? (eq? (string-contains spec-str "!") #f))
(vtip=? (string-contains spec-str "="))
(hdir-req (- (inhit->1 "]") (inhit->1 "[")))
(closed? (char-lower-case? (inchar 0))))
(if (zero? vdir) (begin (warn "first char in" spec-str) '())
(let* ( ;% collect settings
(hdir-init (get 'hdir-init)) (htip (get 'htip))
(vtip (get (if vtip=? 'vtip= 'vtip)))
(vstem (get 'vstem)) (vmin (get 'vmin)) (hvernier (get 'hvernier))
(vO 0) (hO 0) (hpad-base 0.5) ;% givens
(hdir (if (zero? hdir-req) hdir-init hdir-req))
(hflip? (positive? hdir))
(h-interval
(if (positive? hdir) (cons hO (+ htip hrear)) (cons (- hrear) htip)))
(vsize (+ vtip (if closed? vtip vstem) vbigger vbigger+))
(vsize+ (if (and closed? (< vsize vmin)) (- vmin vsize) 0))
(vshift (+ vfurther vtip (* 0.5 vsize+)))
(bracket (lambda (grob) (let* ( ;% collect chord range from grob
(vnote-lo-hi (ly:grob-property grob 'positions))
(vnote ((if (eq? posdir 1) cdr car) vnote-lo-hi)))
(grob-interpret-markup grob (markup #:translate (cons
((if (positive? hdir) - +) hvernier) (- vnote (* vdir vshift)))
#:combine #:draw-line (cons htip vO) #:combine
#:translate (cons hO (if closed? (* vdir (+ vsize vsize+)) vO))
#:draw-line (cons htip vO)
#:translate (cons (if (positive? hdir) htip hO) vO)
#:draw-line (cons hO (* vdir (+ vsize vsize+)))))))))
;% alist of props for misusing Arpeggio as a thumb bracket
`((stencil . ,bracket)
(X-extent . ,h-interval)
(padding . ,((if hcloser? - +) hpad-base hcloser))
(direction . ,hdir)
(thickness . ,(get 'weight)))))))
thumbBracketEx = #(define-music-function
(parser location spec settings) (string? list?)
(let* (
(props (make-thumb-bracket-props location spec settings)))
(define (get key) (assq-ref props key))
(if (null? props) (make-music 'SequentialMusic 'void #t)
#{
\once \override Arpeggio.stencil = #(get 'stencil)
\once \override Arpeggio.X-extent = #(get 'X-extent)
\once \override Arpeggio.padding = #(get 'padding)
\once \override Arpeggio.direction = #(get 'direction)
\once \override Arpeggio.thickness = #(get 'thickness)
$(make-music 'EventChord 'elements (list (make-music 'ArpeggioEvent)))
#})))
thumbBracket = #(define-music-function (parser location spec) (string?)
(let ((settings thumbBracketSettings)) ;% as Defaults, or user defined
((ly:music-function-extract thumbBracketEx)
parser location spec settings)))
thumbBracketDefaults = #(quasiquote(
(hdir-init . ,LEFT) ;% usual placement wrt note: on RIGHT or LEFT
(weight . 1.5 ) ;% line thickness
(htip . 0.8 ) ;% horizontal length of bracket tip
(vtip . 0.75 ) ;% usual vertical overlap beyond notehead centre
(vtip= . 0.30 ) ;% alternative vertical overlap
(vstem . 1.25 ) ;% length of an unextended open bracket (excl. tip)
(vmin . 0.6 ) ;% minimum length of a closed bracket
(hvernier . 0.2 ) ;% horizontal quasi-extra-offset
))
thumbBracketSettings = \thumbBracketDefaults
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -thumb bracket
#(define thBr thumbBracket) thbR = \thBr "R" thbL = \thBr "L"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Ein bißchen Erklärung, es gibt aber noch mehr zu erforschen ;)
\transpose a c'
{
\thBr "R" a'4
\thBr "L" a'4
\thBr "r" a'4
\thBr "l" a'4
\thBr "R6" a'4 % erste Ziffer vertikale Länge
\thBr "L6" a'4 % erste Ziffer vertikale Länge
\thBr "R08" a'4 % zweite Ziffer vertikale Versetzung
\thBr "L08" a'4 % zweite Ziffer vertikale Versetzung
\thBr "R008" a'4 % dritte Ziffer horizontale Versetzung
\thBr "L008" a'4 % dritte Ziffer horizontale Versetzung
\thBr "R0008" a'4 % vierte Ziffer horizontales padding vor der Klammer
\thBr "L0008" a'4 % vierte Ziffer horizontales padding vor der Klammer
\thBr "R=" a'4 % "=" bedeutet einen alternativen vertikalen Ansatzpunkt
\thBr "L=" a'4 % "=" bedeutet einen alternativen vertikalen Ansatzpunkt
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Literaturbeispiele
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key f \major
\time 4/4
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { c'''16--[ b''16-- d'''16-- f''16--] }
rhlo = { d''32[ \thBr "L9" f''32 ees''32 d''32 ~ d''16 c''32 b'32] }
lhhi = { g'32[ aes'32 g'32 f'32 g'32 f'32 ees'32 d'32] }
lhlo = { s4 }
\markup "Reger 14"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef treble \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key bes \major
\time 4/4
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { <bes' bes''>4 <c''! a''>16[ <bes' g''>16 c''16 <ees''! g''>16] }
rhlo = { d''8[ ees''!8] \thBr "L" fis'16[ g'16 \thBr "R" a'16 <g' bes'>16] }
lhhi = { d'8[ ees'!8] c'16[ bes16 c'16 bes16] }
lhlo = { bes4 fis16[ g16 a16 bes16] }
\markup "Reger 17"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef treble \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key bes \major
\time 4/4
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { <ees' g' bes' ees''>2-> <c' f' a' c''>-> <f' f''>2.*2/3-> }
rhlo = { s1 <a' c''>8--[ <f' a'>8--] <f' ~ bes'>8--[ <f' c''>8--] }
lhhi = { c8[ g16 a16] bes16[ g16 c'8]
\thBr "R" c'16[ d'16 ees'16 d'16] c'16[ d'16 ees'16 c'16]
\thBr "L4*" <a c'>8--[ <f a>8--] <f bes>8--[ c'8--] }
lhlo = { <c, c>4.-- c8-. <f, f>4.-- a,8-. d4-- d8--[ c8--] }
\markup "Reger 60"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key aes \major
\time 9/8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { ees''4.-> ees''4.-> ~ ees''8[ d''8 ees''8] }
rhlo = { \thBr "L" <aes aes'>8.[ <aes aes'>16 <aes aes'>8] r8
\thBr "R*" <ees' g'>8-.[ <ees' g'>8-.] <ees' aes'>4. }
lhhi = { \oneVoice s4. r8 s4 s4. }
lhlo = { \thBr "R" <c ees ees'>8.[ <c ees ees'>16 <c ees ees'>8] s8
<bes, ees des'>8^.[ <beses, ees des'>8^.] <aes, ees c'>4.^> }
\markup "Scriabin IMSLP #02002 II bar48"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key fis \major
\time 12/8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { eis'2. ~ eis'4. eis'4. }
rhlo = { cis'2. ~ cis'4. cis'4. }
lhhi = { \thBr "r4*=" <eis gis>2. ~ gis4 cis8 gis!4 g8 }
lhlo = { <cis, cis>2. <gisis,, gisis,>2. }
\markup "Scriabin IMSLP 10999 p5"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key bes \major
\time 9/8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Staff.TimeSignature.stencil = ##f
}
rhhi = { \partial 4 <cis' cis''>8[\( <d' d''>8] <ees' ees''>4
<e' e''>8 <fis' fis''>4 <g' g''>8 <g' g''>4 <fis' fis''>8\) }
rhlo = { \partial 4 r8 r8 r8 bes'8[ bes'8] r8 e''8[ e''8]
<a' ees''>8[ <a' ees''>8 <c'' ees''>8] }
lhhi = { \partial 4 \oneVoice r8 r8 r8 s4
\once \override Rest.X-extent = #'(0 . 2.5)
r8 s4 s4.}
lhlo = { \partial 4 s4 s8 <cis, cis>8[
\thBr "R" <g bes g'>8] s8
\thBr "R100=" %"R102="
<bes e' bes'>8[ <cis, cis>8]
\stemUp <cis, cis>8[<c, c>8 <a, a>] }
\markup "Scriabin IMSLP 08382 p47"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key bes \major
\time 4/4
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Staff.TimeSignature.stencil = ##f
}
arpLengthenTo = #(define-music-function (parser location bound) (integer?)
#{ \once \override Arpeggio.positions = #(lambda (grob)
(interval-union (cons bound bound) (ly:arpeggio::calc-positions grob)))
#})
%%% saw what looked like tie pushing arpeggio vertically when doubled up alto
rhhiA = {
\once \override Arpeggio.arpeggio-direction = #down
\once \override NoteColumn.force-hshift = #-0.2
<\tweak transparent ##t d' ees'' g'' c'''>1\arpeggio ~ <ees'' g'' c'''>1 }
rhhiB = {
\once \override Arpeggio.arpeggio-direction = #down
\arpLengthenTo #-4
<ees'' g'' c'''>1\arpeggio ~ <ees'' g'' c'''>1 }
rhhi = { \rhhiA \rhhiB }
rhlo = \repeat unfold 2 { \thBr "l22]" <f' bes'>1 ~ <f' bes'>1 }
lhhi = \repeat unfold 2 { \oneVoice r1 r1}
lhlo = \repeat unfold 2 { s1 s1 }
\markup "F9sus"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\key f \major
\time 3/4
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
}
rhhi = { a'2. }
rhlo = { r4
\thumbBracketEx "L442" #(acons 'htip 2.5 thumbBracketSettings)
<a c'>8[ <bes d'>8] <c' e'>8[ <a c'>8] }
lhhi = { f,2.}
lhlo = { \hideNotes f,16 } % spacing hack
\markup "Possibility"
\score {
\new PianoStaff <<
\new Staff = "rh" { \clef treble \global << \rhhi \\ \rhlo >>}
\new Staff = "lh" { \clef bass \global << \lhhi \\ \lhlo >>}
>>
\layout { indent = 0.0\cm }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\new Staff = "down" {
\clef bass
\set tieWaitForNote = ##t
\times 2/3 { cis,8~ d~ \thBr "R4001" a~ } <cis, d a>4
\times 2/3 { d,8~ fis~ \thBr "R" d'~ } <d, fis d'>4
\bar "||"
}
--- Ende Code ---
Gruß,
Harm
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln