soundtouch变速wsola算法之改进

soundtouch变速算法很类似sola算法,细看才知道是wsola算法。

上个星期有个需求,将该变速应用到直播的包处理,有点类似于webrtc的netEQ处理机制。

直接使用soundtouch,会存在一些问题:

1.一段正常,一段变速,中间会出现不连续,有冲击。或者不同速率的切换。

越频繁,现象更明显,有de,de的声响。

2.soundtouch每次处理,会有残余,如果用flush,音质会受到影响,一般到结尾采用该函数。

也就是说输入样本有残余。

3.soundtouch变速的长度不能精确到样本点级别,因为拼接的时候回寻找一个最佳的位置,所以这个是变化的,

最终的变速长度还是可能存在几百毫秒的偏差。

通过一个星期的研究,终于解决了上述三个问题。

不会出现连续,输入样本点一次完全处理,不会有残余,精确输出长度到样本点级。

图一:原始,图二:soundtouch不同速率之间的切换  图三:改进后的效果。

时间: 2024-09-30 07:20:10

soundtouch变速wsola算法之改进的相关文章

数据结构实践——归并排序算法的改进

本文是针对[数据结构基础系列(9):排序]的项目. [项目 - 归并排序算法的改进] 采用归并排序.快速排序等高效算法进行排序,当数据元素较少时(如n≤64),经常直接使用直接插入排序算法等高复杂度的算法.这样做,会带来一定的好处,例如归并排序减少分配.回收临时存储区域的频次,快速排序减少递归层次等. 试按上面的思路,重新实现归并排序算法. [参考解答] #include <stdio.h> #include <malloc.h> #include <stdlib.h>

ISAP算法对 Dinic算法的改进

ISAP算法对 Dinic算法的改进: 在刘汝佳图论的开头引言里面,就指出了,算法的本身细节优化,是比较复杂的,这些高质量的图论算法是无数优秀算法设计师的智慧结晶. 如果一时半会理解不清楚,也是正常的.但是对于一个优秀的acmer来说,其算法的本身,可以锻炼你的思维.增长见识! 下面是我对 Dinic和ISAP的认识: Dinic算法比较值钱的 EK算法来说,已经有很大的提高了,其优势在哪里呢? 就是在于他的分层思想.在层次图上增广.但是,他也有弊端. 就是每次进行增广后,对于层次图都进行了从头

KMP算法及其改进

KMP算法及其改进 字符串匹配算法也就是从一个很长的字符串里面找出与我们手中的字符串相匹配的字符串(是这个大字符串的第几个字符开始),对于这个问题我们有很简单的解法,叫BF算法,Brute Force也就是蛮力的意思,充分依靠计算能力来解决问题的方法,对于这种解法可以用下面的图片来表述: 上面的算法就是BF算法,不好之处是效率太低了,因为就像第三趟比较中那样,我们只有最后一个元素没有匹配上就要从头再来,主串的对应元素竟然要回头从第四个元素开始比较,我们明明比较到了主串的第七个元素,前面的工作全部

数据结构之--冒泡排序算法及改进

冒泡排序,是我们学习数据结构第一个排序算法,也是一种最常见和简单的排序算法. 排序原理: 我们把一个数组从左到右依次两两元素比较,比较完成一趟后,能确定最大(最小)值,放在最右边(最左边): 剩下的元素重复上述步骤,直到整个数组有序. 该算法时间复杂度一般为n2  . java实现代码如下: public class BubbleSort { public static void swap(int[] array, int a, int b) { array[a] = array[a] ^ ar

一些关于Canny边缘检测算法的改进

传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果(可以参考上一篇Canny边缘检测算法的实现).但是Canny算法本身也有一些缺陷,可以有改进的地方. 1. Canny边缘检测第一步用高斯模糊来去掉噪声,但是同时也会平滑边缘,使得边缘信息减弱,有可能使得在后面的步骤中漏掉一些需要的边缘,特别是弱边缘和孤立的边缘,可能在双阀值和联通计算中被剔除.很自然地可以预见,如果加大高斯模糊的半径,对噪声的平滑力度加大,但也会使得最后得到的边缘图中的边缘明显减少.这里依然用Lena

Levenberg-Marquardt迭代(LM算法)-改进Newton法

                  1.前言                                    a.对于工程问题,一般描述为:从一些测量值(观测量)x 中估计参数 p?即x = f(p),                                 其中,x为测量值构成的向量,参数p为待求量,为了让模型能适应一般场景,这里p也为向量.                                 这是一个函数求解问题,可以使用Guass-Newton法进行求解,LM算法

Submission Details [leetcode] 算法的改进

最先看到这一题,直觉的解法就是len从1到s1.size()-1,递归调用比较s1和s2长度为len的子串是否相等,以及剩余部分是否相等. 将s1分成s1[len + rest],分别比较s2[len + rest]和s2[rest + len] 代码如下: bool isScramble(string s1, string s2) { return find(s1, s2); } bool find(string s1, string s2) { if (s1.compare(s2) == 0

计算机图形学之光栅图形学——多边形的扫描转换之 X-扫描算法及改进

本文是对 赵明老师 <计算机图形学>MOOC课程 部分章节的小总结. 多边形有两种表示方法:顶点表示和点阵表示. X-扫描线算法: 算法步骤概括如下: 注意: 改进: 为了避免求交运算,引进一套特殊的数据结构:

冒泡以及插入排序算法的改进

冒泡排序 说明:此文中的排序算法数组,第一个数(即0下标)没有作为数据处理(i从1开始),arr[0]用作哨岗,部分排序算法(如插入排序)比较时需要用到 排序思想: 1.假设共有N个数,从头开始,比较相邻的两个数,如果前一个数比后一个数大,则交换位置,否则不变,继续比较. 2.按照这样的方法对数组从0到N-1进行遍历,一轮遍历完,则最后一个数为最大值. 3.N=N-1,按照1,2的思想遍历N-1轮,则数组从大到小排序成功 void Popsort(int arr[],int n)//冒泡排序 {