fret positioning

From Noah.org
Revision as of 18:06, 19 April 2015 by Root (talk | contribs)
Jump to navigationJump to search


To calculate distance from FretA to FretB divide the Scale Length Remaining (FretA to bridge) by 17.817. Three digits of precision is impossible. In fact in the old days they just used 18 instead of 17.817. You might also see 17.835 in old references. This value was used to add in a fudge factor to accommodate the musical tastes of the time (sort of how the standard for the pitch of A above middle C wasn't always 440 Hz (Concert Pitch)).

fret #       factor
 1           0.056126
 2           0.109101
 3           0.159104
 4           0.206291
 5           0.250847
 6           0.292893
 7           0.33258
 8           0.370039
 9           0.405396
10           0.438769
11           0.470268
12           0.5
13           0.528063
14           0.554551
15           0.579552
16           0.60315
17           0.625423
18           0.646447
19           0.66629
20           0.68502
21           0.702698
22           0.719385
23           0.735134
24           0.75

d = s – (s / 2(n / 12))

d
distance from nut to fret number, n
s
scale or string length
n
fret number

Here is a little Python script that will output fret positions given a string length.

#!/usr/bin/env python
# This will print the distance from the nut to each fret
# over a two octave range given an open string length.

import sys
# Set string length here. Units don't matter. Output is in the same units.
string_length = 35.0

fret_length_factors = [ 0.056126, 0.109101, 0.159104, 0.206291, 0.250847,
        0.292893, 0.33258, 0.370039, 0.405396, 0.438769, 0.470268, 0.5,
        0.528063, 0.554551, 0.579552, 0.60315, 0.625423, 0.646447, 0.66629,
        0.68502, 0.702698, 0.719385, 0.735134, 0.75 ]
fret_number = 1
for length_factor in fret_length_factors:
    sys.stdout.write('%3d    %5.2f'%(fret_number, (length_factor * string_length)))
    sys.stdout.write('\n')
    fret_number += 1

sys.stdout.write('\n')

# This should give the same results.
# This calculates the same information in a different way.
for fret_number in range(1,25):
    fret_distance = string_length - (string_length / (2 ** (fret_number/12.0)))
    sys.stdout.write('%3d    %5.2f'%(fret_number, fret_distance))
    sys.stdout.write('\n')

Gives the following table:

  1     1.96
  2     3.82
  3     5.57
  4     7.22
  5     8.78
  6    10.25
  7    11.64
  8    12.95
  9    14.19
 10    15.36
 11    16.46
 12    17.50
 13    18.48
 14    19.41
 15    20.28
 16    21.11
 17    21.89
 18    22.63
 19    23.32
 20    23.98
 21    24.59
 22    25.18
 23    25.73
 24    26.25