2012-10-08 46 views
0

由於iOS 5支持OpenAL中的混響效果,但我找不到任何使用此功能的好例子。我發現只有一些指向ObjectAL源代碼的鏈接,但是理解混響效果的用法太複雜了。 那麼,如何使用OpenAL爲iOS應用添加混響效果?在iOS中使用OpenAL的混響

回答

1

ObjectAL代碼庫變得非常複雜,但在OpenAL方面,它實際上只是C API的一個大包裝。對混響主要的Objective-C API入口點是:

https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALListener.m#L194

https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALSource.m#L808

如果你想自己實現它,首先需要綁定的擴展功能,就像我在+做ALWrapper初始化]:https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALWrapper.m#L1363

在覈心,所有的混響功能都是使用對alcASASetListener()和alcASASetSource()的調用完成的。如果你在ALWrapper中搜索這些函數,你會發現它只是將調用包裝在Objective-C中(加上一些錯誤處理),並且ALSource ALListener正在封裝它。在最底層,它只是一堆這類呼叫的:

alcASASetSource(ALC_ASA_REVERB_SEND_LEVEL, sourceID, &value, sizeof(value)); 

因此,代碼將始終遵循以下兩條路徑之一:

  • ALSource - > ALWrapper - >純粹的C調用alcASASetSource()
  • ALListener - > ALWrapper - >原ç調用alcASASetListener()

全局控制器(經由控制聽者)爲:

開/關(全局)
  • 全球混響級別(混響效果的聲音有多大)
  • 房類型(各種預設,可以如ALC_ASA_REVERB_ROOM_TYPE_Cathedral)
  • EQ增益,帶寬,頻率
    • 打開混響(基本的過濾,使用你會使用一個物理均衡器以同樣的方式 - 你大概不會用這麼多,如果有的話)

    本地控制(通過源控制)是:

    • 混響發送電平(混響過量如何影響此源)
    • 混響閉塞(模擬該聲音可以部分地橫動,像門或薄壁監聽器和源極之間的物理對象)
    • 混響梗阻(模擬監聽器和源之間的物理對象,並不會對聲音,這樣你只能聽到聲音,繞來繞去的,就像一個水泥柱子)

    我也寫了一個小演示在這裏: https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectALDemo/Demos/ReverbDemo.m

    據我所知,蘋果公司並沒有公佈太多的文檔,所以你最好的選擇是克隆回購,構建演示,玩API,直到你感覺它們是如何一起工作的。那麼這將是一個將你使用ObjectAL的東西翻譯成對alcASASetListener()和朋友的實際調用的問題,但這些應該是非常直接的翻譯,因爲它最終只是包裝代碼。

  • +0

    非常感謝!其實,我做了你寫的所有內容,但沒有發生任何事情。現在你鼓勵我向近處看。我的錯誤在於打開混響。我將ALboolean值傳遞給該函數而不是ALint:'alcASASetListener(ALC_ASA_REVERB_ON,&reverbIsOn,sizeof(reverbIsOn));' –

    +0

    @Karl對音頻社區貢獻很大。您的圖書館將在我的應用程序中有用! – manderson

    +0

    @Karl不分毛,但從技術上講,它看起來像OpenAL C調用實際上是'alcGetProcAddress()'。它看起來像'alcASASet {Source,Listener}()'然後由OpenAL在內部調用。我以爲我會指出,因爲這最初把我扔了,因爲在[OpenAL用戶規範]中沒有提到'alcASASet {Source,Listener}()'(http://open-activewrl.sourceforge.net /data/OpenAL_PGuide.pdf)。 – acannon828

    0

    以下鏈接會給你答案:Reverb with OpenAL in iOS。如果它有用,請將其標記爲答案。

    +0

    如果你仔細閱讀我的問題,你會發現我已經提到過這個鏈接。這不是很有用。 –