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

这篇文章是项目总结了。

做了段时间的项目,过程中也遇到了很多麻烦,但是好在终于都解决了,这里是这里是项目之后凭着记忆总结出来,大家有遇到同样的问题,希望能参考了,但是我记忆可能不太好了,要是实践中有什么问题可以直接给我留言,或者到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混编了,该改后缀名的就改了吧。

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

 
  1. mSoundTouch.setSampleRate(sampleRate);//设置声音的采样频率 
  2. mSoundTouch.setChannels(channels);//设置声音的声道 
  3. m_SoundTouch.setTempoChange(tempoDelta); //这个就是传说中的变速不变调 
  4. m_SoundTouch.setPitchSemiTones(pitchDelta);//设置声音的pitch 
  5. mSoundTouch.setRateChange(rateDelta);//设置声音的速率 
  6. // quick是一个bool变量,USE_QUICKSEEK具体有什么用我暂时也不太清楚。 
  7. mSoundTouch.setSetting(SETTING_USE_QUICKSEEK, quick); 
  8. // noAntiAlias是一个bool变量,USE_AA_FILTER具体有什么用我暂时也不太清楚。 
  9. 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宏,如下:

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

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

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

大功告成,当然了如果你要继续了解soundtouch库,那么这里(http://blog.csdn.net/leilu2008/article/details/6540575)又一系列的参考资料。

附件已经上传,下载之后请将zip后缀去掉,!正确的后最应该是“.tar.gz”.




本文转自 yarin 51CTO博客,原文链接:http://blog.51cto.com/yarin/640398,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Myeclipse优化配置

2019独角兽企业重金招聘Python工程师标准>>> 作为企业级开发最流行的工具&#xff0c;用Myeclipse开发java web程序无疑是最合适的&#xff0c;java web前端采用jsp来显示&#xff0c;myeclipse默认打开jsp的视图有卡顿的现象&#xff0c;那么如何更改jsp默认的打开…

Google在Android P中隐藏了真棒的按应用自动旋转功能

Historically, when you turn your phone on its side, the screen rotates. To keep this from happening, you can lock the orientation. But with Android P, Google included a way to have to the best of both worlds. 从历史上看&#xff0c;当您将手机侧放时&#xff…

2015年终总结

2019独角兽企业重金招聘Python工程师标准>>> 2015年终总结 用勇气改变可以改变的事情&#xff0c;用胸怀接受不可以改变的事情&#xff0c;然后用智慧分辨两者的不同&#xff01; 短信平台sms 影像系统fastfile 统一信任中心uts(单点登录&#xff09; 简历增加 总结…

笔记本本地连接显示电缆拔出_没有安全电缆槽的笔记本电脑如何固定?

笔记本本地连接显示电缆拔出Historically laptops included a slot in the side for attaching security cables–as seen in the photo here–but increasingly more slender laptops like ultrabooks are omitting the lock-slot from their case design. How do you properl…

JMeter中添加dubbo相关插件异常问题解决

从网上下载了一个dubbo的插件&#xff0c;然后放到JMeter的/lib/ext目录下&#xff1a; 然后启动直接异常 发现启动不了&#xff0c;然后下载了一个全新的JMeter3.2将dubbo插件放到同样的目录&#xff0c;启动&#xff0c;没有问题&#xff1a; 那应该不是JMeter本身的问题 通过…

Servlet异常

一、http status 404 解决办法&#xff1a;检查web.xml中的配置文件&#xff0c;发现jsp页面的提交路径action和web.xml中的路径不匹配&#xff0c;将其修改过来。转载于:https://www.cnblogs.com/ltfxy/p/9671256.html

disk genius_如何预约Apple Store商店或Genius Bar

disk geniusMaybe you have a cracked iPhone screen or your MacBook Pro isn’t charging properly. Whatever your issue, there’s an app for that! If you need tech support or repairs for your Apple device, it’s easy to set up a service appointment right from …

LVM逻辑卷创建管理

在虚拟机中再次添加三张硬盘 1、查看添加的硬盘 [rootrhel-02 ~]# fdisk -l 2、添加分区 [rootrhel-02 ~]# fdisk /dev/sdb 查看分区并保存 3、将物理硬盘分区初始化为物理卷&#xff0c;以便LVM使用 如果没安装LVM的话先去安装 [rootrhel-02 ~]# yum install lvm2 安装完成…

小程序如何获得手机号码_获得小型企业电话号码的最佳方法

小程序如何获得手机号码Lots of small businesses use their personal cellphones when making work related phone calls. Some may even be using old landlines for their calling needs. While it makes sense to use your cellphone, and it can be scary to make a chang…

空间数据索引RTree完全解析及Java实现

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/MongChia1993/article/details/69941783第一部分 空间数据的背景介绍 空间数据的建模 基于实体的模型&#xff08;基于对象&#xff09;Entity-based models (or object base…

android页面布局 如何让中间的listview填充剩余部分_谷歌驾驶设计—界面设计布局...

本节提供了可在不同屏幕尺寸范围内缩放的屏幕布局的设计指南。此处定义的padding和keyline值用于Components&#xff0c;Media规范、Notification Center规范和Dialer规范中。指南概览&#xff08;TL&#xff1a;DR&#xff09;&#xff1a;基于适当的屏幕尺寸类别的基本布局使…

ios 禁用滑动手势_如何禁用笔记本电脑上的Windows 8滑动手势?

ios 禁用滑动手势If you’re not a fan of the touchpad-based swipe gestures in Windows 8 there is a way to completely disable them and reclaim your touchpad. 如果您不喜欢Windows 8中基于触摸板的滑动手势&#xff0c;可以使用一种方法来完全禁用它们并收回您的触摸板…

Java快速入门-01-基础篇

Java快速入门-01-基础篇 如果基础不好或者想学的很细&#xff0c;请参看&#xff1a;菜鸟教程-JAVA本笔记适合快速学习&#xff0c;文章后面也会包含一些常见面试问题&#xff0c;记住快捷键操作&#xff0c;一些内容我就不转载了&#xff0c;直接附上链接&#xff0c;嘻嘻开发…

苹果mac闪退_自从Mac有了WPS,从此和双系统说再见!

薛岗13,712本文共计2266个字&#xff0c;预计阅读时长需要6分钟。大部分使用Macbook的用户都有一个痛点&#xff0c;就是编辑好的office文件&#xff0c;在朋友或同事的windows电脑上展示效果与自己的会有差异。除此外&#xff0c;卡顿、闪退、数据丢失等也是Windows版office在…

初学者计算机_初学者极客:如何在计算机上重新安装Windows

初学者计算机Reinstalling Windows is one of the easiest ways to fix software problems on your computer, whether it’s running slow or infected by viruses. You should also reinstall Windows before you get rid of an old PC. 重新安装Windows是修复计算机上软件问…

win7 32位 安装opencv-python后,运行时提示 from .cv2 import *: DLL load failed: 找不到指定的模块 的解决办法...

安装opencv后&#xff0c;运行一个测试程序提示"from .cv2 import *: DLL load failed: 找不到指定的模块"。于是百度一下解决办法&#xff0c;结果试了N多方法后也没能解决这个问题。 最后不得不耐心的下载了dependency walker来查看opencv到底是缺少了哪个dll文件。…

项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告

项目中的模块剥离成项目One of the great things about time-shifting your television viewing is that you are able to watch the shows you love at a time that suits you. Just because you have an appointment on Wednesday evening there’s no need to miss out on y…

gmail收件箱标签设置_通过在Gmail中启用实验室功能来启动收件箱

gmail收件箱标签设置We recently looked at how you can make it easier to manage multiple inboxes in Gmail using the Multiple Inboxes Lab feature. This is a non-standard feature and it’s far from being the only one available to you. In fact there are numerou…

【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)

洛谷P1066&#xff1a;https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k&#xff08;当w mod k0 时&#xff09;w/k1&#xff08;当 w mod k1 时&#xff09;First: 位数为2~m的种数 即从2k-1中…

cmd命令不识别exp_Cmder-超量级的Cmd

Windows命令行工具cmd缺点窗口size不能便捷缩放复制文本&#xff0c;不能直接用鼠标拷贝&#xff0c;还需要多一道菜单操作&#xff1b;而且&#xff0c;还只能块状拷贝&#xff0c;而不是按行字符&#xff0c;极其不便不支持多Tab页&#xff0c;多窗口管理不便cmd界面丑陋&…