Skip to content
learn

Lesson 15: The fretboard — CAGED, fingering and playability

Lessons 1 and 8 put notes on the neck, and lesson 14 arranged them into voicings. This lesson looks at the neck as a physical object: where the frets lie, how many of them a hand covers, the five chord shapes of the CAGED system that slide along it, and the tunings that change it. Guitar Alchemist (GA) measures all of it: two classes compute fret distances, three measures score how hard a shape is to play, a configuration file lists tunings, and a tool of its MCP server offers easier voicings to a guitarist who cannot play a barre chord. The course program computes the same quantities from their definitions and compares.

All GA links point to commit a826864. The outputs come from the command below; the entry point is l17.

Terminal window
dotnet run --project code/music-theory-ga/GaTheory -c Release -- l17

Wikipedia: “the ratio of the distances of two consecutive frets to the bridge is … (the twelfth root of two), or approximately 1.059463”, and “Theoretically, the twelfth fret should divide the string in two exact halves” (Fret). The Streeling module MUS-009 · Tuning and Fretboard Geometry derives the distance from the nut to fret n, d(n) = L · (1 − 2^(−n/12)), where L is the scale length, the vibrating length of the open string, and gives figures: “On a 648 mm scale, frets 1, 5, 7, 12 and 24 lie 36.4, 162.5, 215.5, 324 and 486 mm from the nut” (mus-009-tuning-fretboard-geometry.md#L84). The frets get closer together up the neck. Above the 12th fret, the neck is a half-size copy of the part below: the same five frets measure half as much from fret 12 as from the nut.

FretboardGeometry, whose summary says “Implements standard logarithmic fret spacing”, computes 2^(−low/12) − 2^(−high/12), a fraction of the string, and multiplies it by a scale length of 647.7 mm, “(25.5 inches)” (BiomechanicsConstants.cs#L10-L11). PhysicalFretboardCalculator, which lesson 14’s analyzers call, works on 648 mm, its “Electric guitar (Fender)” default (#L327-L334). The program asks both (Lesson17.cs#L185-L198):

== Distance from the nut to fret n, the course's d(n) = L(1 − 2^(−n/12)), against FretboardGeometry.CalculateSpanMm(0, n) on its 647.7 mm and PhysicalFretboardCalculator.CalculateFretPositionMm(n) on its 648 mm (GA.Domain.Services, compiled)
fret course, 647.7 CalculateSpanMm check course, 648 CalculateFretPositionMm check
1 36.35 36.35 ok 36.37 36.37 ok
2 70.66 70.66 ok 70.70 70.70 ok
3 103.05 103.05 ok 103.10 103.10 ok
4 133.62 133.62 ok 133.68 133.68 ok
5 162.47 162.47 ok 162.55 162.55 ok
7 215.41 215.41 ok 215.51 215.51 ok
12 323.85 323.85 ok 324.00 324.00 ok
17 405.09 405.09 ok 405.27 405.27 ok
19 431.56 431.56 ok 431.76 431.76 ok
24 485.78 485.78 ok 486.00 486.00 ok
the length left to the saddle, fret n against fret n + 1, for n from 0 to 23: 1.059463 each time, the twelfth root of two: True
MUS-009's frets 1, 5, 7, 12 and 24 on 648 mm, "36.4, 162.5, 215.5, 324 and 486": the calculator gives 36.4, 162.5, 215.5, 324, 486

Both agree with the formula at every fret, the ratio is the twelfth root of two at all 24 frets, and MUS-009’s figures come out.

Next to these classes, GA keeps a document, PHYSICAL_PLAYABILITY_IMPROVEMENTS.md, which gives a “5-fret span at different positions” (#L45-L50) and quotes the output of a test, “Difference (low vs high): 50.02mm (71.4% larger)” (#L155-L161). The test prints those lines from CalculateFretDistanceMm (PhysicalFretboardCalculatorTests.cs#L36-L54), in a file GA’s test project removes from compilation (GA.Business.Core.Tests.csproj#L47), as MUS-009 noted (mus-009-tuning-fretboard-geometry.md#L109). The program computes the three spans (Lesson17.cs#L200-L210):

== The 5-fret spans quoted in GA's PHYSICAL_PLAYABILITY_IMPROVEMENTS.md, against PhysicalFretboardCalculator.CalculateFretDistanceMm on 648 mm and the course
frets the document GA course check
0-5 120.11 162.55 162.55 DIFF
7-12 85.42 108.49 108.49 DIFF
12-17 70.09 81.27 81.27 DIFF
frets 0-5 against 12-17: the document says "50.02mm (71.4% larger)"; GA's distances differ by 81.27 mm, 100.0% larger

None of the document’s figures is what GA’s calculator returns. With the formula, frets 12 to 17 measure exactly half of frets 0 to 5, so the low span is 100.0% larger than the high one, not 71.4%.

Wikipedia describes the basic position of the fretting hand: “each of the four fingers of the fretting hand controlling one of the first four frets (index finger on fret 1, little finger on fret 4, etc.)” (Guitar tunings). Four fingers, four frets: the first position. Because the frets get closer together, the same hand covers more frets higher up. Measured in millimetres, a reach is a fixed length, not a fixed number of frets.

BiomechanicsConstants.ComfortableReachScaleUnits is 0.21, under the comment “Practical finger reach (approx 4-fret span at the nut) in relative scale units. (1 - 2^(-4/12)) approx 0.206” (BiomechanicsConstants.cs#L24-L28): the distance from the nut to fret 4, the room four fingers need for frets 1 to 4. PhysicalCostService compares it with the span of a shape, measured by FretboardGeometry.CalculatePhysicalSpan, which “Considers only fingered notes (fret > 0)” (FretboardGeometry.cs#L34-L57), from the lowest fret held to the highest. The program asks, from each starting fret, for the highest fret still within reach (Lesson17.cs#L214-L226):

== GA's comfortable reach, BiomechanicsConstants.ComfortableReachScaleUnits (GA.Domain.Core), against the 1 − 2^(−4/12) of its comment, and how far it reaches from each fret, measured with FretboardGeometry.CalculatePhysicalSpan as PhysicalCostService measures a shape (GA.Domain.Services, compiled)
ComfortableReachScaleUnits = 0.21; 1 − 2^(−4/12) = 0.2063, the nut to fret 4; on 647.7 mm, 136.0 mm and 133.6 mm
lowest fret highest within reach frets held mm, 647.7
1 5 5 126.1
2 6 5 119.0
3 7 5 112.4
5 10 6 121.7
7 13 7 126.6
9 16 8 128.1
12 21 10 131.3
15 24, the last fret 10 110.4
the first position, index finger on fret 1 and little finger on fret 4: CalculatePhysicalSpan 0.1502, within reach: True
the default PlayerProfile: HandSize Medium, MaxComfortableStretchMm 129.0

The constant is a little more than the distance from the nut to fret 4: 136.0 mm against 133.6 mm. But it measures four fret spaces, and the span between fretted notes counts one fewer: frets 1 to 4 measure 0.1502. So from fret 1 the reach covers frets 1 to 5, one fret more than the four fingers of the first position, and from fret 12 it covers ten frets, 12 to 21. From fret 15 it runs past the 24th fret, the last of the neck, where that row stops; elsewhere it measures between 112.4 and 131.3 mm. The default PlayerProfile carries a HandSize, Medium, and a MaxComfortableStretchMm of 129.0 mm, “approx 130mm” in its comment (PlayerProfile.cs#L14-L17); none of the measures below reads either.

A barre chord is “a type of chord on a guitar or other stringed instrument played by using one finger to press down multiple strings across a single fret of the fingerboard”. “The CAGED system is an acronym for the chords C, A, G, E, and D.” “By replacing the nut with a full bar, a player can use the chord shapes for C, A, G, E, and D anywhere on the fret board to play any major chord in any key.” The shape must leave room for the barre: movable chords can be built “provided that the shape leaves the first finger free to create the barre, and that the chord does not require the fingers to extend beyond a four fret range”. And the order: “CAGED is also a mnemonic for the sequence that a chord appears in as it moves up the neck; for example, C Major can be played as an open C-shape chord at the nut, as an A-shape chord barred at the third fret, as a G-shape barred at the fifth fret, as an E-shape barred at the eighth fret, and as a D-shape barred at the 10th fret” (Bar chord).

The Streeling module GTR-002 · CAGED Geometry gives the five open shapes with the degree of each note (gtr-002-caged-geometry.md#L31-L59). The course checks them, then raises each shape until its root is C (Lesson17.cs#L230-L264):

== GTR-002's five open shapes in standard tuning: the notes from string 6 to string 1, and each one's degree above the root
shape frets notes course GTR-002 check
C x32010 C3 E3 G3 C4 E4 R 3 5 R 3 R 3 5 R 3 ok
A x02220 A2 E3 A3 C♯4 E4 R 5 R 3 5 R 5 R 3 5 ok
G 320003 G2 B2 D3 G3 B3 G4 R 3 5 R 3 R R 3 5 R 3 R ok
E 022100 E2 B2 E3 G♯3 B3 E4 R 5 R 3 5 R R 5 R 3 5 R ok
D xx0232 D3 A3 D4 F♯4 R 5 R 3 R 5 R 3 ok
== C major in the five shapes: each open shape raised by the semitones from its root up to C, a barre in place of the nut
shape barre frets notes C E G only frets held strings playing C
C 0 x32010 C3 E3 G3 C4 E4 yes 3 5 2
A 3 x35553 C3 G3 C4 E4 G4 yes 3 5 3
G 5 875558 C3 E3 G3 C4 E4 C5 yes 4 6 3 1
E 8 8-10-10-9-8-8 C3 G3 C4 E4 G4 C5 yes 3 6 4 1
D 10 x-x-10-12-13-12 C4 G4 C5 E5 yes 4 4 2
barre frets Wikipedia course check
C 0 3 5 8 10 0 3 5 8 10 ok
C on string 2: C shape, fret 1; D shape, fret 13; string 2 in the other shapes: A shape, E4; G shape, E4; E shape, G4
× C3 E3 ○ G3 C4 ○ E4 C shape 3 × C3 G3 C4 E4 G4 A shape 5 C3 E3 G3 C4 E4 C5 G shape 8 C3 G3 C4 E4 G4 C5 E shape 10 × × C4 G4 C5 E5 D shape

GTR-002’s degrees are right for all five shapes. Raised to C, they sit at frets 0, 3, 5, 8 and 10, Wikipedia’s frets, each one playing only C, E and G within three or four frets. GTR-002’s third exercise reads: “On string 2 alone, play the note C in each of the five CAGED positions. Notice how each shape places C on a different fret of that string” (#L138-L139). Only two shapes have C on string 2: the C shape at fret 1 and the D shape at fret 13. The A and G shapes play E there, the E shape G.

In other keys the shapes keep their order and start from another letter (Lesson17.cs#L266-L280):

== The five shapes in order up the neck, in each major key: the barre fret of each shape, from the lowest
C C A G E D at 0 3 5 8 10
D♭ C A G E D at 1 4 6 9 11
D D C A G E at 0 2 5 7 10
E♭ D C A G E at 1 3 6 8 11
E E D C A G at 0 2 4 7 9
F E D C A G at 1 3 5 8 10
F♯ E D C A G at 2 4 6 9 11
G G E D C A at 0 3 5 7 10
A♭ G E D C A at 1 4 6 8 11
A A G E D C at 0 2 5 7 9
B♭ A G E D C at 1 3 6 8 10
B A G E D C at 2 4 7 9 11
every order is C A G E D read round from one of its letters: True
key Wikipedia course check
G G E D C A at 0 3 5 7 10 G E D C A at 0 3 5 7 10 ok

In every key the order is C A G E D read round from one of its letters, and in G it is Wikipedia’s: “G Major can be played as an open G-shaped chord and the next shape … E-shape (barred at the third fret), followed by the D-shape (barred at the 5th fret); … C-shape barred at the 7th fret, an A-shape at the 10th fret”. GTR-002 draws the sequence “for key of E major” (#L94-L98):

Fret: 0 3 5 7 8 10 12
|--E--|--D--|--C--|--A--|--G--|--E--|
(shapes shown for key of E major)

The letters are in the program’s order, but in E the program puts the shapes at frets 0, 2, 4, 7 and 9, and 2, 4 and 9 are not on the figure’s scale.

In GA: one shape out of five, read backwards

Section titled “In GA: one shape out of five, read backwards”

VoicingPhysicalAnalyzer.CalculatePlayability fills a CagedShape (VoicingPhysicalAnalyzer.cs#L114-L115) from DetectCagedShape. Its comments read the first position as string 6: “For E-shape, base is the fret on string 6 (Index 0).” (#L263). ExtractPhysicalLayout numbers it string 1 (#L27), the order of GA’s voicings, whose generator starts from string 1 (VoicingGenerator.cs#L167). And if (baseFret < 0) return null; // Root must be on string 6 (#L264-L265) returns before the A-shape and C-shape tests, which both need that first position muted (#L297, #L323). The program asks in both orders (Lesson17.cs#L282-L302):

== VoicingPhysicalAnalyzer.CalculatePlayability (GA.Domain.Services, compiled): the CagedShape of each shape, with its positions in GA's string order (string 1 first, as ExtractPhysicalLayout numbers them) and reversed (string 6 first, as the comments of DetectCagedShape read them)
frets course GA's order reversed
x32010 C shape, C (none) (none)
x02220 A shape, A (none) (none)
320003 G shape, G (none) (none)
022100 E shape, E (none) E-Shape
xx0232 D shape, D (none) (none)
x35553 A shape, C (none) (none)
875558 G shape, C (none) (none)
8-10-10-9-8-8 E shape, C (none) E-Shape
x-x-10-12-13-12 D shape, C (none) (none)
133211 E shape, F (none) E-Shape
x13331 A shape, B♭ (none) (none)
001220 (none) E-Shape (none)
the C shape barred at frets 0 to 12: "E-Shape" 0 times in GA's order, 0 reversed; any other answer: 0
the A shape barred at frets 0 to 12: "E-Shape" 0 times in GA's order, 0 reversed; any other answer: 0
the G shape barred at frets 0 to 12: "E-Shape" 0 times in GA's order, 0 reversed; any other answer: 0
the E shape barred at frets 0 to 12: "E-Shape" 0 times in GA's order, 13 reversed; any other answer: 0
the D shape barred at frets 0 to 12: "E-Shape" 0 times in GA's order, 0 reversed; any other answer: 0
001220, string 6 to string 1: E2 A2 D♯3 A3 C♯4 E4
the tag GeneratePhysicalTags writes for the reversed E shape: e-shape; with "CAGED-E" or "E shape" in it, the test of VoicingFilterEngine for CagedShape "E": False

In GA’s order, no shape of the course is recognized. The one pattern that is, 001220 written from string 6, is the E shape backwards: E2 A2 D♯3 A3 C♯4 E4. Reversed, the E shape is recognized at every fret from 0 to 12, and nothing else ever is: “A-Shape” and “C-Shape” cannot be returned. The tag GeneratePhysicalTags writes from it, e-shape (#L203), would not pass the test VoicingFilterEngine applies for a CagedShape filter, which looks for “CAGED-E” or “E shape” (VoicingFilterEngine.cs#L61-L66). Read, not run: MusicalEmbeddingGenerator appends “-shape” to the lower-cased CagedShape (MusicalEmbeddingGenerator.cs#L110-L113), which makes e-shape-shape.

What makes a shape hard to play? The course measures what a ruler can check: the frets held, from the lowest to the highest; their span in millimetres on 647.7 mm; and the number of fretted notes. A shape with more than four fretted notes needs a barre, since the hand has four fingers for them. The “four fret range” of the bar chord article is the other limit.

PhysicalCostService.CalculateStaticCost “Calculates the “effort” required to play a specific static shape”, and the class is “Used to rank multiple ways of playing the same notes” (PhysicalCostService.cs#L6-L17). It adds five terms: a stretch beyond the reach above (#L27-L48); “fat fingers” above fret 17 (#L53-L59); a register term, which subtracts 0.5 for each open string and, with the default profile, adds a penalty when the average fret is below 3 or above 9 (#L62-L99); skipped strings (#L102-L119); and a tension of about 0.1 per fretted string, more on the thick strings (#L122-L131). The sum is divided by the square root of the number of strings played (#L136-L138). The program runs it on six open chords, F, the four raised shapes of C and the E shape at frets 5 and 12 (Lesson17.cs#L306-L322):

== The course's measures of each shape, and PhysicalCostService.CalculateStaticCost with the default PlayerProfile (GA.Domain.Services, compiled): its total and the terms that are not zero
frets chord frets held span, mm fretted barre total terms
x32010 C 3 66.7 3 no -0.23 Register -0.82 Tension 0.30
x02210 Am 2 34.3 3 no -0.23 Register -0.80 Tension 0.29
022000 Em 1 0.0 2 no -0.63 Register -1.77 Tension 0.22
022100 E 2 34.3 3 no -0.40 Register -1.28 Tension 0.32
320003 G 2 32.4 3 no -0.42 Register -1.33 Tension 0.32
xx0232 D 2 32.4 3 no -0.06 Register -0.38 Tension 0.26
133211 F 3 66.7 6 yes 0.29 Register 0.12 Tension 0.60
x35553 C 3 59.4 5 yes 0.21 Tension 0.48
875558 C 4 77.2 6 yes 0.24 Tension 0.60
8-10-10-9-8-8 C 3 44.5 6 yes 0.24 Tension 0.60
x-x-10-12-13-12 C 4 57.8 4 no 0.59 Register 0.83 Tension 0.36
577655 A 3 52.9 6 yes 0.24 Tension 0.60
12-14-14-13-12-12 E 3 35.3 6 yes 0.66 Register 1.01 Tension 0.60

Open chords cost less than nothing, because each open string subtracts 0.5: the cheapest is Em, with four. F, six fretted notes under a barre, costs 0.29, about what the A, G and E shapes of C cost, 0.21, 0.24 and 0.24. No term counts a barre, and no shape here is wide enough for the stretch term. The two highest costs, the D shape of C, 0.59, and the E shape at fret 12, 0.66, come from the register term, which grows above fret 9.

GA has two other measures. VoicingPhysicalAnalyzer.CalculatePlayability divides the span of the fretted notes, in millimetres on 648 mm, by 80 (VoicingPhysicalAnalyzer.cs#L88-L93); “Beginner” needs at most 0.8, no barre and an open string (#L105-L112), and its barre is the same fret on three adjacent strings (#L219-L233). BiomechanicalAnalyzer.AnalyzeChordPlayability averages five scores (BiomechanicalAnalyzer.cs#L17-L77); it measures the span from the lowest played fret, open strings included (#L94-L128), and finds a barre wherever three notes share a fret (#L153). The program runs both (Lesson17.cs#L324-L337):

== The same shapes through VoicingPhysicalAnalyzer.CalculatePlayability (Difficulty, DifficultyScore, BarreRequired) and BiomechanicalAnalyzer.AnalyzeChordPlayability (OverallScore, Difficulty, HasBarreChord) (GA.Domain.Services, compiled)
frets chord Difficulty Score Barre Overall Difficulty Barre
x32010 C Intermediate 3.50 no 0.82 Easy no
x02210 Am Beginner 2.29 no 0.89 Easy no
022000 Em Beginner 1.00 no 0.92 Very Easy yes
022100 E Beginner 2.29 no 0.92 Very Easy yes
320003 G Beginner 2.22 no 0.85 Easy yes
xx0232 D Beginner 2.22 no 0.78 Easy no
133211 F Intermediate 4.50 no 0.92 Very Easy yes
x35553 C Intermediate 6.23 yes 0.89 Easy yes
875558 C Intermediate 6.90 yes 0.83 Easy yes
8-10-10-9-8-8 C Intermediate 3.67 no 0.90 Very Easy yes
x-x-10-12-13-12 C Intermediate 4.17 no 0.72 Easy no
577655 A Intermediate 3.99 no 0.90 Very Easy yes
12-14-14-13-12-12 E Intermediate 3.33 no 0.77 Easy yes
BiomechanicalAnalyzer gives the same analysis to every shape for each HandSize (Small, Medium, Large, ExtraLarge): True
PhysicalCostService gives the same total to every shape with a PlayerProfile of each HandSize and a MaxComfortableStretchMm of 80: True

VoicingPhysicalAnalyzer calls open C “Intermediate”: frets 1 to 3 span 66.7 mm, more than 0.8 × 80 = 64 mm. It finds a barre in x35553 and 875558, which hold fret 5 on three adjacent strings, and not in F or the E shapes: in 133211, fret 1 is on strings 6, 2 and 1, never three neighbours. The Guitar Alchemist Lab’s P7: Playability model found both at GA’s commit 66bdd04. BiomechanicalAnalyzer finds one in Em, E and G, on their open strings, and rates F 0.92, “Very Easy”, above open C, 0.82: open C spans frets 0 to 3 once its open strings count, F only frets 1 to 3, and F’s six notes get the full score for stability (#L279-L284). The analyzer takes a HandSize and keeps it in a field nothing reads (#L10-L12); PhysicalCostService reads neither the HandSize nor the MaxComfortableStretchMm of its profile. Read, not run: GA’s tests that compare hand sizes call a BiomechanicalAnalyzer.CreateForHandSize that the class does not have (BiomechanicalAnalyzerTests.cs#L224-L244), and the test project removes the file from compilation (GA.Business.Core.Tests.csproj#L49).

What a profile does change is the cost. PlayerProfile.Beginner() doubles the stretch weight, doubles the skip weight and prefers frets up to 5; Jazz() prefers frets 5 to 12 and skips strings cheaply (PlayerProfile.cs#L20-L52). On the five shapes of C (Lesson17.cs#L339-L347):

== PhysicalCostService.CalculateStaticCost under GA's three PlayerProfiles (GA.Business.Core, compiled), on the five shapes of C
frets shape Default Beginner Jazz
x32010 C -0.23 -0.23 -0.14
x35553 A 0.21 0.21 0.25
875558 G 0.24 0.51 0.24
8-10-10-9-8-8 E 0.24 0.66 0.24
x-x-10-12-13-12 D 0.59 1.04 0.18

The beginner profile makes the G, E and D shapes dearer, through the register term; the jazz profile makes open C dearer and the D shape at fret 10, 0.18, cheaper than the A, G and E shapes.

“An open tuning allows the guitarist to play a chord by strumming the open strings (no strings fretted).” Wikipedia’s table gives open C as “C–G–C–G–C–E”, open D as “D–A–D–F♯–A–D”, open E as “E–B–E–G♯–B–E” and open G as “D–G–D–G–B-D”. The same article explains why standard tuning needs several shapes for one chord: “The irregular major third breaks the fingering patterns of scales and chords, so that guitarists have to memorize multiple chord shapes for each chord.” It also says which way to retune: “tuning down the open string from E to D or C reduces the risk of breaking strings, which is associated with tuning strings up to a higher pitch” (Guitar tunings). GTR-002 adds: “CAGED is specific to standard tuning. Change the tuning, and the shapes change” (#L120). MUS-009 found two octave errors in GA’s Instruments.yaml: string 2 of open C and open A an octave too low (mus-009-tuning-fretboard-geometry.md#L111-L114).

The course’s outline named Tunings.toml for this lesson. GA.Business.Config copies it next to every program that references it (GA.Business.Config.fsproj#L63-L65), and no C# or F# code of GA reads it. The only mention in code is a comment of the React component HarmonicNavigator3D, Optional: <HarmonicNavigator3D dataUrls={{ modes: "/Modes.yaml", tunings: "/Tunings.toml" }} /> (HarmonicNavigator3D.tsx#L17), and the component renames both properties to names it never uses, tunings: _tunings and dataUrls: _dataUrls (#L128-L131). The program reads the file as text (Lesson17.cs#L351-L372):

== The guitar entries of Tunings.toml, read as text (GA.Business.Config copies it next to the program), against Instruments.yaml, read with the course's parser (GA's loader looks for an Instruments: key the file does not have); each six-string tuning as a change from standard, in semitones, and the notes of its open strings
entry Tuning Instruments.yaml string 6 to 1 largest open strings
Standard E2 A2 D3 G3 B3 E4 the same 0 0 0 0 0 0 0 D E G A B
DADGAD D2 A2 D3 G3 A3 D4 the same -2 0 0 0 -2 -2 2 D G A
Double Drop D D2 A2 D3 G3 B3 D4 the same -2 0 0 0 0 -2 2 D G A B
DropD D2 A2 D3 G3 B3 E4 the same -2 0 0 0 0 0 2 D E G A B
OpenCMajor C2 G2 C3 G3 C3 E4 the same -4 -2 -2 0 -11 0 11 C major
OpenDMajor D2 A2 D3 F#3 A3 D4 the same -2 0 0 -1 -2 -2 2 D major
OpenEMajorV1 E2 B2 E3 G#3 B3 E4 the same 0 2 2 1 0 0 2 E major
OpenEMajorV2 E2 B2 E3 G3 B3 E4 the same 0 2 2 0 0 0 2 E minor
OpenGMajorV1 D2 G2 D3 G3 B3 D4 the same -2 -2 0 0 0 -2 2 G major
OpenGMinorV2 D2 G2 D3 G3 Bb3 D4 the same -2 -2 0 0 -1 -2 2 G minor
OpenAMajor E2 A2 E3 A3 C#3 E4 the same 0 0 2 2 -10 0 10 A major
Renaissance G3 G4 C4 C4 E4 E4 A4 the same
Baroque1 A3 A3 D4 D4 G3 G3 B3 B3 E4 E4 the same
Baroque2 A3 A3 D4 D3 G3 G3 B3 B3 E4 E4 the same
TwelveStrings E2 E3 A2 A3 D3 D4 G3 G4 B3 B3 E4 E4 the same
entry Wikipedia Tunings.toml check
OpenCMajor C G C G C E C G C G C E ok
OpenDMajor D A D F♯ A D D A D F♯ A D ok
OpenEMajorV1 E B E G♯ B E E B E G♯ B E ok
OpenGMajorV1 D G D G B D D G D G B D ok

The 15 guitar entries are those of Instruments.yaml, octave errors included: OpenCMajor’s C3 lowers string 2 by 11 semitones and OpenAMajor’s C#3 by 10 (Tunings.toml#L364-L366, #L388-L390), while the nine other six-string tunings move no string by more than 2. Each open tuning sounds the chord its full name gives: OpenEMajorV2, despite its entry name, is E minor, as its full name, “Open E - 2 Minor”, says (#L376-L378). Wikipedia’s four string orders match, because they compare letters: the octave error does not show in note names.

GA’s MCP server has a tool for guitarists who struggle with barre chords: “Find easier, beginner-friendly alternative voicings for a chord — ideal when barre chords are painful or difficult. … Example: F with no-barre → Fmaj7 (103210), Fsus2 (133011), or C/F alternatives at a simpler fret span.” (GuitaristProblemTools.cs#L574-L577). It answers from a table of 41 voicings, “frets per string E-A-D-G-B-e” (#L503-L562). The program reads the table as text and plays each shape in standard tuning (Lesson17.cs#L376-L393):

== The 41 voicings of ga_easier_voicings (GaMcpServer/Tools/GuitaristProblemTools.cs, read as text): each shape read in standard tuning, against its Notes; HasBarre and Difficulty as written
symbol frets notes, string 6 to 1 Notes not in Notes not played fretted HasBarre Difficulty
C x32010 C E G C E C, E, G - - 3 False 1
D xx0232 D A D F♯ D, F♯, A - - 3 False 1
E 022100 E B E G♯ B E E, G♯, B - - 3 False 1
G 320003 G B D G B G G, B, D - - 3 False 1
A x02220 A E A C♯ E A, C♯, E - - 3 False 1
F 133211 F C F A C F F, A, C - - 6 True 3
Bb x13331 B♭ F B♭ D F B♭, D, F - - 5 True 3
B x24442 B F♯ B D♯ F♯ B, D♯, F♯ - - 5 True 3
Am x02210 A E A C E A, C, E - - 3 False 1
Em 022000 E B E G B E E, G, B - - 2 False 1
Dm xx0231 D A D F D, F, A - - 3 False 1
Bm x24432 B F♯ B D F♯ B, D, F♯ - - 5 True 3
E7 020100 E B D G♯ B E E, G♯, B, D - - 2 False 1
A7 x02020 A E G C♯ E A, C♯, E, G - - 2 False 1
D7 xx0212 D A C F♯ D, F♯, A, C - - 3 False 1
G7 320001 G B D G B F G, B, D, F - - 3 False 2
C7 x32310 C E B♭ C E C, E, G, B♭ - G 4 False 2
B7 x21202 B D♯ A B F♯ B, D♯, F♯, A - - 4 False 2
Cmaj7 x32000 C E G B E C, E, G, B - - 2 False 1
Gmaj7 320002 G B D G B F♯ G, B, D, F♯ - - 3 False 1
Amaj7 x02120 A E G♯ C♯ E A, C♯, E, G♯ - - 3 False 1
Dmaj7 xx0222 D A C♯ F♯ D, F♯, A, C♯ - - 3 False 1
Emaj7 021100 E B D♯ G♯ B E E, G♯, B, D♯ - - 3 False 2
Fmaj7 103210 F A F A C E F, A, C, E - - 4 False 2
Am7 x02010 A E G C E A, C, E, G - - 2 False 1
Em7 020000 E B D G B E E, G, B, D - - 1 False 1
Dm7 xx0211 D A C F D, F, A, C - - 3 False 1
Dsus2 xx0230 D A D E D, E, A - - 2 False 1
Asus2 x02200 A E A B E A, B, E - - 2 False 1
Esus2 024400 E B F♯ B B E E, F♯, B - - 3 False 2
Dsus4 xx0233 D A D G D, G, A - - 3 False 1
Asus4 x02230 A E A D E A, D, E - - 3 False 1
Esus4 022200 E B E A B E E, A, B - - 3 False 1
Gsus4 310013 G B♭ D G C G G, C, D B♭ - 4 False 2
C5 x3500x C G G B C, G B - 2 False 1
D5 xx023x D A D D, A - - 2 False 1
E5 022xxx E B E E, B - - 2 False 1
G5 3500xx G D D G G, D - - 2 False 1
A5 x022xx A E A A, E - - 2 False 1
B5 x244xx B F♯ B B, F♯ - - 3 False 2
F5 133xxx F C F F, C - - 3 True 2
Notes are the notes of the symbol: 41 of 41; a note outside the Notes: Gsus4, C5; a note of the Notes not played: C7
HasBarre: F, Bb, B, Bm, F5; more than four fretted notes: F, Bb, B, Bm

Every Notes field lists the notes of its symbol, but two shapes play a note outside it. Gsus4, 310013, plays B♭ at the first fret of string 5 (#L552); C5, x3500x, plays the open B string (#L555). C7, x32310, leaves out its fifth, as that grip usually does (#L529). Five voicings are marked HasBarre; four of them have more than four fretted notes, and F5, 133xxx, has three.

Under its default constraint, “no-barre”, the tool keeps the voicings of the table on the same root, minus the chord asked for and those marked HasBarre (#L611-L646), and sorts them, easiest first (#L649-L652); the substitutions it asks GA for go into the answer only as text (#L670-L678). The program applies that filter to each voicing marked HasBarre (Lesson17.cs#L395-L406):

== What ga_easier_voicings offers for each voicing marked HasBarre, under its default constraint "no-barre": the table's other voicings on the same root without HasBarre, easiest first (the course's reading of lines 611 to 652)
F [133211]: Fmaj7 [103210], all of F's notes
Bb [x13331]: nothing
B [x24442]: B7 [x21202], all of B's notes; B5 [x244xx], not all of B's notes
Bm [x24432]: B7 [x21202], not all of Bm's notes; B5 [x244xx], not all of Bm's notes
F5 [133xxx]: Fmaj7 [103210], all of F5's notes
the description's example, "F with no-barre → Fmaj7 (103210), Fsus2 (133011), or C/F": Fsus2 in the table False, C/F False; 133011 plays F2 C3 F3 G3 C4 F4, 5 fretted notes

For F the tool offers Fmaj7, which holds all of F’s notes and an E. For Bm it offers B7, a dominant seventh whose third is D♯, and B5, which has no third: neither plays the D of B minor. For B♭ it offers nothing, since the table has no other voicing on B♭, nor on A♯. The description’s Fsus2 and C/F are not in the table, and 133011 has five fretted notes.

  1. GA’s reach constant admits frets 1 to 5 from fret 1. How many frets does it admit from fret 12, and why more?
  2. In C major, which note does the A shape, x35553, play on string 2, and on which strings does it play C?
  3. Why can DetectCagedShape never answer “A-Shape” or “C-Shape”?
  4. Why does BiomechanicalAnalyzer rate F, 133211, easier than open C, x32010?
  5. What does ga_easier_voicings offer for Bm under “no-barre”, and why does neither voicing play B minor?
Solutions
  1. Ten, frets 12 to 21. The constant is a fraction of the whole string, and above fret 12 the frets are half as far apart as the frets at the nut.
  2. E, at the fifth fret of string 2. It plays C on strings 5 and 3.
  3. Line 265 returns null when the first position is muted, and both tests need it muted (lines 297 and 323). Only the E-shape test, which needs that position played, can succeed.
  4. It measures the span from the lowest played fret, open strings included: open C spans frets 0 to 3, F frets 1 to 3. F’s six notes also get a full stability score. The result: 0.92 for F, 0.82 for C.
  5. B7, x21202, which plays B D♯ A B F♯, a dominant seventh whose third is D♯; and B5, x244xx, B F♯ B, with no third. B minor needs D.
  • Fret n lies at L(1 − 2^(−n/12)) from the nut. GA’s two calculators agree with the formula at every fret, on 647.7 and 648 mm; the document next to them quotes 5-fret spans that neither gives. Five frets from fret 12 measure exactly half of five frets from the nut.
  • GA’s comfortable reach is the distance from the nut to fret 4, but it is compared with the span between fretted notes, so it admits five frets from fret 1 and ten from fret 12. No measure reads the player’s hand size.
  • The five CAGED shapes of C sit at frets 0, 3, 5, 8 and 10, and in every key their order is C A G E D read from one of its letters. GA’s shape detector can only answer “E-Shape”, and it recognizes the E shape only when the shape is written from string 6, the reverse of GA’s own order; in GA’s order it names 001220 instead.
  • Of GA’s three playability measures, the cost has no barre term, one analyzer calls open C “Intermediate”, and the other rates F “Very Easy”.
  • Tunings.toml repeats Instruments.yaml, octave errors included, and nothing reads it. ga_easier_voicings answers from a table of 41 shapes, two of which play a note outside their chord, and offers B7 or B5 for Bm.
  • Wikipedia: Fret (the twelfth root of two, the twelfth fret), Bar chord (barre chords, the CAGED system and its order), Guitar tunings (the first position, open tunings, the irregular major third).
  • Streeling: GTR-002 · CAGED Geometry, MUS-009 · Tuning and Fretboard Geometry, and for the physics of the string, PHY-001 · The Science of Guitar Sound.
  • GuitarAlchemist/ga at a826864: Common/GA.Domain.Services/Fretboard/Analysis/FretboardGeometry.cs, PhysicalFretboardCalculator.cs, PhysicalCostService.cs, PHYSICAL_PLAYABILITY_IMPROVEMENTS.md, Fretboard/Voicings/Analysis/VoicingPhysicalAnalyzer.cs, Fretboard/Voicings/Generation/VoicingGenerator.cs, Fretboard/Biomechanics/BiomechanicalAnalyzer.cs, Common/GA.Domain.Core/Instruments/Biomechanics/BiomechanicsConstants.cs, Common/GA.Business.Core/Context/PlayerProfile.cs, Common/GA.Business.ML/Search/VoicingFilterEngine.cs, Embeddings/MusicalEmbeddingGenerator.cs, Common/GA.Business.Config/Tunings.toml, GA.Business.Config.fsproj, ReactComponents/ga-react-components/src/components/BSP/HarmonicNavigator3D.tsx, GaMcpServer/Tools/GuitaristProblemTools.cs, Tests/Common/GA.Business.Core.Tests/GA.Business.Core.Tests.csproj, Fretboard/PhysicalFretboardCalculatorTests.cs, Fretboard/Biomechanics/BiomechanicalAnalyzerTests.cs.