AVAudioPlayer在我的iPhone上播放短声音?

AVAudioPlayer在我的iPhone上播放短声音?,iphone,audio,avaudioplayer,Iphone,Audio,Avaudioplayer,我想用AVAudioPlayer播放简短的声音。。。因为我有比系统声音更多的控制 我有几个按钮,它们连接起来可以播放几种不同的短音。 每个声音文件大约1.5-2.0秒 一切正常…除了…我必须等待声音停止,然后才能按下按钮,声音将再次播放 当前,单个AVAUDIOPLAYER是在viewDidLoad上创建的。。。当按下按钮时,声音被调用播放 我试着在按下按钮时创建播放器。。。这就解决了上述问题。。。但过了一会儿,应用程序崩溃了。。。所有声音都停止工作 有什么想法吗? 谢谢 Jonathan如果A

我想用AVAudioPlayer播放简短的声音。。。因为我有比系统声音更多的控制

我有几个按钮,它们连接起来可以播放几种不同的短音。 每个声音文件大约1.5-2.0秒

一切正常…除了…我必须等待声音停止,然后才能按下按钮,声音将再次播放

当前,单个AVAUDIOPLAYER是在viewDidLoad上创建的。。。当按下按钮时,声音被调用播放

我试着在按下按钮时创建播放器。。。这就解决了上述问题。。。但过了一会儿,应用程序崩溃了。。。所有声音都停止工作

有什么想法吗? 谢谢
Jonathan

如果AVAudioPlayer停止播放声音,通常是因为创建了太多的播放器实例,通常是泄漏的。您应该确保在完成后释放一些。

您需要在播放之前将播放器的
currentTime
设置为
0
。当[
player play
]已经在播放时调用它没有效果

player.currentTime = 0;
[player play];

如果您计划使用一组简短的声音,您可能需要考虑切换到OpenAL。 这并不复杂,而且以后在更复杂的音频设置中,您将省去一些麻烦


这里有一个教程和一些有用的代码()。

创建新代码很好,但请确保您的标题声明并执行以下操作:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) completed {
    [player release];                           
}
根据mahboudz的建议,如果你的应用程序很简单,那么它将释放不再需要的任何操作的内存

这可能无法完全防止崩溃,具体取决于声音文件的大小,以及是否解除锁定场景。您可能需要添加

if (self.view.superview) { //release }
或者别的什么

这都是内存处理。您可能想复习一下指针,了解如何在任何函数中处理您的播放器对象,并且仍然可以轻松地将release放在dealoc或didfish:delegate函数中,并且知道为什么它不属于另一个函数


iPhone可以随时被中断、停止和干扰,因此你必须知道如何处理内存,以及在发生内存时如何处理。我刚刚经历了一次类似性质的碰撞,上面的一切都适用于它。如果不知道指针,NSXML委托将是一场噩梦。。。AVAudioPlayer也一样,这可能是因为您在viewDidLoad()中创建了AVAudioPlayer。我记得我也有同样的问题。只需在类内初始化它们,但不在类中初始化。希望它能起作用

编辑:
好的,我看到了日期。。。2009…

目前无法访问该链接。没错,只需搜索“iphone-programming-part-6-multiple-sounds-with-openal”并查看谷歌缓存即可。