
声音
|
133
讨论
AVAudioPlayer
允许反复播放音频,但却不能改变它所播放的声音文件。如果想重
用一个
AVAudioPlayer
,我们只能播放相同的文件,如果要播放不同的文件,我们
必须创建新的
AVAudioPlayer
。
也就是说,
AVAudioPlayerPool
类必须知道你要播放哪个文件。
AVAudioPlayerPool
类为我们做了这些事情:
1.
用一个数组保存了所有的
AVAudioPlayer
对象。
2.
当你向它索取一个
AVAudioPlayer
对象时,它会去数组中查找空闲的、并
且
URL
为指定的
URL
的
AVAudioPlayer
对象,如果找到,则返回这个
AVAudioPlayer
对象。
3.
如果没有找到符合条件的
AVAudoPlayer
对象(要么是相同
URL
的
AVAudioPlayer
正在播放声音,要么是根本就没有包含这个
URL
的
AVAudioPlayer
),它会创建一个新的
AVAudioPlayer
对象,用指定
URL
进
行初始化,然后将对象放入到
AVAudioPlayer
数组中。这样,当这个新的
AVAudioPlayer
对象播放完毕后,我们又可以重用它了。
4.4
两个声音间的淡入淡出
问题
如何在多个声音间进行平滑过渡?即一个淡出,另一个淡入。
解决方案
下面的方法实现了一个声音淡入淡出的效果(指定开始音量、结束音量和过渡时间):
func fade(player: AVAudioPlayer,
fromVolume startVolume : Float, ...