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

創(chuàng)建一個類用來播放音樂,命名為AudioHelper簸州,具體swift代碼如下:

import UIKit
import AVFoundation

class AudioHelper: NSObject {
    //第一種方式,簡單的音頻播放
    func playSound(audioUrl: NSURL, isAlert: Bool , playFinish: ()->()) {
        // 一. 獲取 SystemSoundID
        //   參數(shù)1: 文件路徑
        //   參數(shù)2: SystemSoundID, 指針
        let urlCF = audioUrl as CFURLRef
        var systemSoundID: SystemSoundID = 0
        AudioServicesCreateSystemSoundID(urlCF, &systemSoundID)
//        AudioServicesDisposeSystemSoundID(systemSoundID)
        // 二. 開始播放
        if isAlert {
            // 3. 帶振動播放, 可以監(jiān)聽播放完成(模擬器不行)
            AudioServicesPlayAlertSound(systemSoundID)
        }else {
            // 3. 不帶振動播放, 可以監(jiān)聽播放完成
            AudioServicesPlaySystemSound(systemSoundID)
        }
        playFinish()
        
    }
    
    //第二種使用AVAudioPlayer播放
    // 獲取音頻會話
    let session = AVAudioSession.sharedInstance()
    var player: AVAudioPlayer?
    var currentURL : NSURL?
    let playFinish = "playFinsh"
    
    override init() {
        super.init()
        do{
            //  設(shè)置會話類別
            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
        }
       //如果播放的音樂與之前的一樣牡整,則繼續(xù)播放
        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
//            }
//        }
//    }
    
    // 暫停當(dāng)前歌曲/pause current music
    func pauseCurrentMusic() -> () {
        player?.pause()
    }
    
    // 繼續(xù)播放當(dāng)前歌曲/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 {
    //播放完成后的回調(diào)
    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
        print("播放完成")
        NSNotificationCenter.defaultCenter().postNotificationName(playFinish, object: nil)
        self.currentURL = nil
    }
}

然后外界調(diào)用的話是這樣的:

self.audioPlayer = AudioHelper()
self.audioPlayer.playMusic(filePath)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躬窜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炕置,更是在濱河造成了極大的恐慌荣挨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴摊,死亡現(xiàn)場離奇詭異默垄,居然都是意外死亡,警方通過查閱死者的電腦和手機仍劈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門厕倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贩疙,你說我怎么就攤上這事讹弯。” “怎么了这溅?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵组民,是天一觀的道長。 經(jīng)常有香客問我悲靴,道長臭胜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮耸三,結(jié)果婚禮上乱陡,老公的妹妹穿的比我還像新娘。我一直安慰自己仪壮,他們只是感情好憨颠,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著积锅,像睡著了一般爽彤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缚陷,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天适篙,我揣著相機與錄音,去河邊找鬼箫爷。 笑死嚷节,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝶缀。 我是一名探鬼主播丹喻,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼薄货,長吁一口氣:“原來是場噩夢啊……” “哼翁都!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谅猾,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤柄慰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后税娜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坐搔,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年敬矩,在試婚紗的時候發(fā)現(xiàn)自己被綠了概行。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡弧岳,死狀恐怖凳忙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禽炬,我是刑警寧澤涧卵,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站腹尖,受9級特大地震影響柳恐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一乐设、第九天 我趴在偏房一處隱蔽的房頂上張望讼庇。 院中可真熱鬧,春花似錦近尚、人聲如沸巫俺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介汹。三九已至,卻和暖如春舶沛,著一層夾襖步出監(jiān)牢的瞬間嘹承,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工如庭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叹卷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓坪它,卻偏偏與公主長得像骤竹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子往毡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫蒙揣、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 所謂臣服开瞭,就是要明白懒震,這宇宙所發(fā)生的一切事,都只有一個做者嗤详,那就是道个扰。我們大多的煩惱,都是庸人自擾葱色,妄圖用用卑微的...
    一禪美閱讀 281評論 0 0
  • 或許我是一名VIP(BIGBANG的粉絲稱號)递宅,雖然追星不夠熱戀與瘋狂,只是關(guān)注微博苍狰,留意動態(tài)或隔三差五看場他們瘋...
    錡巨人閱讀 852評論 7 8
  • 想起什么办龄,容易溫柔。 看到什么舞痰,容易想起土榴。 好想,把這些响牛,深深記得玷禽。
    散陽閱讀 112評論 0 0