做网站 我们的工人怎么写,缘震网络网站建设之f套餐,天津建设,wordpress 标签 图片不显示这篇文章是项目总结了。 做了段时间的项目#xff0c;过程中也遇到了很多麻烦#xff0c;但是好在终于都解决了#xff0c;这里是这里是项目之后凭着记忆总结出来#xff0c;大家有遇到同样的问题#xff0c;希望能参考了#xff0c;但是我记忆可能不太好了#xff0c;要… 这篇文章是项目总结了。 做了段时间的项目过程中也遇到了很多麻烦但是好在终于都解决了这里是这里是项目之后凭着记忆总结出来大家有遇到同样的问题希望能参考了但是我记忆可能不太好了要是实践中有什么问题可以直接给我留言或者到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中使用就要和objectc混编了该改后缀名的就改了吧。 下面我们要修改音频文件主要调整的几个函数如下了 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又一系列的参考资料。 附件已经上传下载之后请将zip后缀去掉正确的后最应该是“.tar.gz”. 本文转自 yarin 51CTO博客原文链接http://blog.51cto.com/yarin/640398如需转载请自行联系原作者