这篇文章是项目总结了。

做了段时间的项目,过程中也遇到了很多麻烦,但是好在终于都解决了,这里是这里是项目之后凭着记忆总结出来,大家有遇到同样的问题,希望能参考了,但是我记忆可能不太好了,要是实践中有什么问题可以直接给我留言,或者到weibo.com/yarin上找我了。

要在ios中实现一个变声技术,而且又要要求能在iphone 3g上也能运行,所以自带的一些api就显得比较麻烦,因此决定使用soundtouch开源库,该库可以实现变声效果,包括可以调节声音的频率而不改变声音的长度,大家可以使用openal试试,改变频率之后,声音就会变短了。

呵呵,有了这个库,其实我们就可以山寨一个talkingtom了,记住我不是叫大家去山寨,这里只是谈谈学习的技术。还是要创新才好啊。

SoundTouch是一个开源的音频处理库,主要实现包含变速、变调、变速同时变调等三个 功能模块,能够对媒体流实时操作,也能对音频文件操作。采用32位浮点或者16位定点,支持单声道或者双声道,采样率范围为8k~48k。

过程大概如下:

首先下载soundtouch开源苦,这个可以到官方网站去找了,http://www.surina.net/soundtouch/。

下载之后解压,将“soundtouch/source/SoundTouch”中的文件全部拷贝到要添加的ios项目中,暂时记不清出要不要修改其他的参数了,如果又任何错误则欢迎讨论,应该是可以直接编译的,加入之后如下图。

因为soundtouch是一个c++编写的开源库,所以要在ios中使用,就要和object-c混编了,该改后缀名的就改了吧。

下面我们要修改音频文件主要调整的几个函数如下了:

mSoundTouch.setSampleRate(sampleRate);//设置声音的采样频率
mSoundTouch.setChannels(channels);//设置声音的声道
m_SoundTouch.setTempoChange(tempoDelta); //这个就是传说中的变速不变调
m_SoundTouch.setPitchSemiTones(pitchDelta);//设置声音的pitch
mSoundTouch.setRateChange(rateDelta);//设置声音的速率
// quick是一个bool变量,USE_QUICKSEEK具体有什么用我暂时也不太清楚。
mSoundTouch.setSetting(SETTING_USE_QUICKSEEK, quick);
// noAntiAlias是一个bool变量,USE_AA_FILTER具体有什么用我暂时也不太清楚。
mSoundTouch.setSetting(SETTING_USE_AA_FILTER, !(noAntiAlias))

其中mSoundTouch是一个soundtouch对象了。至于要怎么变就看你怎么调节参数了,soundtouch的特点好像就是吧声音变得卡通了,这个按照自己的需求去选择吧,也还有其他的一些开源库了。

在文末会给大家提供一个soundtouch整合iphone自带的SpeakHere的例子了,但是不知道能不能上传,好像有点儿大,如果不能上传就到http://weibo.com/yarin上找我吧。

最后需要注意的两个问题:

已开始我编译出来,声音很奇怪也有噪音很大,还是花了很多时间来找原因,但是都无果,突然想起前面我们说过,它同时支持32位浮点和16位定点,默认时采用32位浮点的,我将其改为16位定点数的,哈哈,对了,效果很好,更改方式在STTypes.h文件中找到FLOAT_SAMPLES宏,注释掉,并打开INTEGER_SAMPLES宏,如下:

#if !(INTEGER_SAMPLES || FLOAT_SAMPLES) /// Choose either 32bit floating point or 16bit integer sampletype /// by choosing one of the following defines, unless this selection  /// has already been done in some other file. /// Notes: /// - In Windows environment, choose the sample format with the ///   following defines. /// - In GNU environment, the floating point samples are used by  ///   default, but integer samples can be chosen by giving the  ///   following switch to the configure script: ///       ./configure --enable-integer-samples ///   However, if you still prefer to select the sample format here  ///   also in GNU environment, then please #undef the INTEGER_SAMPLE ///   and FLOAT_SAMPLE defines first as in comments above. #define INTEGER_SAMPLES     1    //< 16bit integer samples //#define FLOAT_SAMPLES       1    //< 32bit float samples #endif

另外一个问题就是在模拟器上测试都完全无误了,这个时候放到真机设备上,直接报错,退出程序,又一个花了我不少时间的问题,最终发现,在真机上需要将声道改变为单声道,如下,在自己设置的时候使用:

mSoundTouch.setChannels(2);//1则为单声道

大功告成,当然了如果你要继续了解soundtouch库,那么这里(http://blog.csdn.net/leilu2008/article/details/6540575)又一系列的参考资料。
源码请到http://yarin.blog.51cto.com/1130898/640398下载!

在ios中使用soundtouch库实现变声相关推荐

  1. IOS中使用SoundTouch库实现变声

    IOS中使用SoundTouch库实现变声 void AQRecorder::StartRecord(CFStringRef inRecordFile) { mSoundTouch.setSample ...

  2. [修正]IOS中使用SoundTouch库实现变声

    之前写过一片文章" IOS中使用SoundTouch库实现变声". 最后有很多朋友在博客上说发出来的代码在模拟器上运行可以,不能在真机上运行,前段时间一直也很忙,没时间翻代码出来查 ...

  3. [项目总结]在ios中使用soundtouch库实现变声

    这篇文章是项目总结了. 做了段时间的项目,过程中也遇到了很多麻烦,但是好在终于都解决了,这里是这里是项目之后凭着记忆总结出来,大家有遇到同样的问题,希望能参考了,但是我记忆可能不太好了,要是实践中有什 ...

  4. iOS中创建动态库及调用方法

    去年因需要用到动态库,自己就找了好多一些 资料,最终找到了一套方法,怎么创建与使用动态库,记录一下: Xcode提供了在iOS工程中创建静态库的功能,和在MAC上创建动态库和静态库的功能. 但是没有提 ...

  5. SoundTouch开源库实现变声

    类似于TOM猫,实现了录音并且通过参数调节播放变声 开源库可以在 http://www.surina.net/soundtouch/   下载 tempo;//  Change sound tempo ...

  6. iOS中录屏库ReplayKit的详尽使用总结

    一.ReplayKit库的介绍: 1.1简介 在使用应用或者游戏的过程中录制回放,一直是iOS开发者绞尽脑汁想要实现的功能.但由于移动设备性能的限制,这一功能往往较难实现或者效果难以满足用户的需要.终 ...

  7. pythonista3安装第三方库_如何在pythonista for ios中添加第三方库,如pandas?

    1.Pythonista for ios 前面有人提到了,Pythonista上可以通过安ywangd/stash来实现很多的附加功能,如pip安装第三方python模块,git等等. 安装方法是在P ...

  8. 关于ios中编译ffmpeg0.9.2库

    很多朋友在问如何在ios中编译ffmpeg库,虽说网上的教程很多,但是大部分都说按其操作,最后编译总是不成功,正好我最近的项目要用到ffmpeg,所以就再次编译了,同时在这里记下,方便需要参考的朋友. ...

  9. canvas中的字体在iOS中变小的问题解决

    用canvas做了一个刮奖的js,测试时发现,只有iOS中canvas里的文字变得非常小,都看不清楚,百度上查了一个遍,发现需要在文字样式里添加上small-caps,就可以解决.具体代码: ctx. ...

最新文章

  1. 【2020/6/24整理版】利用csi tool获取csi数据并进行数据解析----适合初学的小白
  2. socket通过多网卡收发数据
  3. 【转载】天际网-Viadeo集团宣布收购移动商务社交应用“在这儿”
  4. bat php 监控网站,bat curl 发送http请求 监控网站
  5. [Day30] DBUtils和连接池
  6. 【HDU5299】Circles Game,圆的扫描线+树上删边游戏
  7. java编译器源码详解_已更新至第8章 | LLVM 编译框架详解
  8. 二进制空间权重矩阵_空间权重矩阵的生成方法分析与实验
  9. 线和面的方程区别_几种常见的曲面及其方程.ppt
  10. 记渣渣烟和专车司机的一次聊天
  11. 【CSDN 竞赛第四期】参赛题解(JAVA)
  12. 手机远程管理服务器文件,手机远程控制服务器文件
  13. 安装transformers库出现pyyaml卸不掉问题解决方法
  14. SpringBoot实现阿里云短信服务
  15. 中科大计算机网络空间安全,2020年中国科学技术大学网络空间安全考研经验分享...
  16. 2016计算机学科夏令营上机考试C:反反复复(字符串处理)
  17. codeforces1430E String Reversal
  18. 2021辽宁金融高考成绩查询,2021年辽宁金融职业学院高考录取结果什么时候出来及查询系统入口...
  19. php brotobuf,用Golang构建gRPC服务
  20. win11家庭版没有微软自带的虚拟机Hyper-V的解决方案

热门文章

  1. JavaScript移除数组指定元素,操作原数组
  2. 什么是Gradle?
  3. 删除鼠标右击的Open Folder as PyCharm和其他相同情况快捷键
  4. linux修改网卡名
  5. SpringBoot:MyBatis增强版:MyBatis-Plus ---- 19
  6. arm-linux-gcc编译x264
  7. 如何成为前端开发人员的10个技巧!以及前端学习路线
  8. JSON 与 BSON 区别
  9. 制造业转型的主要因素
  10. 100%纯外资公司可以办EDI许可证吗?