变速和变调相关的音频处理库有SoundTouch,Sonic,RubberBand(https://breakfastquay.com/rubberband/)。
RubberBand暂时没有调试成功,等调成功了再发使用方法吧。

目录

一、SoundTouch

二、Sonic

一、SoundTouch

开源代码:https://codeberg.org/soundtouch/soundtouch
动态库下载:http://www.surina.net/soundtouch/download.html

SoundTounch 提供了静态库和动态库两种使用方案。
1、动态库。推荐使用这种方法,已提供了编译好的Windows库,免去自己编译的麻烦。下载解压后如图所示,提供了32位和64位的动态库以及一个头文件。将其配置到VS工程中就可以使用了。

调用步骤:

//准备工作
HANDLE soundtouch_createInstance(); //创建实例
void soundtouch_setChannels(HANDLE h, unsigned int numChannels);//设置原始音频通道数
void soundtouch_setSampleRate(HANDLE h, unsigned int srate);//设置原始音频采样率
//设置音频变化方案(三选一)
void soundtouch_setTempo(HANDLE h, float newTempo); //音频变速不变调。原始速度tempo=1.0,tempo越小速度越慢,越大越快
void soundtouch_setPitch(HANDLE h, float newPitch); //音频变调不变速。原始音调pitch=1.0,pitch越小音调月底,越大越高
void soundtouch_setRate(HANDLE h, float newRate); //变速又变调。原始频率rate=1.0,rate越小速度越慢音调越低,反之速度越大音调越高
//处理过程
soundtouch_putSamples //传入浮点类型音频数据(FFmpeg类型:AV_SAMPLE_FMT_FLT),//整型数据(FFmpeg类型:AV_SAMPLE_FMT_S16)使用soundtouch_putSamples_i16
soundtouch_receiveSamples //获取变换后的音频数据,使用soundtouch_receiveSamples_i16//对应soundtouch_putSamples_i16。返回值为实际获取到的采样个数
//释放资源
void soundtouch_destroyInstance(HANDLE h); //销毁实例

2、静态库。需要自己编译。拉取到源码后,静态库工程在soundtouch/source/SoundTouch路径下。使用VS打开解决方案SoundTouch.sln就可以编译了。编译后的静态库在soundtouch/lib文件夹中。
编译注意事项:根据你的音频采样格式,选择STTypes.h文件中对应的宏。

使用方法:VS配置中增加包含路径:soundtouch/include,库路径:soundtouch/lib。使用的地方包含SoundTouch.h 头文件。
调用步骤(与动态库的使用类似):

#include "SoundTouch.h"
//准备工作
SoundTouch oSoundTouch; //创建实例
oSoundTouch.setChannels(numChannels);//设置原始音频通道数
oSoundTouch.setSampleRate(srate);//设置原始音频采样率
//设置音频变化方案(三选一)
oSoundTouch.setTempo(newTempo); //音频变速不变调。原始速度tempo=1.0,tempo越小速度越慢,越大越快
oSoundTouch.setPitch(newPitch); //音频变调不变速。原始音调pitch=1.0,pitch越小音调月底,越大越高
oSoundTouch.setRate(newRate); //变速又变调。原始频率rate=1.0,rate越小速度越慢音调越低,反之速度越大音调越高
//处理过程
oSoundTouch.putSamples //传入音频数据,音频数据类型与编译时选择的音频采样格式一致
oSoundTouch.receiveSamples //获取变换后的音频数据

二、Sonic

开源代码:https://github.com/waywardgeek/sonic(Gitee镜像https://gitee.com/mirrors_waywardgeek/sonic)
使用方法:直接将sonic.h、sonic.c加到工程里边。
调用步骤与SoundTouch类似:

//准备工作
sonicStream sonicCreateStream(int sampleRate, int numChannels); //创建sonicStream,传入原始音频采样率和通道数
//设置音频变化方案(三选一)
void sonicSetSpeed(sonicStream stream, float speed); //音频变速不变调。原始速度speed=1.0,tempo越小速度越慢,越大越快
void sonicSetPitch(sonicStream stream, float pitch); //音频变调不变速。原始音调pitch=1.0,pitch越小音调月底,越大越高
void sonicSetRate(sonicStream stream, float rate);//变速又变调。原始频率rate=1.0,rate越小速度越慢音调越低,反之速度越大音调越高
//处理过程
sonicWriteFloatToStream //传入浮点类型音频数据(FFmpeg类型:AV_SAMPLE_FMT_FLT),整型数据(FFmpeg类型:AV_SAMPLE_FMT_S16)使用sonicWriteShortToStream
sonicReadFloatFromStream //获取变换后的音频数据,使用sonicReadShortFromStream对应sonicWriteShortToStream。返回值为实际获取到的采样个数
//释放资源
void sonicDestroyStream(sonicStream stream); //销毁sonicStream

有问题欢迎交流!

如何实现音频变速不变调、变调不变速、变速又变调?相关推荐

  1. 音频变速变调原理及 soundtouch 代码分析

    音频变速变调原理及 soundtouch 代码分析 作者:floer rivor 2021 年 4 月 30 日 本文字数:5066 字 阅读完需:约 17 分钟 概述 音频变速变调在不同的场景可以分 ...

  2. Android原生音频变调代码流程分析

    会说话的Tom猫是一款非常经典的终端游戏,可爱的Tom猫可以发出不同音调的声音. 之前用过一个非常著名的开源库SoundTouch可以实现音频的变速变调功能,具体可参考: https://blog.c ...

  3. soundtouch之变调、变速、节拍

    前一段日子在做变调不变速的算法,通过频域实现,谁知道到相位同步一直搞不定了,声音效果比较差.后来去偶然看到了soundtouch,这个强大的库让我为之振奋,现在已经完成,并做成了一个实时播放的demo ...

  4. 变速变调原理与方法总结

    转载自:https://www.cnblogs.com/welen/p/3782896.html 变速变调原理与方法总结 变调和变速原理 自然语音的产生可以简化为图2-1模型,激励源出来的声门波信号与 ...

  5. 语音变速、变调方法汇总

    介绍三种语音变速.变调方法: 1. 变速变调: 2. 变速不变调: 3. 变调不变速. 实现方法如下: 1. 变速变调: sox input.wav output.wav speed 1.3 #速度变 ...

  6. 变速不变调播放mp3-QT-QAudioOutput-lame-sonic

    基本原理 有两种变速播放方法,一种是改变playback的频率,例如22050hz采样用44100hz播放.但是这种方法会导致声音快的同时,声调也相应变化,会比较难以接受. 第二种方法,也是本次讨论中 ...

  7. 【语音变速】变速不变调+变速变调

    介绍两种语音变速的方法,一种是不改变pitch的变速,一种是改变pitch的变速. 不改变pitch的变速方法: $ ffmpeg -n -i input.wav -filter:a "at ...

  8. 音频变速播放原理分析及实现方案

    [时间:2019-05] [状态:Open] [关键词:音频,audio,倍速,变速,变调,soundtouch,sonic] 音频变调变速原理分析 先来一段语音处理的理论: 变速变调可分为:变速不变 ...

  9. ffmpeg播放器声音效果2-变速不变调及变调

    关于声音的变速不变调,或者只是单纯的变调,现在很多视频播放器或者音频播放器或者移动端APP都实现了此功能.诸如腾讯视频,爱奇艺视频,优酷视频......而我们主要是以SoundTouch开源源码来实现 ...

  10. 今日份安利:变声变调软件有什么?

    小伙伴们平时会去歌房唱歌吗?有时我们遇到唱不上的高音或者是唱不下的低音,就会对这个音乐进行变调处理.变调在歌房中很容易实现,只需要点击变调即可.可是如果我们在家里唱歌,遇到需要变调的情况,就得借助一些 ...

最新文章

  1. angularJS的controller之间如何正确的通信
  2. 类,对象,方法的使用
  3. WinRAR 5.40 4.20 3.93 的注册码 - rarreg.key
  4. ie传递给系统调用的数据区域太小_内存区域与内存溢出异常
  5. 设计一个具有大纯时延时间的一阶惯性环节的计算机控制系统,具有一阶纯滞后环节设计.doc...
  6. Springboot 读取配置文件
  7. 基线是什么意思_CAD都玩不溜,还好意思说自己搞工程的?
  8. Remository3.52简体中文语言包
  9. 安装 mysql 数据库, 并做 主 从(二)
  10. 【转】Visio(流程图绘制软件)的免费替代品
  11. GB28181协议之语音对讲
  12. 潇洒学校丹丹老师分享免喷涂材料注塑工艺的五大要点
  13. Django博客项目使用容联云作为第三方发送短信验证码报错{‘172001‘: ‘网络错误‘}
  14. c语言筛法求一个范围内的素数,运用埃拉托色尼筛法求解一定范围内的素数.docx...
  15. LU分解完成利用节点电压法的简易电路求解程序(二)
  16. 身份证OCR识别发展史
  17. 新型网络诈骗缘何层出不穷?
  18. abaqus直齿轮斜齿轮等相关模型调试,xfem裂纹扩展,磨损子程序
  19. eric7 22.4版本安装
  20. python中weekid什么意思_Python学习 Week1

热门文章

  1. QLocale 获取系统语言简写
  2. 笔记本正常联网,浏览器无法访问网页问题
  3. L学姐北京美团测开一面二面
  4. 在word上写博客直接发到CSDN ——失败哈哈
  5. 禁止灵格斯2.7弹出“新奇英语 互动锐词”广告窗口的解决方法
  6. 如何收藏豆瓣FM中的红心歌曲
  7. USB MIC从识别到选择的流程framework层记录
  8. 平头哥 TG7100C 试玩。
  9. BaoDing University热身赛 2020-1-31 13:50 3 hours
  10. 很久没有更新这边了。