音频变速开源框架SoundTouch

SoundTouch是一个开源的音频处理库,主要实现包含变速、变调、变速同时变调等三个功能模块,能够对媒体流实时操作,也能对音频文件操作。采用32位浮点或者16位定点,支持单声道或者双声道,采样率范围为8k~48k。当然,这里的变速是通过节拍tempo控制的,因此它能提取乐音的节拍。另外,这个库的算法被很多知名软件使用,如audacity,winnap等。

三个功能分别采用的算法:

变速不变调:通过wsola类型的算法实现;

rate:通过插值抽取实现;(重采样的算法我已经写过一个函数了,现有的函数也比较多)

变调不变速:前两个的组合,先变速,然后重采样。

主要使用的函数都在soundtouch.H文件中包含,当然,它也做成了一个dll,还给出了一个使用样例。可以通过样例来看它的使用,还有一个readme文件,其中有详细的介绍。

我个人总结的主要注意事项: 

1、  使用前需要初始化SoundTouch对象,初始化的方法是用setSampleRate和setChannels设置音频流的参数。1为单声道,2为双声道。采样率为8000~48000Hz。然后可以通过相应的函数来设置新的pitch,tempo,rate等。

2、  SoundTouch就像一个FIFO管子,先进去的先出来。用putSamples来输入采样值,用receiveSamples来获取处理后的值。需要注意的是,新的pitch,tempo,rate必须在putsample之前就设定好。而不是填充好数据了才设置新的值。

3、  SoundTouch需要成批的数据到来才能处理,所以必须有足够的采样到来,处理才能进行。所以,这里会有一些延迟(latency),输入不一定会马上处理,输出也不一定是刚刚输入的那一个。

4、  各个控制参数可以在处理期间改变,但是没有一个控制信号来实现同步,所以如果在多线程里面进行的话要增加另外的信号控制。

5、  Soundtouch类采用了TDStretch类来变速,采用了RateTranposer类来变采样率。Soundtouch的变调实际上是通过先用TDStretch把信号拉长了,这样变速了但是没有变调,然后再重采样,实现变调不变速。

6、  Soundtouch有定点和浮点两种算法,在win下面编译的时候,要在STTypes.H头文件中选择“#define INTEGER_SAMPLES     1”则用16位,如果是 选择了“#define FLOAT_SAMPLES       1” 就代表用float型的采样值。

7、  如果用了time-stretch功能的话,可能会有比较长的延迟,文献中比较低端的机器配置会有100ms的延迟处理时间,实际上根据我的机器配置(当前比较普通的)计算,延迟远小于这个数值,基本上在put进去之后马上就会计算出来。当然,变调用的是time-stretch和重采样的组合,也必须考虑这个延迟。

8、  有三个参数setting需要设置,DEFAULT_SEQUENCE_MS,帧长(ms),样例中用的是40;DEFAULT_SEEKWINDOW_MS,叠加的时候寻找窗的范围长度(ms),样例中给的是15;SETTING_OVERLAP_MS,叠加范围(ms),样例中用的是8; SETTING_USE_QUICKSEEK,是否使用快速查找方法;SETTING_USE_AA_FILTER,是否使用AA滤波器;SETTING_AA_FILTER_LENGTH,滤波器阶数,默认值是32。当然这些参数都有相应的默认值,如果你不去修改它也可以,但是为了实时或者音质的要求你可以根据需求调整它,详见它自带的readme文档。

转载于:https://my.oschina.net/aiadaniel/blog/97846

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值