重用AVAudioPlayer以获得不同的声音

cfi*_*her 8 cocoa-touch objective-c avaudioplayer

我有一个AVAudioPlayer实例,可以播放几种声音.有没有办法为AVAudioPlayer实例提供新的声音,或者我是否必须使用initWithData创建一个新实例:?

Chr*_*lay 21

没有API可以将新文件传递给现有的AVAudioPlayer实例.但是,创建AVAudioPlayer并不昂贵,因此只要在完成实例后释放实例,就不应该关注性能.

如果您有一组固定的声音可以互相播放,或者可能重复播放,您可以为每个声音创建一个AVAudioPlayer实例,并通过调用play相应的实例重新使用这些实例.

如果一次只播放一个声音,并且您正在生成新声音(例如基于用户输入的文本到语音),我通常会将一个播放器作为属性.播放新声音时,我会调用[player stop],释放旧播放器,并使用新声音文件实例化新播放器.

  • 是的,我在Google上搜索了这个问题,因为我认为制作大量新的AVAudioPlayer会导致性能下降.你的答案立即解决了我的问题.1)无法修改AVAudioPlayer中的文件2)创建AVAudioPlayer并不昂贵. (2认同)

zou*_*oul 0

重用对象通常是一个坏主意,通常会尝试让对象的寿命尽可能短。这减少了代码可能状态的数量,并使推理变得更容易。(\xe2\x80\x9c 这个值从哪里来?也许它\xe2\x80\x99 是以前实例使用的剩余部分?\xe2\x80\x9d 恶心。)只有在遇到可测量的问题时才打破此规则。

\n\n

为了进一步阅读这个思路,您可以浏览标记为 \xe2\x80\x9cimmutable\xe2\x80\x9d 的问题。

\n

  • 这不是@Fernando 问题的答案,而是一种过度概括。在许多情况下,对象重用是比创建新对象更好的方法。 (18认同)