Swift 3.0播放音乐

写了一个小程序,用swift3.0播放音乐,废话不多说,直接上源码吧

import UIKit
import AVFoundation

class AudioTool: NSObject {
    // MARK:- 音效
    /// 音效文件字典
    static var soundIDs = [String: Any]()
    
    /// 通过不同的音效文件名播放不同的音效
    ///
    /// - Parameter fileName: 音效文件名
    static func playSound(fileName: String) {
        // 1.通过音效文件名为key到字典中获取对应soundID
        var soundID = soundIDs[fileName] as? SystemSoundID ?? 0
        
        // 2.判断soundID是否有值,如果没有值则创建,之后保存到字典中
        if soundID == 0 {
            // 生成soundID
            // 参数1: 音效文件的URL
            // 参数2: 通过参数1生成的soundID
            guard let url = Bundle.main.url(forResource: fileName, withExtension: nil) else { return }
            AudioServicesCreateSystemSoundID(url as CFURL, &soundID)
            
            // 保存到字典中
            soundIDs[fileName] = soundID
        }
        
        // 3.播放音效
        // 播放的时候伴随着手机震动效果
        AudioServicesPlayAlertSound(soundID)
        // 没有震动效果
        //        AudioServicesPlaySystemSound(soundID)
    }
    
    // MARK:- 音乐
    /// 播放器字典
    static var players = [String : Any]()
    /// 播放音乐
    ///
    /// - Parameter file: 音乐文件名
    static func playMusic(filename: String) {
        
        // 1.从字典中通过音乐文件名作为key取出对应的播放器
        var player = players[filename] as? AVAudioPlayer
        
        // 2.判断播放器是否为nil,如果为nil那么,通过音乐文件名创建播放器,保存到字典中
        if player == nil {
            // 1.创建音乐的URL
            guard let url = Bundle.main.url(forResource: filename, withExtension: nil) else { return }
            
            // 2.创建播放器
            do {
                player = try AVAudioPlayer(contentsOf: url)
                
                // 准备播放
                player?.prepareToPlay()
                
                // 将播放器保存到字典中
                players[filename] = player
                
            } catch {
                print(error)
                return
            }
            
        }
        
        // 3.播放音乐
        player?.play()
    }
    
    /// 暂停播放音乐
    ///
    /// - Parameter file: 音乐文件名
    static func pauseMusic(filename: String) {
        // 1.从字典中通过音乐文件名作为key取出对应的播放器
        let player = players[filename] as? AVAudioPlayer
        
        // 2.暂停播放音乐
        player?.pause()
    }
    
    /// 停止播放音乐
    ///
    /// - Parameter file: 音乐文件名
    static func stopMusic(filename: String) {
        
        // 1.从字典中通过音乐文件名作为key取出对应的播放器
        var player = players[filename] as? AVAudioPlayer
        
        // 2.停止播放音乐
        player?.stop()
        player = nil
        
        // 3.从字典中移除
        players.removeValue(forKey: filename)
    }


}

有不懂可以提问哦,也欢迎大牛提升哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,313评论 4 61
  • 从小就非常喜欢看各种小说,尤其是玄幻类型的,遇到自己喜欢的,也会一章一章追着看。以前还用着按键手机的时候,都是下载...
    铁面君阅读 3,008评论 1 0
  • 导读目录 同步代码块 同步方法 释放同步监视器的锁定(仔细看) 同步锁(Lock) Lock和synchroniz...
    ql2012jz阅读 1,670评论 0 0