日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [项目总结]在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混編了,該改后綴名的就改了吧。

下面我們要修改音頻文件主要調整的幾個函數如下了:

  • 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,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的[项目总结]在ios中使用soundtouch库实现变声的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。