[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Change stem direction based on position of note in staff?
From: |
Stefano Antonelli |
Subject: |
Re: Change stem direction based on position of note in staff? |
Date: |
Wed, 4 Sep 2024 17:45:59 +0000 |
User-agent: |
Evolution 3.36.5-0ubuntu1 |
Hi Lukas,
On Wed, 2024-09-04 at 18:22 +0200, Lukas-Fabian Moser wrote:
> > What I'd like to see is a syntax like this:
> >
> > \beatOne = \drummy {
> > {hihat},
> > {snare}.
> > {bass drum},
> > }
> >
> > Which can then be combined with:
> >
> > \beatTwo = \drummy {
> > {hihat},
> > {high tom},
> > {low tom},
> > {snare},
> > {bass drum},
> > {pedal hihat},
> > }
> I must admit I don't fully understand this proposal. Where/how would
> you enter, for instance, a hihat tick on the second quaver in a bar?
tl;dr
\beatOne is short hand for drum beat number one and not first beat
(quaver) of the bar.
\beatTwo is short hand for drum beat number two and not second beat
(quaver) of the bar.
My apologies. Drummer's perspective. I'll change it to \drumBeatOne
and \drumBeatTwo.
A more concrete example written as hands and feet.
mainGroove = \drummode {
<<
hh4 <hh sn>4 hh4 <hh sn>8 hh8 |
\\
bd4 s4 bd4 s4 |
>>
}
Then I can simply repeat that for x bars. However, there is usually a
crash on beat one with the same groove. So I write it again with a
small change:
mainGrooveCrash = \drummode {
<<
cymc4 <hh sn>4 hh4 <hh sn>8 hh8 |
\\
bd4 s4 bd4 s4 |
>>
}
Then I can write something like:
\mainGrooveCrash \repeat volta 6 { \mainGroove } \fillI
And that might be the verse for a song.
My example above would translate into:
drumBeatOne = \drummy {
hh4 hh4 hh4 hh8 hh8,
s4 sn4 s4 sn4,
bd4 s4 bd4 s4,
}
drumBeatTwo = \drummy {
cymc4 s2.,
s4 hh4 hh4 hh8 hh8,
s4 sn4 s4 sn4,
bd4 s4 bd4 s4,
}
drumBeatTwo is a little contrived having that crash cymbal on it's own
line like that. There would be no real reason to write it like that,
but it should still work.
Then I would like to write something like:
\drumBeatTwo \repeat volta 6 { \drumBeatOne } \fillI
I was thinking \drummy would be implemented as a kind of polyphonic
string replacement where:
beatOne = \drummy {
hh4 hh4 hh4 hh8 hh8,
s4 sn4 s4 sn4,
bd4 s4 bd4 s4,
}
becomes:
beatOne = \drummode {
<<
hh4 hh4 hh4 hh8 hh8 |
\\
s4 sn4 s4 sn4 |
\\
bd4 s4 bd4 s4 |
>>
}
But then I'm not sure what line of code any bar checks errors would
point to. If lilypond tells me the error is up in the \drummy block,
that would be great. If not, then it's not helpful.
And then the most glaring problem is that the stems will be all messed
up because drumBeatTwo has the crash cymbal in the first voice (stems
up) and the hihat in the second voice (stems down). Of course, the
bigger problem is that this:
drumBeatOne = \drummy {
hh4 hh4 hh4 hh8 hh8,
s4 sn4 s4 sn4,
bd4
s4 bd4 s4,
}
should be "condensed" to this (hands and feet):
drumBeatOne = \drummode {
<<
hh4 <hh sn>4 hh4 <hh sn>8 hh8
\\
bd4 s4 bd4 s4
>>
}
Rather than this:
drumBeatOne = \drummode {
<<
hh4 hh4 hh4 hh8 hh8 |
\\
s4 sn4 s4 sn4 |
\\
bd4 s4 bd4 s4 |
>>
}
Which is more complicated than simple string replacement.
My concern about that approach is the issue of locating bar line checks
where they occur in \drummy. If bar checks don't work work as
expected, I don't think \drummy is a good approach. I may be wrong.
Which is why I thought a more general approach would be better.
Something that can combine the voices based on their staff position or
note value. Something the score could be wrapped with:
\drumCombine {
\drumBeatTwo \repeat volta 6 { \drumBeatOne } \fillI
}
In that case, there would be no need for \drummy and music would be
entered using polyphonic notation. In other words like this:
drumBeatOne = \drummode { <<
hh4 hh4 hh4 hh4 |
\\
s4 sn4 s4 sn4 |
\\
bd4 s4 bd4 s4 |
>>
}
That way bar line checks point to the correct location in the source. However,
other errors, like failing to merge notes or rests, would probably be really
hard to find like that so perhaps \drummy *is* the better compromise.
I hope that didn't make things more confusing.