2015-02-17 154 views
0

我試圖實現一個應用程序,在循環中播放音調序列。實際上,我使用OpenAL,並且我對這樣的框架的體驗是積極的,因爲我也可以執行聲音。IOS 8:實時聲音處理和聲音投射 - OpenAL或其他框架

這裏的情景:

  1. 負載從CAF短音(3秒)文件
  2. 播放該聲音在一個循環中,也進行聲音轉變。

只要齒輪速率不是太高 - 我的意思是每個音調超過10毫秒。無論如何,我的NSTimer(嵌入我的聲音序列來播放)應該是可配置的 - 只要我的機率增加(我的意思是每個音調少於10毫秒),聲音就不會正確迴應 - 甚至有些音調以明顯的隨機方式下降。

看來,實時聲音處理成爲一個問題。 我仍然是IOS編程的新手,但我相信蘋果對時間消耗和/或信號設置了限制。

現在我的問題:

  1. OpenAL的是寫在C - 到現在爲止,我也沒整明白的代碼和理念使框架背後。有沒有可能解決我的上述問題作出一些修改 - 我的意思是設置標誌/值或覆蓋某些方法?
  2. 如果不是,你是否知道另一個IOS聲音框架更適合這種實時聲音處理?

非常感謝提前! 我知道它處理的是一個非常特殊和困難的問題 - 也許是s.o.你已經解決了類似的問題?只是要強調:音場必須得到保證!

回答

0

從解釋中不能立即清楚你想要達到的目標。預計會有一些代碼。

但是,使用NSTimer來排序音頻播放顯然是有問題的。它既不是可靠的也不是高分辨率的計時器。

  • NSTimer 0123通過運行循環隊列(可能是您的應用程序的主隊列)傳遞事件,其中它們滿足用戶界面事件的要求。
  • 由於主線程不是實時線程,因此甚至可能不會計劃運行一段時間。
  • 您可能會因爲延遲而請求量化效果,這意味着您的事件實際上輪到零時鐘滴答並立即安排。
  • 有害定時器對電池壽命有不利影響。 iOS和MacOSX上都採取措施,timer coalescing

,以減少它們的影響,你應該使用測序事件的時鐘是播放採樣時鐘 - 這是在你使用任何框架的渲染處理程序可用。除了可靠性之外,這也是有效的,因爲渲染處理程序無論如何都將定期運行,並且處於實時線程中。