lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Three problems with harmonics (pitch and chords)


From: Lukas-Fabian Moser
Subject: Re: Three problems with harmonics (pitch and chords)
Date: Sat, 27 Jun 2020 08:52:41 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0

Hi Stacy,

I'm not familiar with harmonics notation or tabulature, but I think both of your problems can be solved.

Am 27.06.20 um 01:05 schrieb Stacy Fatemi:
Hey list,

I'm notating a piece for 6-string bass with heavy harmonic use, including chords with different fretted harmonics. Attachment 1 (the hand-drawn bar) shows how I want this measure to go: root notes in voice 2, harmonics in voice 1, with a chord composed of a 7th fret harmonic on the 1st string and 5th fret harmonics on the 2nd and 3rd strings. Here are the problems:
This presents us with two more problems:

2. The harmonics in the first voice are severely augmenting the fret number in the second voice (it's not a huge issue in this tiny example, but in the full file I'm working on I have a line of 78 commas in a row for the first note of the second file to get it on the right fret), and

This is caused by the use of \relative mode.

Here's why: In \relative mode, the absolute pitch of each note you enter influences the next entered pitch (insofar as any pitch entered _without_ ' oder , is taken to be at most a fourth away from the last entered pitch, and ' and , only add/substract octaves). Now, what you probably did not expect: This does not keep track of parallel independent voices. Instead, your very high note \harmonicByRatio #1/4 <e\3 a\2>2. makes LilyPond assume that the next note encountered in your source file is to be taken relative to that high note.

There are verious ways of solving this problem, of adding a bunch of ,,,,,'s to get back to the normal octave is probably not the best. One way would be to start a new \relative environment for your lower voice:

\relative c,, { b'2.\5 b4\5 | }

But probably it would be best to not use relative mode at all, but instead use fixed mode. To be honest, I spent the last half an hour trying to figure out what happens behind the scene for your first command,  \harmonicByRatio #1/4 <e\3 a\2>2. in \relative mode. I'm not sure yet, but I think that \harmonicByRatio is seriously broken when used for chords in \relative mode.

(Anybody who wants to try: Compile #(calc-harmonic-pitch #{ c' #} #{ \relative <c' f'> #}. The function calc-harmonic-pitch should not do anything when given c' as "harmonic pitch", if I understand the source code in tablatura.scm correctly.)

But I admit that I do not yet understand the logic by which the fret numbers for harmonics are calculated. I'm not that familiar with the bass (and so I have to calculate rather a lot), but when I just tried to define stringTunings for the cello (which I'm very familiar with) I could understand usual pitches easily, but could not get my head around the displayed tabs for harmonics. But maybe I will.

3. The harmonics don't form a coherent chord, but rather a staggered display with a collision between the stem from voice 1 and the note from voice 3.

This is not a bug but a feature: Normally, you want to be able to distinguish the first and the third voice. But not here.

The construction << ... \\ ... \\ >> is a bit involved in that it does _several_ things: It creates independent voices, yes, but it also sets defaults for shifting and stem direction (namely, the first voice gets a \voiceOne, which should be read as "should be layouted as a first voice, e.g. with \stemUp etc."). In more complicated situations, it's often more convenient not to use the \\'s but to create the voices for yourself and setting them up manually:

<<
  \new Voice { \voiceOne ... }
  \new Voice { \voiceThree .... }
>>

But the easiest remedy in your situation is:

\version "2.18.2"

\score {
  \new TabStaff
    {
    \set Staff.stringTunings = \stringTuning <a,,, e,, a,, e, a, cis>
    \tabFullNotation
    \relative c,, {
    <<
      { r4 \harmonicByRatio #1/4 <e\3 a\2>2. | }
    \\
      \relative c,, { b'2.\5 b4\5 | }
    \\
      { s4 \voiceOne \harmonicByFret #7 cis2.\1 | }
    >>
      }
    }
}

Note that I also changed r4 into s4 - s4 behaves like a rest but does not print anything, and we only need one actual printed rest.

Best
Lukas


reply via email to

[Prev in Thread] Current Thread [Next in Thread]