%pylab inline
from __future__ import print_function
Populating the interactive namespace from numpy and matplotlib
data = []
with open('../shared/unrate.txt', 'r') as f:
for line in f:
data.append(float(line))
plot(data);
len(data)
819
sr = 44100
dur = 4
mapping_src = [ 2, 11 ]
mapping_src_range = mapping_src[1] - mapping_src[0]
mapping_dst = [ 50, 5000 ]
mapping_dst_range = mapping_dst[1] - mapping_dst[0]
num_frames = sr * dur
freq_normalized = (array(data) - mapping_src[0])/mapping_src_range
freq = (freq_normalized * mapping_dst_range) + mapping_dst[0]
plot(freq)
[<matplotlib.lines.Line2D at 0x7fdfae1839d0>]
phs_mod = array(())
n = 10
for f in freq[:10]:
phs_mod = r_[phs_mod, ones(n) * f]
# print(phs)
# print("----")
plot(phs_mod)
[<matplotlib.lines.Line2D at 0x7fdfadc27e90>]
phs_mod = array(())
n = num_frames/len(data)
for f in freq:
phs_mod = r_[phs_mod, ones(n) * f]
# print(phs)
# print("----")
plot(phs_mod)
[<matplotlib.lines.Line2D at 0x7fdfadcdfd90>]
num_frames/float(len(data))
215.3846153846154
n
215
len(phs_mod)
176085
num_frames
176400
phs = linspace(0, 2 * pi * 440 * (len(phs_mod) * sr), len(phs_mod), endpoint=False)
phs *= (phs_mod - mapping_dst[0])/mapping_dst_range
output = sin(phs)* 0.1
from IPython.display import Audio
Audio(output, rate = sr)
Not quite right...
plot(phs)
[<matplotlib.lines.Line2D at 0x7fdfadbce650>]
len(phs_mod) / float(sr)
3.992857142857143
Thanks Kee!
n = num_frames/len(data)
%%timeit
phs_mod = array(())
for f in freq:
phs_mod = r_[phs_mod, ones(n) * f]
10 loops, best of 3: 67.1 ms per loop
%%timeit
phs0 = []
for f in freq:
temp = []
for i in range(n):
temp.append(f)
phs0 += temp
100 loops, best of 3: 11 ms per loop
%%timeit
phs1 = []
for f in freq:
temp = [f] * n
phs1 += temp
100 loops, best of 3: 2.1 ms per loop
%%timeit
phs2 = [0] * n * len(freq)
for i, f in enumerate(freq):
offset = i * n
for j in range(n):
phs2[offset + j] = f
100 loops, best of 3: 9.83 ms per loop
%%timeit
phs3 = [0] * (n * len(freq))
for i in range(len(phs3)):
phs3[i] = freq[i//n]
10 loops, best of 3: 30.3 ms per loop
%%timeit
phs4 = [freq[i // n] for i in range(n * len(freq))]
10 loops, best of 3: 29.6 ms per loop
%%timeit
phs_mod = zeros(len(freq) * n)
index = 0
for f in freq:
phs_mod[index:index + n] = f
index += n
1000 loops, best of 3: 859 µs per loop
phs_mod1 = array(())
for f in freq:
phs_mod1 = r_[phs_mod1, ones(n) * f]
phs_mod2 = zeros(len(freq) * n)
index = 0
for f in freq:
phs_mod2[index:index + n] = f
index += n
allclose(phs_mod1,phs_mod2)
True
plot(phs_mod1[:1000])
[<matplotlib.lines.Line2D at 0x7fdfadaf3c10>]
phs = linspace(0, 2 * pi * mean(mapping_dst) * (len(phs_mod) / float(sr)), len(phs_mod), endpoint=False)
phs += phs_mod
output = sin(phs)* 0.1
from IPython.display import Audio
Audio(output, rate = sr)
phs_accum = cumsum(phs_mod)
plot(phs_accum)
[<matplotlib.lines.Line2D at 0x7f41b58bb390>]
output = sin(2 * pi * (phs_accum) / float(sr))* 0.1
from IPython.display import Audio
Audio(output, rate = sr)
2 * pi * mean(mapping_dst) * len(phs_mod) / float(sr)
63269.503286474523
max(2 * pi * (phs_accum) / float(sr))
53934.153859439466
Frequency into phase. Simple fi constant frequency:
f = 100
sr = 44100
dur = 10
num_samples = sr * dur
phs = linspace(0, 2 * pi * f * dur , num_samples, endpoint=True)
phs[-1]
6283.1853071795867
phs_inc2 = ones(num_samples) * 2 * pi * f/float(sr)
phs2 = cumsum(phs_inc2)
phs2[-1]
6283.1853071126798
phs[-1] - phs2[-1]
6.6906977735925466e-08
phs2[-1]/(2 * pi * f)
9.9999999998935145
phs[-1]/(2 * pi * f)
10.0
phs_inc_mod = 2 * pi * phs_mod/float(sr)
phs_inc_mod_accum = cumsum(phs_inc_mod)
output = 0.1 * sin(phs_inc_mod_accum)
Audio(output, rate = sr)
plot(data);
[<matplotlib.lines.Line2D at 0x7fdfada81e50>]
from scipy.interpolate import interp1d
interp_phs = interp1d(range(len(freq)),freq)
interp_phs
<scipy.interpolate.interpolate.interp1d at 0x7fdfae0e1e10>
interp_phs(0.2)
array(864.0)
plot(interp_phs(linspace(0, 4, 50)), 'o')
[<matplotlib.lines.Line2D at 0x7fdfadf4d8d0>]
interp_phs_mod = interp_phs(linspace(0, len(freq) - 1, num_frames, endpoint=False))
plot(interp_phs_mod[:1000])
[<matplotlib.lines.Line2D at 0x7fdfac118ad0>]
phs_inc_mod = 2 * pi * interp_phs_mod/float(sr)
phs_inc_mod_accum = cumsum(phs_inc_mod)
output = 0.1 *sin(phs_inc_mod_accum)
Audio(output, rate = sr)
interp_phs = interp1d(range(len(freq)),freq, kind='cubic')
interp_phs_mod = interp_phs(linspace(0, len(freq) - 1, num_frames, endpoint=False))
plot(interp_phs_mod[:1000])
[<matplotlib.lines.Line2D at 0x7fdfac067e50>]
phs_inc_mod = 2 * pi * interp_phs_mod/float(sr)
phs_inc_mod_accum = cumsum(phs_inc_mod)
output = 0.1 *sin(phs_inc_mod_accum)
Audio(output, rate = sr)
By: Andrés Cabrera mantaraya36@gmail.com
For Course MAT 240F at UCSB
This ipython notebook is licensed under the CC-BY-NC-SA license: http://creativecommons.org/licenses/by-nc-sa/4.0/