现在已有一些博客写这相关的内容,但是真的写的看完和没看一样,我最近也研究了一下相关内容,为自己记个笔记,同时也分享出来,和大家一起讨论

变时不变调时音频处理里的一个小方向,但又没那么简单,算法有很多,我就以soundtouch库为例来展开聊一下。

  • soundtouch是一个音频处理开源库,其官网(http://soundtouch.surina.net),该库支持在windows、GNU、android平台的安装,有编译好的库也有源码。
  • soundtouch能处理wav格式的音频。
  • soundtouch支持音频的变时不变调处理(tempo),变调不变时处理(pitch),和变时变调处理(playback rate),在soundtouch的可执行命令里对应tempo、pitch、rate,其实这三个参数是通过两大类算法来控制的,tempo是通过类WSOLA算法来控制音频的时长且不改变音频的音调,rate是通过采样的算法加滤波算法(这两者一般是在一起的,不管是上采样还是下采样,因为抽取可能产生混叠,内插可能产生镜像,所以分别要使用抗混叠或抗镜像滤波器来处理,这两种滤波器一般都是低通滤波去)来控制音频的时长同时也改变音频的音调,pitch就是tempo+rate的结果。
  • soundtouch库对音频进行变时不变调处理时会有100ms的延时。

下面主要就讲一下WSOLA算法,这里不会讲到太深的理论,不使用复杂公式,通过一篇综述来讲一下:
综述名叫《A Review of Time-Scale Modification of Music Signals》,可以自己google一下,我传到我的资源上了

1.音频的时长变换TSM
时长变换基本分为三个步骤:

  • 将音频按帧分解
  • 将分解好的帧重新定位
  • 合成最终音频

如下图所示:

2.OLA算法(Overlap-Add)
看名字可以理解,这就是一个简单的叠加算法,先将输入的音频进行分帧处理,然后进行音频合成(叠加),叠加间隔计算如下面公式

OLA算法如下图所示:

这样做会使得产生的音频有两个问题:

  • 会造成音频的不连续,如下图所示

  • 直接叠加会造成音频叠加部分信号幅值改变,如下图所示

    3.WSOLA算法(Waveform Similarity Overlap-Add)
    WSOLA类似于SOLA,不同的是在对输入音频分解成音频帧后不直接叠加,而是在一定的范围内查找待叠加的音频帧,该音频帧要符合与原位置处音频帧“波形最相似”的条件,符合该条件的音频帧作为输出帧进行输出视频的合成。“波形最相似”可以通过互相关系数来确定。
    上面这句话可能较难理解,但是是核心,可以结合下图来理解(图片的注释很有帮助)

原理基本就这样了,回到sountouch的源码来看一下,源码下载地址(http://soundtouch.surina.net/download.html),我目前下的是SoundStretch 2.0 for Mac OSX 版本,下载后解压,按照Readme安装该库,在文件夹soundstretch_mac_osx_v2.0.0/soundtouch/source中保存着soundtouch的源码,其中source/SoundStretch保存着一个使用样例用于音频的变时不变调处理,source/SoundTouch保存着soundtouch的源码。

自己用xcode新建了一个工程,源码使用source/SoundStretch,如下图所示

在上图中,soundtouch_test文件夹中,main里面是主函数,RunParameters是用来处理输入参数的类,WavFile是用来处理wav文件的类,TDStretch就是用来处理变时不变调的类(改变tempo),RateTransposer是用来处理音频采样的类(改变tempo和pitch),pitch的实现则是使用了TDStretch和RateTranspose两个类。
在处理变时不变调时,可以调整三个参数,DEFAULT_SEQUENCE_MS、DEFAULT_SEEKWINDOW_MS、DEFAULT_OVERLAP_MS,这部分的设置方法可以在readme和TDStretch.h看到一些信息,默认的设置是有利于处理音乐音频,如果要处理演讲类的音频TDStretch.h给出了另一组设置。DEFAULT_SEQUENCE_MS指的是处理的音频片段长度,DEFAULT_SEEKWINDOW_MS指的是WSOLA算法中查找“波形最相似”音频的区域大小,DEFAULT_OVERLAP_MS指的是最后的叠加区域大小。

还有一点要注意的是在SoundTouch类中定义了virtualTempo、virtualPitch、virtualRate,这些是外部设置的参数与命令工具的tempo、pitch、rate不对应,而内部运算用的也不是virtualTempo、virtualPitch、virtualRate,而是SoundTouch类中的tempo、rate(如果命令工具设置tempo=-70则virtualTempo=0.3、virtualPitch=1、virtualRate=1,tempo=0.3、rate=1)

音频变时不变调处理(SoundTouch WSOLA)相关推荐

  1. soundtouch android,音频变时不变调处理(SoundTouch WSOLA)

    现在已有一些博客写这相关的内容,但是真的写的看完和没看一样,我最近也研究了一下相关内容,为自己记个笔记,同时也分享出来,和大家一起讨论 变时不变调时音频处理里的一个小方向,但又没那么简单,算法有很多, ...

  2. 怎样将音频变声?1分钟教你音频变声怎么弄!

    大家平常爱不爱刷短视频呢?不知道你们看短视频的时候有没有注意到,一些视频的配音很是搞怪,常常让人捧腹大笑!那么这些声音是怎么制作出来的呢?其实大部分的搞怪配音,都是借助软件对音频进行变音来实现的~今天 ...

  3. 如何将音频变声?试试这几个方法吧

    昨天,我在构思视频素材的时候想到可以在其中添加一个鬼畜片段,以此来提升视频的丰富度和乐趣.那么如果要添加鬼畜片段的话,首先就需要我们将音频进行变声操作,不过由于不知道怎么进行音频变声,于是我就上网搜索 ...

  4. 这三个音频变声编辑软件教你怎么给音频变声

    现如今随着我们生活的节奏越来越快,大家都爱上了短视频,每天也都有大量的短视频被创作出来.在这样的背景下,不知道有没有小伙伴也充满创意的想去尝试,但是却因为不知道怎么调整音频变声而阻挡了创作的步伐呢?其 ...

  5. 怎样将音频变声?三分钟教会你

    音频变声是一种常见的音频处理方式,可以对人声或音乐进行特殊处理,使其声音产生不同的效果.它的应用广泛,像是音乐制作人可能需要使用音频变声来改变歌手的声音,使其更加独特或与歌曲的风格相匹配.例如,将男歌 ...

  6. 音频变声的软件叫什么?这些软件值得收藏

    在今天这个数字时代,随着人们对于娱乐消费需求的不断增长,很多人开始涉足各种新领域,比如语音包.游戏配音.BGM制作等等.这些领域的共同点是需要一定的音频素材,同时也需要创意性地处理这些素材.这时,音频 ...

  7. androidwakelock_Android音频播放时wakelock的实现

    音频播放时 wakelock 的实现 作者 :Macro Liu 功能描述 : 当播放音乐时,按电源键只需要进入 early suspend, 以保持音乐播放状态. 实现方法 : 在上层和内核都加 w ...

  8. Python获取.wav音频的时长

    要求是这样的: 给你一个.wav的音频,要求获取这个音频的时长.这里需要用到两个模块,contextlib和 wave. 方法1: import contextlib import wave file ...

  9. php获取音频的时长,PHP编程获取音频文件时长的方法【基于getid3类】

    本文实例讲述了PHP编程获取音频文件时长的方法.分享给大家供大家参考,具体如下: 问题: 昨天在新增论坛功能的时候,移动端显示音频文件需要知道是多长的音频: 具体解决方案如下: 首先就是数据库中增加保 ...

最新文章

  1. opencv角点检测学习总结
  2. SAP 电商云 Spartacus UI 设置 delivery mode 在 3G 慢速网络下的排队效果
  3. 成为一名JAVA高级工程师你需要学什么
  4. python读取文件乱码
  5. 中国IT人,你们是否从没想过开发一款伟大的产品?
  6. boost.asio无锁异步并发
  7. 前端请求接口post_程序员:HttpClient进行post请求的工具类,访问第三方接口HTTPS...
  8. [svc]centos7的服务治理-systemd
  9. ubuntu 配置python,Redis,Mysql
  10. pppoe路由桥混合模式_192.168.1.1路由器怎么设置和登陆
  11. 【Shiro第七篇】SpringBoot + Shiro实现会话管理
  12. Bootstarp4 文字排版
  13. Android根据经纬度计算距离
  14. js中的字符串替换replace操作
  15. 工科数学分析之数学感悟
  16. CentOS防火墙开启masquerade后即开启包转发功能
  17. Jquery插件实现“点击获取验证码后60秒内禁止重新获取(防刷新)”
  18. 七牛云成功通过 CMMI3 认证
  19. SX1278 FSK 调试记录
  20. cocos2dx 圆盘抽奖_cocos2d编写的类似幸运大转盘抽奖源码

热门文章

  1. Python网络请求、JSON转换、多线程、异步IO
  2. 输出教学日历表c语言的思路,20182019学年第二学期教学日历及教学环节表(一).pdf...
  3. 重拳出击!再见了,骚扰电话(短信)!
  4. CCNA考试复习总结
  5. java 中序遍历(递归、堆栈)
  6. 如何用lisp画蔓叶线_利用 TI 图形计算器绘制美丽的极坐标曲线
  7. LabVIEW练习5
  8. 数据分析前景如何,如何规划学习路线
  9. 老码识途读书笔记 1
  10. 计算机监控系统在地铁中的应用有哪些,自动变形监测系统在地铁结构变形监测中的应用...