语音调节 变调不变速

前面记录了语音变速不变调,之后我又把变调不变速实现了一下

这里先说一下大概流程,类似于变速不变调,首先函数传入三个值,分别为调节系数、语音的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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值