0

我创建了一个 iOS 5/iOS 6 应用程序,该应用程序的显示屏可响应用户演奏的音高变化。它使用示例 SpeakHere 代码中的记录功能,但实际上并不保存文件,因为它旨在实时响应。

我现在想扩展这个应用程序以同时响应音高本身和相同音高的持续时间(例如,当相同音高稳定保持最短时间时改变颜色)。我一直在阅读 NSTimer 和 NSDate 函数,它们看起来很简单,还有 AudioTimeStamp 函数,它们显然是基于 C 的,我觉得很困惑。根据其他帖子,似乎 NSTimer 和 NSDate 检查可能会导致显示器对实际音乐表演的实时响应滞后。dispatchAfter 怎么样?我可以期望该块在预定时间执行吗?

我的问题是,什么方法最有可能产生允许我测量 AudioQueue 中特定音高的持续时间并实时连续更新我的显示的预期结果?我需要保存到文件中才能正常工作吗?

我是自学成才的,并且只编程了几个月,所以无论如何我都必须学习很多对我来说是新的 API/C 语言特性。我希望有人能给我指出一个富有成效的方向。谢谢!

4

1 回答 1

0

你肯定会在这里进入非常先进的东西。这里有一些想法:

  1. 您的音频处理似乎是最密集的操作。因为这个处理需要是连续的,你可能不得不在另一个线程中进行这个处理。通过处理,我的意思是检查音频以确定音高。

  2. 一旦你确定了音高,你应该存储它开始的时间。

  3. 然后,在主线程中,设置一个连续重复的 NSTimer,并在 NSTimer 的 fire 方法中,从当前日期中减去音高的开始日期以获得经过的时间,作为 NSTimeInterval。

  4. 将 NSTimeInterval 发送到您的显示逻辑,以便您可以更新屏幕上的颜色。

需要检查的一些事项:

iOS NSTimer上的多线程和 Grand Central Dispatch 初学者教程

使用 NSTimers

希望对您有所帮助!

于 2012-11-04T03:40:31.193 回答