[項目總結]在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.pswp.cn/news/279346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Myeclipse優化配置

2019獨角獸企業重金招聘Python工程師標準>>> 作為企業級開發最流行的工具&#xff0c;用Myeclipse開發java web程序無疑是最合適的&#xff0c;java web前端采用jsp來顯示&#xff0c;myeclipse默認打開jsp的視圖有卡頓的現象&#xff0c;那么如何更改jsp默認的打開…

Java多線程之靜態代理

1 package org.study2.javabase.ThreadsDemo.staticproxy;2 3 /**4 * Date:2018-09-18 靜態代理 設計模式5 * 1、真實角色6 * 2、代理角色&#xff1a;持有真實角色的引用7 * 3、二者實現相同的接口8 * 舉例說明&#xff1a;Couple類和Company類都實現了Marry&#xff0c;…

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…

python 位置參數、默認參數、可變參數位置關系_python的位置參數、默認參數、關鍵字參數、可變參數區別...

一、位置參數調用函數時根據函數定義的參數位置來傳遞參數#!/usr/bin/env python#codingutf-8defprint_hello(name, sex):sex_dict {1: u先生, 2: u女士}print hello %s %s, welcome to python world! %(name, sex_dict.get(sex, u先生))#兩個參數的順序必須一一對應&#xff0…

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本身的問題 通過…

向量空間余弦相似度

設向量a和向量b 則a?b|a||b|cos,|a|和|b|分別為兩向量的模 cos即為兩向量的余弦值&#xff0c;所以cosa?b/|a||b| 距離和相似性度量: http://blog.sina.com.cn/s/blog_6045a9da01011nk7.html 轉載于:https://www.cnblogs.com/lsai/p/3715948.html

linux提升文件夾權限命令_Linux常用命令_(文件權限)

Linux權限管理&#xff1a;二、權限管理1、3種基本權限在Linux中&#xff0c;將使用系統資源的人員分為4類&#xff1a;超級用戶、文件或目錄的屬主、屬主的同組人和其他人員。超級用戶擁有對Linux系統一切操作權限&#xff0c;對 于其他3類用戶都要指定對文件和目錄的訪問權限…

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 …

[置頂] C#中通過調用webService獲取上網IP地址的區域的方法

最近在開發項目的過程中需要獲取用戶查詢時的IP地址的區域&#xff0c;以用來做統計分析用。經過一番查閱資料&#xff0c;然后寫了個測試程序&#xff0c;很快就搞定了這個功能。 現在分享下我的實現方法&#xff0c;大家如果有更好的實現&#xff0c;歡迎提出哦。 首先我找到…

hashmap 存取原理圖_HashMap底層實現原理

HashMap底層原理總結&#xff0c;幾個Hash集合之間的對比。HashMap底層存儲結構HashMap是一個用于存儲Key-Value鍵值對的集合&#xff0c;每一個鍵值對也叫做一個Entry。這些Entry分散存儲在一個數組當中&#xff0c;這個數組就是HashMap的主干。1234567* The table, initializ…

LVM邏輯卷創建管理

在虛擬機中再次添加三張硬盤 1、查看添加的硬盤 [rootrhel-02 ~]# fdisk -l 2、添加分區 [rootrhel-02 ~]# fdisk /dev/sdb 查看分區并保存 3、將物理硬盤分區初始化為物理卷&#xff0c;以便LVM使用 如果沒安裝LVM的話先去安裝 [rootrhel-02 ~]# yum install lvm2 安裝完成…

Start DWM manually on Windows 7 and vista

方法一&#xff1a; 1. 檢查兩處注冊表項及鍵值是否與下列數值一致 HKEY-Current-User\Software\Microsoft\Windows\DWM\Composition 鍵值改為 1 HKEY-Current-User\Software\Microsoft\Windows\DWM\CompositionPolicy 鍵值改為2 2. 打開運行&#xff08;可能要用到管理員模式啟…

java啟動mysq服務_Java Web開發——MySQL數據庫的安裝與配置

MySQL是一個關系型數據庫管理系統&#xff0c;由瑞典MySQL AB 公司開發&#xff0c;目前屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一&#xff0c;在 WEB 應用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;關系…

小程序如何獲得手機號碼_獲得小型企業電話號碼的最佳方法

小程序如何獲得手機號碼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 中的ORM框架

在android 中&#xff0c;內置了sqlite數據庫&#xff0c;java web 中&#xff0c;用慣了Hibernate &#xff0c;想找找android中是否也有類似的orm框架&#xff0c;后來在開源中國看到了orman&#xff0c;這是一個很不錯的框架。 這個可以幫我們快捷方便的實現數據庫的CURD操作…

android頁面布局 如何讓中間的listview填充剩余部分_谷歌駕駛設計—界面設計布局...

本節提供了可在不同屏幕尺寸范圍內縮放的屏幕布局的設計指南。此處定義的padding和keyline值用于Components&#xff0c;Media規范、Notification Center規范和Dialer規范中。指南概覽&#xff08;TL&#xff1a;DR&#xff09;&#xff1a;基于適當的屏幕尺寸類別的基本布局使…