1
3
对于大多数情况来说,nstimer是足够精确的,只要你不在任何线程上磨磨蹭蹭,计时器被安排在足够长的时间,使计时器迟到。您需要及时返回到运行循环,以便下次启动。幸运的是,nssound是异步播放的,所以这不应该是问题。 通常情况下,当人们把时间间隔设定得很低时(我看到的一个问题是1摄氏度)。如果你所做的事情比这个时间间隔长(并且花费超过1摄氏度真的很容易),那么你将在计时器被触发后返回到运行循环,这将使计时器延迟,这将破坏你的计时。 你只需要让你的计时器方法实现尽可能快,如果你不能使它足够快,做一个nsOperation子类来做这个工作,让你的计时器方法只是实例化这个操作,设置它,并添加到一个操作队列。(该操作将在另一个线程上运行,因此它不会占用您安排计时器运行的运行循环的线程。)如果计时器可能非常频繁,那么这是一种可能需要进行微优化(当然是由仪器和Shark引导的)的情况。 |
2
18
音乐质量音频的一般信息 这是一个需要从山顶向任何为iOS制作仪器的人呼喊的东西: 如果您使用的是MIDI,那么您将更少地处理这些问题(声音渲染器必须处理其中的大部分问题),但所有乐器都必须处理这些要求: 音乐家的期望 第一件事是使audioqueue使用的缓冲区尽可能小。iPad的默认设置是 一千零二十四 样本,这是一个痛苦的长23毫秒。当你想播放一个具有缓冲区大小的声音时,即使计算机速度极快,也需要0到23毫秒的响应时间。如果缓冲区的长度超过256个样本,您将无法用它来做很多真正的工具。在实践中,还可以在其上添加多达30毫秒的开销(从触摸响应到图形等)。
我不是在编这些东西。在解决这些问题之前,请不要在商店里摆放“乐器”。在谈论ipad/iphone应用程序时,乔丹·鲁迪斯、莱昂·格伦鲍姆、克里斯·达德利和其他专业音乐家经常提到这些问题。情况似乎有所改善,但我认为大多数开发人员不知道真正的音乐家期望的数字。 |
3
5
我怀疑您是否能够使用nstimer/nssound方法实现音频的采样精确计时。 我认为你最好的选择是直接使用核心音频。不幸的是,学习曲线有点陡峭,因为它是一个C API,没有Cocoa那么好的文档记录。 最简单的开始方法是audioqueue——它应该提供播放音频所需的所有功能,并为计时做准备。 另一种选择是使用较低级别的Augraph和音频单元-一个简单的Augraph和两个音频单元-连接到默认输出单元的音频文件播放器(或预定的SoundPlayer)也可以很好地工作。 |
Martin sku · 在目标C中打印时间 2 年前 |
Vinod prajapat · 如何更新数组的最后一个元素? 2 年前 |
subin272 · 修复iOS中的多个按钮单击事件? 6 年前 |
James Chan · 如何使用锁定/解锁? 6 年前 |
Josh F. · NSBundle mainBundle返回零 6 年前 |