1

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

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

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

目前,各个 AVAudioPlayers 是在 viewDidLoad ...上创建的,并且在按下按钮时会调用声音来播放

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

有任何想法吗?谢谢乔纳森

4

5 回答 5

0

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

player.currentTime = 0;
[player play];
于 2010-07-15T15:46:42.707 回答
0

如果您打算使用大量短音,您可能需要考虑切换到 OpenAL。这并不复杂,以后您将在更复杂的音频设置中省去一些麻烦。

这里有一个教程和一些有用的代码(存档在这里

于 2010-10-25T15:09:40.937 回答
0

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

于 2009-11-18T08:44:45.837 回答
0

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

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

如果您的应用程序很简单,那么根据 mahboudz 的建议,这将释放不再需要的任何已完成操作的内存。

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

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

或者其他的东西。

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

iPhone随时可能被打断、停止、乱七八糟,所以你必须知道如何处理内存,以及当它发生时如何处理。我刚刚经历了一次类似性质的崩溃,上面的一切都适用于它。在不知道指针的情况下,NSXML 代表将是一场噩梦......对于 AVAudioPlayer

于 2011-12-11T12:24:13.403 回答
0

这可能是因为您在 viewDidLoad() 中创建了 AVAudioPlayers。我记得我有同样的问题。只需在类中初始化它们,但不在类中。希望它有效!

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

于 2019-10-15T23:36:21.023 回答