2015-02-17 109 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

,以减少它们的影响,你应该使用测序事件的时钟是播放采样时钟 - 这是在你使用任何框架的渲染处理程序可用。除了可靠性之外,这也是有效的,因为渲染处理程序无论如何都将定期运行,并且处于实时线程中。