%pylab inline
Populating the interactive namespace from numpy and matplotlib
def saut_quinte(n, freq_ref):
return freq_ref * (3./2) ** n
saut_quinte(-1, 660)
440.0
ints = arange(-6, 6)
ints
array([-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5])
freqs_iter = map(lambda s: saut_quinte(s, 440), ints)
freqs_iter
[38.628257887517144, 57.942386831275726, 86.913580246913568, 130.37037037037035, 195.55555555555554, 293.33333333333331, 440.0, 660.0, 990.0, 1485.0, 2227.5, 3341.25]
def back_to_ref(freq, freq_ref):
if freq < freq_ref:
while freq < freq_ref:
freq = freq * 2.
return freq
elif freq > 2 * freq_ref:
while freq > 2 * freq_ref:
freq = freq / 2.
return freq
else:
return freq
back_to_ref(57, 440)
456.0
c_scale = map(lambda s: back_to_ref(s, 440), freqs_iter)
c_scale
[618.0521262002743, 463.53909465020581, 695.30864197530855, 521.48148148148141, 782.22222222222217, 586.66666666666663, 440.0, 660.0, 495.0, 742.5, 556.875, 835.3125]
len(c_scale)
12
def get_scale(n):
total_scale = c_scale + c_scale + c_scale
return total_scale[12 + n - 1: 12 + n + 6]
get_scale(6)
[586.66666666666663, 440.0, 660.0, 495.0, 742.5, 556.875, 835.3125]
get_scale(7)
[440.0, 660.0, 495.0, 742.5, 556.875, 835.3125, 618.0521262002743]
map(lambda s: back_to_ref(s, 660), get_scale(7))
[880.0, 660.0, 990.0, 742.5, 1113.75, 835.3125, 1236.1042524005486]
def calc_ratio(seq):
seq = map(lambda s: back_to_ref(s, seq[1]), seq)
ratios = map(lambda s: s/seq[1], seq)
ratios.sort()
return ratios
calc_ratio(get_scale(6))
[1.0, 1.125, 1.265625, 1.3333333333333333, 1.5, 1.6875, 1.8984375]
calc_ratio(get_scale(7))
[1.0, 1.125, 1.265625, 1.3333333333333333, 1.5, 1.6875, 1.8728852309099222]
calc_ratio(get_scale(2))
[1.0, 1.125, 1.2656250000000002, 1.3333333333333337, 1.5, 1.6875000000000002, 1.8984375000000002]
def ratio_diff(n):
ref = calc_ratio(get_scale(6))
diff = array(calc_ratio(get_scale(n))) - array(ref)
return diff
ratio_diff(0)
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.81910197e-02, 2.22044605e-16, 0.00000000e+00, 0.00000000e+00])
ratio_diff(7)
array([ 0. , 0. , 0. , 0. , 0. , 0. , -0.02555227])
figure(figsize=(10, 10))
for i in range(12):
plot(ratio_diff(i),label='%i' % i)
legend()
<matplotlib.legend.Legend at 0xac0088c>
i = 7
plot(range(i, i + 7), ratio_diff(i))
i = 8
plot(range(i, i + 7), ratio_diff(i))
[<matplotlib.lines.Line2D at 0xac5f7ac>]
mat = zeros((12, 12+7))
for i in range(12):
mat[i, i:i+7] = ratio_diff(i)
matshow(mat)
colorbar()
<matplotlib.colorbar.Colorbar instance at 0xb147e2c>
ratio_diff(10)
array([ 0. , -0.01514209, -0.01703485, 0. , 0. , -0.02271313, -0.02555227])