音频的处理,通常会涉及到音调、音速或者声道的切换,例如睡觉时,开车时,跑步时,party,吃饭时等等根据不同场景我们也许会要求音乐能有不同的意境变化,强大的soundtouch音频开源库基于C++的底层算法处理,为我们应用层的开发者提供了非常便捷的调用接口。下面我们来一步步分析soundtouch的结构以及是如何使用的。

结构:
1.首先我们打开soundtouch源码,看到初始化so库的操作:

static {System.loadLibrary("soundtouch");}

那么soundtouch.so里是什么鬼?打开c++源码:

SoundTouch 类的声明包含在SoundTouch.h和SoundTouch.cpp之中,由FIFOProcessor类直接派生,而FIFOProcessor类又直接从基类FIFOSamplePipe派生。同时声明SoundTouch这个类包含在命名空间 soundtouch,这就是为什么我们使用这个库的时候需要声明命名空间的且仅仅定义了一些常量,诸如版本号,版本ID号等等,这两个父类都包含在FIFOSamplePipe.h和FIFOSamplePipe.cpp文件中。不管什么库,如果要使用的话,一般的流程都是先定义然后进行一些必要的初始化。

2.其次,我们看看经常使用的拓展类(直接调用soundtouch库的java类):

基类:


主类:

通过上面的引用方式我们发现主类SoundStreamAudioPlayer是一个线程,异步处理的方式,也就是说在播放过程中我们可以实时地修改音频频率参数,这为我们的开发可谓是解决了大麻烦!

使用:

1.提供音频源:
a.我们可以将制订的媒体放在sdcard中,然后将路径传给SoundStreamAudioPlayer:

SoundStreamAudioPlayer player = new SoundStreamAudioPlayer(0, f.getPath(), tempo, pitchSemi);

b.通过录音采集媒体源:
这里想要重点提一下关于录音,soundtouch在录音方面也做了处理,就是用户可以根据调节的频率参数,在录音完毕后通过录音类SoundStreamAduioRecorder中的AudioTrack,不断完成声音的采集,最后将采集的声音源改变音轨。SoundStreamAduioRecorder自身提供了startRecord、stopRecord、startPlay、stopPlay方法,很明显这是录音和播放的方法。

SoundTouch库其实是一个非常强大,源码非常复杂但应用层接口的调用非常简单的一个音频调节工具,目前我只是刚接触不久,在开发中曾简单使用过,后续的探索会根据需要不断深入,相信美好的东西是经过时间的打磨产生的!

小结:
关于SoundTouh的底层算法想要了解的详见博友“suhetao的专栏”:http://blog.csdn.net/suhetao/article/details/5843480

本人整理了一个完整关于SoundTouch使用的Demo已上传到GitHub,欢迎下载:https://github.com/yinzhengwei/SoundTouchDemo

SoundTouch音频处理库的简单使用(音调、音速、声道等等)相关推荐

  1. SoundTouch音频处理库源码分析及算法提取(1)

    SoundTouch音频处理库的使用异常简单,经过简单的编译之后,设置编译环境,以vc为例 ,直接在include包含SoundTouch目录下的include路径,接着在lib添加SoundTouc ...

  2. SoundTouch音频处理库源码分析及算法提取(6)

    TDStretch类的实现 SoundTouch类成员函数putSamples(const SAMPLETYPE *samples, uint nSamples)实现如下,根据上篇的分析rate是一个 ...

  3. 一段简单的html 5 音频,5个用于处理HTML5音频的库和API

    在过去的几个月中,我遇到了许多不同的库,它们利用了相对较新的HTML5 Audio API以及更著名的HTML5 Audio Element及其更简单的API. 我以为我会在本文中分享这些库中的一小部 ...

  4. C++常用的音频工具库

        由于C++这种语言改装于C语言,它在C语言的基础上加了继承.封装.多态,使编程风格更接近面向对象(OO:object-oriented),在游戏开发.服务器编程.音视频处理.网络通信等领域应用 ...

  5. python音频处理库_Python中音频处理库pydub的使用教程

    前言 pydub是Python中用户处理音频文件的一个库.本文主要介绍了关于Python音频处理库pydub使用的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 安装: 1.安装pip工具: ...

  6. python对逻辑回归进行显著性_python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Red ...

  7. python wpf教程_WPF使用IronPython库的简单Demo

    WPF使用IronPython库的简单Demo 一.IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET ...

  8. python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)

    开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍.Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且 ...

  9. pytorch深度学习之音频librosa库与torchaudio库的安装与使用(windows和ubuntu)

    pytorch深度学习之音频librosa库与torchaudio库的安装与使用 搭建pytorch 基本框架 与 anaconda pytorch虚拟环境创建,去看这里 导入librosa库与tor ...

最新文章

  1. python -如何查看已经安装xlrd 的版本号
  2. 一分钟详解鱼眼镜头标定基本原理及实现
  3. myeclipse中配置weblogic的开发环境
  4. MongoDB3.6.3 windows安装配置、启动
  5. @FunctionalInterface
  6. 第五天 常用基本函数
  7. WebStrom的学习使用 H5开发
  8. PHP Predefined Interfaces 预定义接口
  9. HeadFirst设计模式-命令模式
  10. android studio 顶部菜单栏消失了如何恢复
  11. 测试用例管理工具~JIRA
  12. 文件复制 要求边读边写
  13. echart柱状图堆叠总计显示
  14. 入门android开发
  15. 世卫和盖茨基金会被黑?疑2.5万电邮账号密码被公开
  16. 指针变量的定义和使用
  17. 华为快应用 - web标签无法加载部分网页
  18. 概率密度函数,参数估计,非参数估计
  19. Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
  20. 地产网站建设步骤-企业房地产网站建设策划技巧及方案

热门文章

  1. Python加密解密
  2. Web视觉设计师培训视频教程
  3. 通达信捉妖改良CCI指标公式,简洁巧妙
  4. 不懂编程,不懂设计!4个AI工具可以让任何人免费创建自己的网站 AI Website Builders
  5. CentOS服务器清除用户登录记录和命令历史方法
  6. Mac 下必备高效率软件与插件,值得拥有。
  7. 程序员专用经典语录【转】
  8. P1344 [USACO4.4] 追查坏牛奶Pollutant Control
  9. PHP json_encode转换空数组为对象
  10. Windows 10安装Docker以及配置镜像加速