如何解决iphone有很多AVAudioPlayer实例可以吗?
| 对于我的小型游戏,我想在各种情况下播放效果声音。 通常,这将与用户交互有关。 我可能需要一次播放多种声音。 我打算为每种声音分配AVAudioPlayer。 我想知道有大约10到20个AVAudioPlayers的viewController很好。 (声音数据本身很小,aac小于100k) 我只是觉得在类中声明10-20个AVAudioPlayer实例似乎很奇怪。 有没有更好的方法可以做到,还是我只是想得太多?解决方法
我认为OpenAL在这种情况下是更好的选择。如果您不知道,请不要担心。这里有一个很棒的视频教程(带有源代码):http://www.71squared.com/2009/05/iphone-game-programming-tutorial-9-sound-manager/
要查找更多信息,请访问:
http://benbritten.com/2008/11/06/openal-sound-on-the-iphone/comment-page-1/
, 是的,可以有许多“ 0”实例。我不知道限制是多少,但是肯定超过十几个。
这是一些陷阱:
AVAudioPlayer
不会进行电平混合,因此,如果您的声音音量很高,它们最终可能会彼此产生相长干扰,并导致波形失真。我将最大音量设置为0.8,以尝试解决此问题,但这并不可靠。
如果尝试同时启动它们,则使用play
方法可能最终导致它们不同步启动。取而代之的是,找出一个足够使用户不会注意到的时间,但又要足够远,以使您的代码有时间退出,并有3秒钟的时间准备就绪。然后使用[player playAtTime:soon]
。
这是一些适用于我的代码。 YMMV:
-(void)play
{
BOOL success;
AVAudioPlayer *player = self.player;
player.numberOfLoops = -1;
player.currentTime = 0;
player.volume = _volume;
// NSLog(@\"deviceCurrentTime=%f\",player.deviceCurrentTime);
static double soon = 0;
if (soon < player.deviceCurrentTime) {
soon = player.deviceCurrentTime + 0.5; // why so flakey???
}
success = [player playAtTime:soon]; // too flakey for now
if (!success) {
NSLog(@\"player %@ FAILED\",player);
} else {
NSLog(@\"player %@ %@ playing at: %f\",player,[[player.url relativePath] lastPathComponent],soon);
}
}
(我不确定我的\“soon
\” var是否是线程安全的,您应该调整斜率,直到它对您有用为止…ѭ7for在某些时候对我来说太快了,所以我撞了一下至0.5
。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。