由於iOS 5支持OpenAL中的混響效果,但我找不到任何使用此功能的好例子。我發現只有一些指向ObjectAL源代碼的鏈接,但是理解混響效果的用法太複雜了。 那麼,如何使用OpenAL爲iOS應用添加混響效果?在iOS中使用OpenAL的混響
0
A
回答
1
ObjectAL代碼庫變得非常複雜,但在OpenAL方面,它實際上只是C API的一個大包裝。對混響主要的Objective-C API入口點是:
如果你想自己實現它,首先需要綁定的擴展功能,就像我在+做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()
全局控制器(經由控制聽者)爲:
開/關(全局)- 打開混響(基本的過濾,使用你會使用一個物理均衡器以同樣的方式 - 你大概不會用這麼多,如果有的話)
本地控制(通過源控制)是:
- 混響發送電平(混響過量如何影響此源)
- 混響閉塞(模擬該聲音可以部分地橫動,像門或薄壁監聽器和源極之間的物理對象)
- 混響梗阻(模擬監聽器和源之間的物理對象,並不會對聲音,這樣你只能聽到聲音,繞來繞去的,就像一個水泥柱子)
我也寫了一個小演示在這裏: https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectALDemo/Demos/ReverbDemo.m
據我所知,蘋果公司並沒有公佈太多的文檔,所以你最好的選擇是克隆回購,構建演示,玩API,直到你感覺它們是如何一起工作的。那麼這將是一個將你使用ObjectAL的東西翻譯成對alcASASetListener()和朋友的實際調用的問題,但這些應該是非常直接的翻譯,因爲它最終只是包裝代碼。
0
相關問題
- 1. 在iOS上使用OpenAL的混響
- 2. 使用OpenAl混合聲音
- 3. 使用OpenAL在iOS上捕獲聲音
- 4. iPhone OpenAL的影響
- 5. 在iOS中使用立體聲源的混響
- 6. 在OpenAL(iOS)中設置平移
- 7. IOS/OpenAL的聲音干擾
- 8. IOS OpenAL和無聲開關
- 9. 如何在.NET Core中使用OpenAL?
- 10. 使用OpenAL在iOS上進行離線音頻錄製
- 11. 在iOS中使用openAL預先播放音頻文件的好方法
- 12. alutCreateBufferHelloWorld()中的OpenAL
- 13. 使用IOS 3D混合器
- 14. 使用OpenAL播放MPMediaItem
- 15. 使用OpenAL播放聲音
- 16. 使用OpenAL錄製音頻
- 17. 在Android上使用OpenAL錄製音頻
- 18. iOS OpenAL聲音不是位置
- 19. 如何在iPhone上強制OpenAL混合單聲道
- 20. iOS 6中的法蘭/回聲/混響效果
- 21. 使用AVFoundation在iOS中混音不起作用
- 22. 使用iOS混合模式的Android圖像和顏色混合
- 23. 使用sendSynchronousRequest獲取http響應代碼在ios中使用sendSynchronousRequest
- 24. iOS中的強弱混淆
- 25. 適用於Windows,Mac和iOS的音頻庫? OpenAL/OpenSL
- 26. 如何將OpenAL的音頻與iPod音樂混合?
- 27. OpenAL的聲音庫/擴展(在iOS上運行)?
- 28. UITableViewCell中的UIButton無法在iOS 5x中響應,但在iOS中響應6
- 29. Android OpenAL?
- 30. 在Cocoa中加載OpenAL的.wav文件
非常感謝!其實,我做了你寫的所有內容,但沒有發生任何事情。現在你鼓勵我向近處看。我的錯誤在於打開混響。我將ALboolean值傳遞給該函數而不是ALint:'alcASASetListener(ALC_ASA_REVERB_ON,&reverbIsOn,sizeof(reverbIsOn));' –
@Karl對音頻社區貢獻很大。您的圖書館將在我的應用程序中有用! – manderson
@Karl不分毛,但從技術上講,它看起來像OpenAL C調用實際上是'alcGetProcAddress()'。它看起來像'alcASASet {Source,Listener}()'然後由OpenAL在內部調用。我以爲我會指出,因爲這最初把我扔了,因爲在[OpenAL用戶規範]中沒有提到'alcASASet {Source,Listener}()'(http://open-activewrl.sourceforge.net /data/OpenAL_PGuide.pdf)。 – acannon828