我有一个AVAudioPlayer实例,将播放多个声音。是否有一种方法可以为AVAudioPlayer实例提供一个新的声音,或者我必须使用initWithData:创建一个新的实例?
我有一個AVAudioPlayer实例,要播放幾個聲音。有沒有一種方法可以為AVAudioPlayer實例提供新聲音,還是我必須使用initWithData:創建一個新實例?
我有一个AVAudioPlayer实例,将播放多个声音。是否有一种方法可以为AVAudioPlayer实例提供一个新的声音,或者我必须使用initWithData:创建一个新的实例?
我有一個AVAudioPlayer实例,要播放幾個聲音。有沒有一種方法可以為AVAudioPlayer實例提供新聲音,還是我必須使用initWithData:創建一個新實例?
没有API可以向现有的AVAudioPlayer实例传递新文件。但是,AVAudioPlayer的创建并不昂贵,只要在使用完毕后释放实例,就不必担心性能问题。
如果您有一组固定的声音,这些声音会相互播放或可能重复播放,则可以为每个声音创建一个AVAudioPlayer实例,并通过在适当的实例上调用play
来重复使用这些实例。
如果一次只播放一个声音,并且您正在生成新声音(例如基于用户输入的文本到语音),我通常将一个单独的播放器作为属性。当播放新声音时,我调用[player stop]
,释放旧播放器,并使用新声音文件实例化一个新的播放器。
重复使用对象通常不是一个好主意,通常尽可能让您的对象的生存期尽可能短。这将减少代码可能状态的数量,并使其更容易理解。(“这个值来自哪里?也许它是前一个实例使用的剩余物?” 令人厌恶。)只有遇到可衡量的问题时才违反此规则。
如需进一步阅读与此思路相同的内容,您可以浏览 标记为“immutable”的问题。