使用多个AVAudioPlayer

import UIKit
import AVFoundation
/**
虽然可以使用多个AVAudioPlayer,但通常情况下为了保证性能应该尽可能重用AVAudioPlayer
 1.用一个数组保存了所有的AVAudioPlayer对象
 2.索取AVAudioPlayer对象时他会先去查询是否有空闲的AVAudioPlayer对象,如果找到则返回,节省资源
 3.如果没有找到,要么是相同URL(播放的相同声音),要么就是没有空闲的AVAudioPlayer对象,这时候则会NEW一个新的AVAudioPlayer,当新的AVAudioPlayer播放完毕后,我们又可以重用它了。
*/

//存放所有的AVAudioPlayer,私有,外部不可见
private var players:[AVAudioPlayer] = []

class AVAudioPlayerPool: NSObject {

    //指定声音文件URL,有空闲重用,没空闲创建AVAudioPlayer
    func playerWithURL(url:URL) -> AVAudioPlayer? {
        
        //查找一个空闲的AVAudioPlayer
        let availabelPlayers = players.filter { (player) -> Bool in
            return player.isPlaying == false && player.url == url
        }
        
        //如果找到,返回AVAudioPlayer对象
        if let playerToUse = availabelPlayers.first{
            return playerToUse
        }
        
        //没有找到,新建一个AVAudioPlayer对象
        do {
            let newPlayer = try AVAudioPlayer(contentsOf: url)
            players.append(newPlayer)
            return newPlayer
        } catch {
            print(error)
        }
        return nil
    }
}
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //使用方法
        if let url = Bundle.main.url(forResource: "test1", withExtension: "wav") {
            let player = AVAudioPlayerPool().playerWithURL(url: url)
            player?.play()
        }
    }


}

Demo-18 使用多个AVAudioPlayer

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄权浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值