音乐列表 音乐播放功能 实现思路

1.先获取列表中的音乐信息 如音乐名称 音乐图片 音乐下载的url 等基本信息在列表中展示
2.本地创建一个文件夹专门存放音乐文件,文件夹命名使用用户信息的唯一标识,先判断是否存在,不存在就创建
3.点击播放时候,先查看本地文件夹中是否有此音乐文件,有直接播放,没有根据url去下载音乐文件,下载完成后 保存本地后播放

控制器中 声明音乐播放器私有属性

  private var audioPlayer:AVAudioPlayer?

播放 和 暂停方法

//获取文件夹路径func getPath() -> String {let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!let myDirectoryPath = documentPath + "/music_\(personalId)" //personalId 用户信息唯一标识if !FileManager.default.fileExists(atPath: myDirectoryPath) { //如果文件夹不存在就去创建一个文件夹try! FileManager.default.createDirectory(atPath: myDirectoryPath, withIntermediateDirectories: true, attributes: nil)}return myDirectoryPath}//根据文件路径 播放音乐 func play(cachePath:String) {audioPlayer = try? AVAudioPlayer.init(contentsOf: URL(fileURLWithPath: cachePath))if audioPlayer != nil {audioPlayer?.volume = 1audioPlayer?.prepareToPlay()audioPlayer?.delegate = selfaudioPlayer?.play()} else {if FileManager.default.fileExists(atPath: cachePath) {try? FileManager.default.removeItem(atPath: cachePath)}// 弹框提示: 播放器初始化失败" }}//暂停播放 func stop() {if audioPlayer != nil {audioPlayer!.stop()audioPlayer = nil}}

下载音乐

func download(urlStr:String,cachePath:String,completionHandler:(()->())?) {if FileManager.default.fileExists(atPath: cachePath) {//如果本地有音乐资源 就直接播放completionHandler?()}else {//本地没有音乐资源 就下载音乐资源 下载完成后将音乐资源写入本地  然后去播放音乐Network.download(urlStr: urlStr) { data inprint(data)try? data.write(to: URL(fileURLWithPath: cachePath))if FileManager.default.fileExists(atPath: cachePath) {completionHandler?()}} failureHandler: {}}}

tableView cell中点击播放

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {if indexPath.row < dataList.count {let dic = dataList[indexPath.row]let music_url = "\(dic["music_url"] ?? "")"let music_name = "\(dic["music_name"] ?? "")"let cachePath = getPath() + "/\(music_name).mp3"download(urlStr: music_url, cachePath: cachePath) { [self] inself.play(cachePath: cachePath)//暂停其他的音乐播放for (index,dic) in dataList.enumerated() {var mDic = dicmDic["is_play"] = falsedataList[index] = mDic}//播放你点击的音乐var mDic = dicmDic["is_play"] = truedataList[indexPath.row] = mDictableView.reloadData()}}}

播放结束 代理方法

extension MusicController: AVAudioPlayerDelegate {func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {print("播放结束")//播放结束 需要刷新界面//遍历数组 都设置为播放暂停 -> 刷新}
}

End

iOS 音乐播放 Swift相关推荐

  1. iOS 音乐播放器之锁屏效果+歌词解析

    概述 功能描述:锁屏歌曲信息.控制台远程控制音乐播放:暂停/播放.上一首/下一首.快进/快退.列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果).歌词解析并随音乐 ...

  2. uniapp-微信小程序-ios音乐播放没声音

    const innerAudioContext = uni.createInnerAudioContext(); innerAudioContext.autoplay = true; innerAud ...

  3. ios音乐播放器-仿QQ音乐

    这篇文章主要写一个iOS系统下的音乐播放器 , 包括简单的仿QQ音乐播放器界面.音乐播放.歌词解析.后台控制等  ,如果你正好需要 , 希望你看完后能够对你的提升有所帮助 , 当然,阅读中如果发现什么 ...

  4. 卡拉OK效果的实现-iOS音乐播放器

    自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...

  5. 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)

    目 录 目 录 1 摘 要 3 Abstract 4 1 导论 6 1.1 背景问题 6 1.2 选题意义 6 1.3 本文内容 7 2 核心功能 9 2.1 功能调研 9 2.2 可行性分析 12 ...

  6. iOS音乐播放器的后台播放和远程控制

    iOS的后台任务一直有很严格的限制,一般情况下只有几类情况能使用后台任务,下面介绍其中的一种 音乐的后台播放. 1.要支持后台任务,首先你得告诉系统你需要后台任务,所以你首先在Info.plist文件 ...

  7. android+仿ios+音乐播放器,iOS简单的音乐播放器(仿QQ音乐)

    AVPlayer实现基本的播放,暂停,上一首,下一首,调节音量,调节进度等,正在学习的新人可以看下,有什么不足可以互相学习,谢谢支持 qq音乐.gif 这个是我写的一个简单的低仿QQ音乐, 如果你也喜 ...

  8. iOS音乐播放器小技巧

    在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...

  9. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...

    iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...

  10. iOS电商常见动画与布局、微信悬浮窗、音乐播放器、歌词解析、拖动视图等源码

    iOS精选源码 MXScroll 介绍 混合使用UIScrollView ios 电商demo(实现各种常见动画效果和页面布局) 一行代码集成微信悬浮窗 可拖动,大小的视图,可放置在屏幕边缘. 在使用 ...

最新文章

  1. faster rcnn接口_Faster R-CNN教程
  2. python实现滑动窗口平均_数据流滑动窗口平均值 · sliding window average from data stream...
  3. [C++] STACK_Principle
  4. Python 第三方模块之 numpy.random
  5. 新疆大学c语言期末考试题库,2016年新疆师范大学教育科学学院C语言程序设计考研复试题库...
  6. 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三2-转
  7. (五)ThinkPHP实践之Session驱动-TTLSA
  8. DB2数据库中用户和Schema的概念与理解
  9. 恒生O32系统的前世今生
  10. 如何判断自己的操作系统是32位还是64位?
  11. vs2017 社区版
  12. java项目打包windows服务
  13. CORBA 架构体系指南(通用对象请求代理体系架构)
  14. marvelous designer 10安装使用教程(附快捷键)
  15. [顶会举办地速查] - 深度学习顶会:CVPR、ICCV、ECCV 历年举办地点(2015~2022)
  16. 四自由度机械手c语言编程设计,stm32开发:一种四自由度机械臂的简单算法
  17. 计算机硬件与组成原理基础
  18. 工业边缘智能网关 工业自动化
  19. php将数组转换为JSON中文字符串(兼容中文)
  20. 阿里巴巴2016校园招聘 研发工程师(三)详解

热门文章

  1. 11年电赛综合测评——单运放三角波发生器
  2. Python数据分析之数据聚合与分组运算
  3. c语言编译器中cu是什么意思,.c文件调用.cu中的函数
  4. java实现单词首字母小写转大写
  5. Ubuntu使用Flux调节色温保护眼睛
  6. 计算机上自带的打字游戏,Steam这款打字游戏,让多少人想起自己曾经学校上电脑课的日子?...
  7. 四川民办高校计算机专业排名2015,2015中国民办大学最佳专业排行榜10强
  8. 赫尔期权、期货及其他衍生产品第9版课后答案
  9. PID调节原理——方法
  10. 数组取第一个元素和最后一个元素