微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – 音频播放的准确(音乐级)时间

我正在尝试编写一个应用程序,可以安排一些(大多数是微小的)音频文件的定时播放.问题:它需要定时准确的音乐.声音不会经常播放(例如,它不是采样器或鼓组),但它们需要绝对精确地放置.这个问题分为两部分:

>我该如何组织时间安排?我听说NSTimer不准确,或者至少不可靠?我应该以某种方式使用MIDI吗?还是一个紧凑的循环和一些具有高分辨率的时间获取功能
>一旦我确定了时间安排,我知道何时播放我的声音……我应该怎么玩它们? NSSound是否快速可靠,足以保持所需的准确度?

解决方法

NSTimer对于大多数用途来说都是准确的,只要你没有对定时器安排的任何线程进行过多调整就足以使定时器延迟.您需要及时返回运行循环以进行下一个触发日期.幸运的是,NSSound是异步播放的,所以这应该不是问题.

通常会导致NSTimers出现问题的原因是人们将间隔设置得非常低(我看到的一个问题是1厘秒).如果你所做的事情花费的时间超过了那段时间(并且花费的时间超过1厘秒真的很​​容易),那么你应该在计时器启动后返回运行循环,这将使计时器延迟,这将搞砸你的时间.

你只需要尽可能快地实现你的计时器方法,如果你不能让它足够快,那就做一个NSOperation子类来完成这项工作,让你的计时器方法只是实例化操作,设置它,然后添加它到一个操作队列. (该操作将在另一个线程上运行,因此它不会占用您计划定时器运行循环的线程.)如果定时器可能非常频繁,那么这是微优化的一种情况(由仪器和鲨鱼,当然)可能是有保证的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐