前面记录了语音变速不变调,之后我又把变调不变速实现了一下
这里先说一下大概流程,类似于变速不变调,首先函数传入三个值,分别为调节系数、语音的pcm数据、基因周期标记点
首先说升高频率: 降低频率我们可以通过先增加周期、再降采样、
降低频率:先减少周期、然后两个点之间加平均值
def pitch_adjust(cor, wave_data, point):
wave_data = list(wave_data)
wa = []
# 小于1,代表降低频率,调低音调,则添加点,删除周期
if cor < 1:
decrease_num = len(point) - (len(point) // cor)
desc = len(wave_data) - (len(wave_data) // cor)
every = int(len(point) // decrease_num)
for i in range(len(point) - 1):
start = point[i]
end = point[i + 1]
if i % every == 0:
continue
else:
wa.extend(wave_data[start:end])
every1 = int(len(wa) // desc)
for j in range(len(wa)-2,1,-1):
if j%every1 == 0:
wa.insert(j,(wa[j-1]+wa[j+1])/2)
else:
continue
# count = 0
# for i in range(len(point) - 1):
# if point[i] <= count:
# count = 0
# continue
# start = point[i]
# end = point[i + 1]
# wa_da = wave_data[start:end]
# add_num = len(wa_da)/cor - len(wa_da)
# every = len(wa_da)/add_num
#
# for j in range(len([wa_da][:])-1, 1, -1):
# if j%every == 0:
# count+=1
# wa_da.insert(j, (wa_da[j-1]+wa_da[j+1])/2)
# wa.extend(wa_da)
elif cor == 1:
return wave_data
else:
wa1 = []
desc_num = len(point) - len(point) / cor
desc1 = len(wave_data) - len(wave_data)/cor
every = int(len(point)//desc_num)
for i in range(len(point) - 1):
start = point[i]
end = point[i + 1]
if i % every == 0:
wa1.extend(wave_data[start:end])
wa1.extend(wave_data[start:end])
else:
wa1.extend(wave_data[start:end])
every1 = int(len(wa1)//desc1)
print(desc1)
print(len(wa1))
for j in range(len(wa1)):
if j%every1 == 0:
continue
else:
wa.append(wa1[j])
wa = np.array(wa, dtype="int16")
return wa