要在ios中實現乙個變聲技術,而且又要要求能在iphone 3g上也能執行,所以自帶的一些api就顯得比較麻煩,因此決定使用soundtouch開源庫,該庫可以實現變聲效果,包括可以調節聲音的頻率而不改變聲音的長度,大家可以使用openal試試,改變頻率之後,聲音就會變短了。
呵呵,有了這個庫,其實我們就可以山寨乙個talkingtom了,記住我不是叫大家去山寨,這裡只是談談學習的技術。還是要創新才好啊。
soundtouch是乙個開源的音訊處理庫,主要實現包含變速、變調、變速同時變調等三個 功能模組,能夠對**流實時操作,也能對音訊檔案操作。採用32位浮點或者16位定點,支援單聲道或者雙聲道,取樣率範圍為8k~48k。
過程大概如下:
官方**去找了。
因為soundtouch是乙個c++編寫的開源庫,所以要在ios中使用,就要和object-c混編了,該改字尾名的就改了吧。
下面我們要修改音訊檔案主要調整的幾個函式如下了: ?
12
3
4
5
6
7
8
9
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的例子了,但是不知道能不能上傳,好像有點兒大,如果不能上傳就到上找我吧。
最後需要注意的兩個問題:
已開始我編譯出來,聲音很奇怪也有噪音很大,還是花了很多時間來找原因,但是都無果,突然想起前面我們說過,它同時支援32位浮點和16位定點,預設時採用32位浮點的,我將其改為16位定點數的,哈哈,對了,效果很好,更改方式在sttypes.h檔案中找到float_samples巨集,注釋掉,並開啟integer_samples巨集,如下: ?
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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
另外乙個問題就是在模擬器上測試都完全無誤了,這個時候放到真機裝置上,直接報錯,退出程式,又乙個花了我不少時間的問題,最終發現,在真機上需要將聲道改變為單聲道,如下,在自己設定的時候使用: ?
1msoundtouch.setchannels(2);
//1則為單聲道
大功告成,當然了如果你要繼續了解soundtouch庫,那麼這裡(又一系列的參考資料。
speakhere.tar.gz
**:
在 iOS 中使用 iconfont
在講icon font之前,首先先來看看普通自定義字型是如何在ios中使用的,兩個原理是一樣的。這裡以kaushanscript regular為例 step 1 匯入字型檔案 將字型檔案拖入專案 ios支援的字型格式有 ttf otf,其他格式不確定 然後再在專案的資源池中確認字型檔案是否加入專案...
在iOS中使用icon font
在開發阿里資料ios版客戶端的時候,由於專案進度很緊,專案裡的所有圖示都是用最平常的背景方案來實現。而為了要相容普通屏與retina屏的裝置,蘋果要求每個背景圖都要以兩種尺寸存 閱讀器 icon font ios 在開發阿里資料ios版客戶端的時候,由於專案進度很緊,專案裡的所有圖示都是用最平常的背...
在iOS開發中使用FMDB
sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...