iOS-swift-音頻播放/音樂播放

創建一個類用來播放音樂,命名為AudioHelper,具體swift代碼如下:

import UIKit
import AVFoundation

class AudioHelper: NSObject {
    //第一種方式,簡單的音頻播放
    func playSound(audioUrl: NSURL, isAlert: Bool , playFinish: ()->()) {
        // 一. 獲取 SystemSoundID
        //   參數1: 文件路徑
        //   參數2: SystemSoundID, 指針
        let urlCF = audioUrl as CFURLRef
        var systemSoundID: SystemSoundID = 0
        AudioServicesCreateSystemSoundID(urlCF, &systemSoundID)
//        AudioServicesDisposeSystemSoundID(systemSoundID)
        // 二. 開始播放
        if isAlert {
            // 3. 帶振動播放, 可以監聽播放完成(模擬器不行)
            AudioServicesPlayAlertSound(systemSoundID)
        }else {
            // 3. 不帶振動播放, 可以監聽播放完成
            AudioServicesPlaySystemSound(systemSoundID)
        }
        playFinish()
        
    }
    
    //第二種使用AVAudioPlayer播放
    // 獲取音頻會話
    let session = AVAudioSession.sharedInstance()
    var player: AVAudioPlayer?
    var currentURL : NSURL?
    let playFinish = "playFinsh"
    
    override init() {
        super.init()
        do{
            //  設置會話類別
            try session.setCategory(AVAudioSessionCategoryPlayback)
            //  激活會話
            try session.setActive(true)
        }catch {
            print(error)
            return
        }
    }
    
    //paly music
    func playMusic(filePath: String) {
        guard let url = NSURL(string: filePath) else {
            return//url不存在
        }
        do{
            //AVAudioSessionCategoryPlayback揚聲器模式
            try session.setCategory(AVAudioSessionCategoryPlayback)
        }catch {
            print(error)
            return
        }
       //如果播放的音樂與之前的一樣,則繼續播放
        if currentURL == url {
            player?.play()
            return
        }
        do {
            player = try AVAudioPlayer(data: NSFileManager.defaultManager().contentsAtPath(filePath)!)
            currentURL = url
            player?.delegate = self
            //開啟紅外感知功能
//            UIDevice.currentDevice().proximityMonitoringEnabled = true
//            NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(proxumityStateChange), name: "UIDeviceProximityStateDidChangeNotification", object: nil)
            player?.prepareToPlay()
            player?.play()
            print("播放成功,文件路徑 ==\(url)")
        }catch {
            print(error)
            return
        }
    }
    
     //配合紅外感知功能
//    func proxumityStateChange(notification:NSNotification){
//        if UIDevice.currentDevice().proximityState == true{
//            //使用聽筒模式,屏幕變暗
//            do{
//                try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
//            }catch {
//                print(error)
//                return
//            }
//        }else{
//            //使用揚聲器模式
//            do{
//                try session.setCategory(AVAudioSessionCategoryPlayback)
//            }catch {
//                print(error)
//                return
//            }
//        }
//    }
    
    // 暫停當前歌曲/pause current music
    func pauseCurrentMusic() -> () {
        player?.pause()
    }
    
    // 繼續播放當前歌曲/continue to play current music
    func resumeCurrentMusic() -> () {
        player?.play()
    }
    
    // 播放到指定時間/play music to specified time
    func seekToTime(time: NSTimeInterval) -> () {
        player?.currentTime = time
    }
    
    
    class func getFormatTime(timeInterval: NSTimeInterval) -> String {
        let min = Int(timeInterval) / 60
        let sec = Int(timeInterval) % 60
        let timeStr = String(format: "%02d:%02d", min, sec)
        return timeStr
    }
    
    class func getTimeInterval(formatTime: String) -> NSTimeInterval {
        // 00:00.89 == formatTime
        let minSec = formatTime.componentsSeparatedByString(":")
        if minSec.count == 2 {
            let min = NSTimeInterval(minSec[0]) ?? 0
            let sec = NSTimeInterval(minSec[1]) ?? 0
            return min * 60 + sec
        }
        return 0
    }
}

extension AudioHelper: AVAudioPlayerDelegate {
    //播放完成后的回調
    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
        print("播放完成")
        NSNotificationCenter.defaultCenter().postNotificationName(playFinish, object: nil)
        self.currentURL = nil
    }
}

然后外界調用的話是這樣的:

self.audioPlayer = AudioHelper()
self.audioPlayer.playMusic(filePath)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • 所謂臣服,就是要明白,這宇宙所發生的一切事,都只有一個做者,那就是道。我們大多的煩惱,都是庸人自擾,妄圖用用卑微的...
    一禪美閱讀 358評論 0 0
  • 或許我是一名VIP(BIGBANG的粉絲稱號),雖然追星不夠熱戀與瘋狂,只是關注微博,留意動態或隔三差五看場他們瘋...
    錡巨人閱讀 881評論 7 8
  • 想起什么,容易溫柔。 看到什么,容易想起。 好想,把這些,深深記得。
    散陽閱讀 193評論 0 0