【问题标题】:IOS 8: Real Time Sound Processing and Sound Pitching - OpenAL or another frameworkIOS 8:实时声音处理和音调 - OpenAL 或其他框架
【发布时间】:2015-02-17 20:44:46
【问题描述】:

我正在尝试实现一个循环播放一系列音调的应用。 实际上,我使用的是 OpenAL,我对这种框架的体验是积极的,因为我也可以发出声音。

场景如下:

  1. 从 CAF 文件中加载短声音(3 秒)
  2. 循环播放该声音并执行声音转换。

如果节拍率不太高,这很好用 - 我的意思是每音调超过 10 毫秒的时间。

无论如何,我的 NSTimer(嵌入我要播放的声音序列)应该是可配置的 - 一旦我的节拍率增加(我的意思是每个音调不到 10 毫秒),声音就不再正确回响 - 甚至一些音调以明显的随机方式丢弃。

似乎实时声音处理成为一个问题。 我仍然是 IOS 编程的新手,但我相信 Apple 对时间消耗和/或信号量设置了限制。

现在我的问题:

  1. OpenAL 是用 C 语言编写的 - 直到现在,我还不了解该框架背后的全部代码和理念。是否有可能通过一些修改来解决我上面提到的问题 - 我的意思是设置标志/值或覆盖某些方法?
  2. 如果没有,您知道另一个更适合这种实时声音处理的 IOS 声音框架吗?

提前非常感谢! 我知道它处理的是一个非常不同寻常和困难的问题——也许是这样。你们中有没有解决过类似的问题?只是强调一下:必须保证音高!

【问题讨论】:

    标签: ios xcode audio real-time openal


    【解决方案1】:

    从解释中并不能立即清楚地说明您要达到的目标。需要一些代码。

    但是,您使用NSTimer 对音频播放进行排序显然存在问题。它既不是可靠的也不是高分辨率的定时器。

    • NSTimer 通过一个运行循环队列(可能是您的应用程序的主队列)传递事件,它们以用户界面事件为内容。
    • 由于主线程不是实时线程,它甚至可能不会被调度运行一段时间。
    • 您请求的延迟可能会产生量化效果,这意味着您的活动实际上会舍入到零时钟节拍并立即安排。
    • 周期性定时器对电池寿命有不利影响。 iOS 和 MacOSX 都采取措施将其影响减少timer coalescing

    您应该用于对事件进行排序的时钟是播放采样时钟 - 在您使用的任何框架的渲染处理程序中都可以使用它。除了可靠之外,这也是高效的,因为渲染处理程序无论如何都会定期运行,并且在实时线程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2011-04-18
      相关资源
      最近更新 更多