我想使用AVAudioPlayer播放短音...因为我的控制力比系统声音更强。
我有几个按钮可以连接几种不同的短音。 每个声音文件大约1.5 - 2.0秒。
一切正常...... 除了 ...我必须等待声音停止才能按下按钮,声音会再次播放。
目前,在viewDidLoad上创建了各个AVAudioPlayers ...并且在按下按钮时调用声音
按下按钮时我尝试创建播放器...这解决了上述问题......但是一段时间后应用程序崩溃了...所有声音都停止工作。
有什么想法吗? 谢谢 乔纳森
答案 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 ...