----- Original Message ----- From: "Lukas-Fabian Moser" <l...@gmx.de>
To: <lilypond-user@gnu.org>
Sent: Saturday, June 27, 2020 8:12 AM
Subject: Harmonics in tablature


Stacy's question ("Three problems with harmonics") prompted me to try
LilyPond's tablature facilities for the first time.

I beg forgiveness for using it not for guitar/bass but for the cello -
for me it's the most convenient way since I know the
fingerings/imaginary "frets" and harmonics positions by heart on that
instrument, and luckily, the physics is the same :-).

My question is:

\version "2.21.0"

music =
 c4 d e f g a b c'
 \bar "||"
 \harmonicByFret #12 g,
 \harmonicByFret #7 g,
 \harmonicByFret #5 g,

 \new TabStaff {
 \set TabStaff.stringTunings = \stringTuning <c, g, d a>

 \new Staff {
 \clef bass

The first two bars are fine and standard 1st position cello fingering.

But the harmonics that follow confuse me. I read the input as "use the
12th/7th/5th fret over the open g, string". If you play this, you
definitely get the sounding pitches the lower staff indicates.

But why are the harmonics in tablature are printed for the d and a strings?

Either I fundamentally misunderstand the way harmonics should be read in
tablature, or there is a serious flaw in LilyPond's logic that
determines the string number in tablature. (Yes, I know that I can fix
the output by adding \3 manually, but...)


I'm wondering if you expect the harmonicByFret function to be smarter than it looks it actually is. Reading the NR and doing some experimenting (I don't really understand tab notation and had to look up which fret produces which note) and it seems to me that the actual syntax is:

harmonicByFret FretNo BaseNote \StringNo

i.e. the combination of BaseNote and FretNo produces the sounding tone, and StringNo states where to place the Fret indication. It looks to me that the string number has to be set completely separately from the base note (i.e. the octave below the harmonic on fret 12). If you try, you'll see that specifying an e, as the base note, you get e no matter which string you say it should be sounded on. So I reckon you must use the syntax that is always shown in the NR to get this to work - i.e. essentially 3 arguments to harmonicByFret.

Phil Holmes

Reply via email to