AVAudioPlayer在我的iPhone上播放短音?

时间:2009-07-27 05:41:48

标签: iphone audio avaudioplayer

我想使用AVAudioPlayer播放短音...因为我的控制力比系统声音更强。

我有几个按钮可以连接几种不同的短音。 每个声音文件大约1.5 - 2.0秒。

一切正常...... 除了 ...我必须等待声音停止才能按下按钮,声音会再次播放。

目前,在viewDidLoad上创建了各个AVAudioPlayers ...并且在按下按钮时调用声音

按下按钮时我尝试创建播放器...这解决了上述问题......但是一段时间后应用程序崩溃了...所有声音都停止工作。

有什么想法吗? 谢谢 乔纳森

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您需要在播放前将播放器的currentTime设置为0。在已经播放时调用[player play]无效。

player.currentTime = 0;
[player play];

答案 2 :(得分:0)

如果您计划使用一小段短音,您可能需要考虑切换到OpenAL。 它不会复杂得多,以后你会在更复杂的音频设置中省去一些麻烦。

有一个教程和一些有用的代码 here archived here)。

答案 3 :(得分:0)

创建新的很好,但请确保您的标头声明并执行此操作:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) completed {
    [player release];                           
}

如果您的应用程序很简单,那么将根据mahboudz的建议释放不再需要的任何内容。

这可能无法完全防止崩溃,具体取决于您的声音文件大小,以及是否取消分配场景。您可能想要添加

if (self.view.superview) { //release }

或其他什么。

这是所有内存处理。您可能想要了解指针以了解如何处理您的播放器对象,字面意思是在任何函数中,并且仍然觉得将释放放在dealloc或didFinish:delegate函数中,并且知道它为什么不属于另一个。

iPhone可以随时中断,停止和搞乱,因此您必须知道如何处理内存以及如何处理内存。我刚刚遇到类似性质的崩溃,以及上面应用的所有内容。在不知道指针的情况下,NSXML委托将是一场噩梦......对于AVAudioPlayer来说是相同的

答案 4 :(得分:0)

这可能是因为您已经在viewDidLoad()内部创建了AVAudioPlayers。我记得我有同样的问题。只需在类中初始化它们即可,而不是在那里。希望它能起作用!

编辑: 好的,我看到了约会... 2009 ...