我想找出一些东西 -
每次我使用AVAudioPlayer时,我都需要初始化一个新的AVAudioPlayer对象。
我在视图上有10个 Sentence 对象,我希望为每个Sentence对象添加一个“PlaySentence”方法,这样当用户点击Sentence时,app会播放一个声音文件。
我在很多视图上都需要这种行为,所以我想把这个方法添加到对象类中,这样我就可以简单地调用 -
[Sentence playSound];
由于每次我希望使用它时,AVAudioPlayer 以任何方式初始化,我无法理解为什么这应该是更昂贵的操作。
我是对的/它是否适合这种需求以及为什么?
由于
沙尼
答案 0 :(得分:1)
因此,如果我理解正确,您希望Sentence
对象使用playSound
方法设置AVAudioPlayer
并播放声音。
你绝对可以这样做,但请注意,如果你有很多Sentence
个对象,那么你最终会创建很多AVAudioPlayer
个对象。但是你可以通过在文件播放完毕后释放它来阻止高水位线过高。
你可以这样做的另一种方法是让Sentence
上的方法返回要播放的文件的URL,然后在你想要播放的视图控制器中只有一个AVAudioPlayer
实例声音并每次为正确的文件设置它。这将是我个人建议的做法。
答案 1 :(得分:0)
我认为最好的解决方案是使用Cocos2D库中的SimpleAudioEngine。
易于使用和集成。据我所知,它使用OpenAL和AVAudioPlayer。它有简单的界面来控制背景音乐,效果和mp3,wav,m4a和其他格式和编解码器。
使用它很容易:
// it's better to preload all effects during app start so they will play immediately when you call "playEffect" method
[[SimpleAudioEngine sharedEngine] preloadEffect:@"sentence.m4a"];
...
// play effect where you need it
[[SimpleAudioEngine sharedEngine] playEffect:soundName];