Ich möchte einen RhythmicStaff mit Schlagzahlen beschriften - wie im folgenden Bild:
Vielleicht könnte man das '_'-Zeichen nach einer Note verwenden, um Zahlen hinzuzufügen, die mit einer Note am Anfang des Beats verbunden sind, aber wie wäre es mit leeren Beats - wo es keine Note oder Pause gibt, aber der Beat trotzdem angezeigt werden muss - wie die letzten Takte im Beispielbild.
Was wäre der richtige Weg, dies zu tun? Idealerweise, damit - jeder Takt, jeder Takt in der Partitur automatisch an den richtigen Stellen mit den Schlagzahlen versehen wird?
Eine Möglichkeit, dies automatisch zu erhalten:
#(define (Kontext Beat_counter_engraver) (let ((measpos #f) (grouping #f) (basemom #f) (beatmom #f)) (definiere (Mama->Dur Mama) (lass ((Paar (Moment->Bruch Mama))) (/ (Autopaar) (CDR-Paar)))) (define (ist-beat-moment? count gping beatcount) (if (= (* count (mom->dur basemom)) (mom->dur measpos)) (+ 1 Beatcount) (if (> (* count (mom->dur basemom)) (mom->dur measpos)) #F (wenn (null? gping) #F (ist-beat-moment? (+ count (car gping)) (cdr gping) (+ 1 beatcount)))))) (Make-Stecher ((Prozess-Musik-Stecher) (set! measpos (ly:context-property context 'measurePosition 'noof)) (set! Gruppierung (ly:context-property context 'beatStructure 'noof)) (set! basemom (ly:context-property context 'baseMoment 'noof)) (Set! Beatmom (Ist-Beat-Moment? 0 Gruppierung 0)) (wenn Beatmama (let ((grob (ly:engraver-make-grob engraver 'TextScript '()))) (ly:grob-set-property! grob 'text (number->string beatmom)) (ly:grob-set-property! grob 'Richtung UNTEN) (ly:grob-set-property! grob 'padding 3))))))) \Layout { \context { \RhythmicStaff \besteht aus #Beat_counter_engraver } } \new RhythmicStaff { \set RhythmicStaff.baseMoment = #(ly:make-moment 1 16) % Stellen Sie manuell sicher, dass das Basismoment 1/16 ist \set RhythmicStaff.beatStructure = 3,3,3,3 % Stellen Sie manuell sicher, dass Beats immer 3 16tel haben \time 6/16 16 16 16 16 16 16| r16 16 16 8. \time 3/16 16[ \once\set stemRightBeamCount = 1 \once\set stemLeftBeamCount = 1 r16 16] \time 6/16 16 16 r r8. \bar "|." } %% mit unterschiedlichen Momenten: \new RhythmicStaff { \time 2/4 8 16 16 8 16 16 \time 3/8 16 16 16 16 16 16 \time 6/8 8 16 16 8 16 16 16 16 16 16 \time 9/7 \tuplet 7/8 { 8 8 8 8 8 8 8 8 8 } }
Ein Problem hier ist, dass dies nur funktioniert, wenn es sich um ein Ereignis im Takt handelt. Wenn Sie also etwas wie \time 4/4 8 4 8 haben, wird dies beim zweiten Takt nichts ausgeben, da dort nichts ist. Sie möchten also vielleicht so etwas tun
<< \music \repeat unfold #(floor (/ (/ (car (moment->fraction (ly:music-length music))) (cdr (moment->fraction (ly:music-length music)))) 1/16)) s16 >>
EDIT: Um so etwas wie Ihr Beispiel zu erreichen, können Sie auch so etwas tun:
#(define (Kontext Beat_counter_engraver) (let ((measpos #f) (grouping #f) (basemom #f) (beatmom #f)) (definiere (Mama->Dur Mama) (lass ((Paar (Moment->Bruch Mama))) (/ (Autopaar) (CDR-Paar)))) (define (ist-beat-moment? count gping beatcount) (if (= (* count (mom->dur basemom)) (mom->dur measpos)) (+ 1 Beatcount) (if (> (* count (mom->dur basemom)) (mom->dur measpos)) #F (wenn (null? gping) #F (ist-beat-moment? (+ count (car gping)) (cdr gping) (+ 1 beatcount)))))) (Make-Stecher ((Prozess-Musik-Stecher) (set! measpos (ly:context-property context 'measurePosition 'noof)) (set! Gruppierung (ly:context-property context 'beatStructure 'noof)) (set! basemom (ly:context-property context 'baseMoment 'noof)) (Set! Beatmom (Ist-Beat-Moment? 0 Gruppierung 0)) (wenn Beatmama (let ((grob (ly:engraver-make-grob engraver 'TextScript '()))) (ly:grob-set-property! grob 'text (number->string beatmom)) (ly:grob-set-property! grob 'Richtung UNTEN))))))) \Layout { \context { \Dynamik \besteht aus #Beat_counter_engraver \override TextScript.font-shape = ##f \override TextScript.Y-offset = #-0.8 \besteht Instrument_name_engraver } } sechzehntes-Gitter-während = #(define-music-function (m) (ly:music?) #{ \repeat unfold #(floor (/ (/ (car (moment->fraction (ly:music-length m)))) (cdr (moment->fraction (ly:music-length m)))) 1/16)) s16 #}) \Papier { ragged-last = ##f } musI = { \mark "In 3" \time 3/8 8 8 16 r | 8 16 16 8 | 16[ 16 8 r16 16] | 4. \bar "|." } > musII = { \mark "In 4" \time 4/8 \set Score.beatStructure = 1,1,1,1 8 16 16~ 8 r8 | r16 16[ r16 16] r16 8.~ | 4 ~ 16 8 16 | 16 r16 4 r8 \bar "|." } >
Versuchen
<<
\new RhythmicStaff
{
\repeat volta 2 {
\tempo "in 3"
\time 3/8
8 8 16 r |
8 16 16 8 |
16[ 16 8 r16 16] |
}
\repeat volta 2 {
\tempo "in 4"
\time 4/8
8 16 16~8 r |
r16 16[ r16 16] r16 8.~ |
4~16 8 16 |
16 r16 4 r8 |
}
}
\new Lyrics \lyricmode {
\repeat unfold 3 { "1"8 "2" "3" | }
\repeat unfold 4 { "1" "2" "3" "4" | }
}
>>
Lyrics
Der grundlegende Trick besteht hier darin, ohne \addlyrics
oder zu verwenden \lyricsto
, sodass Sie die Dauer explizit angeben können: "1"8
ist eine Silbe von "1"
mit einer Dauer von 8
und diese Dauer wird dann als Standard für alles andere verwendet.
user83172
Faul
Saraf
Saraf
Faul
Faul
Faul