iOS 音乐播放 Swift
音乐列表 音乐播放功能 实现思路
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相关推荐
- iOS 音乐播放器之锁屏效果+歌词解析
概述 功能描述:锁屏歌曲信息.控制台远程控制音乐播放:暂停/播放.上一首/下一首.快进/快退.列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果).歌词解析并随音乐 ...
- uniapp-微信小程序-ios音乐播放没声音
const innerAudioContext = uni.createInnerAudioContext(); innerAudioContext.autoplay = true; innerAud ...
- ios音乐播放器-仿QQ音乐
这篇文章主要写一个iOS系统下的音乐播放器 , 包括简单的仿QQ音乐播放器界面.音乐播放.歌词解析.后台控制等 ,如果你正好需要 , 希望你看完后能够对你的提升有所帮助 , 当然,阅读中如果发现什么 ...
- 卡拉OK效果的实现-iOS音乐播放器
自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...
- 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)
目 录 目 录 1 摘 要 3 Abstract 4 1 导论 6 1.1 背景问题 6 1.2 选题意义 6 1.3 本文内容 7 2 核心功能 9 2.1 功能调研 9 2.2 可行性分析 12 ...
- iOS音乐播放器的后台播放和远程控制
iOS的后台任务一直有很严格的限制,一般情况下只有几类情况能使用后台任务,下面介绍其中的一种 音乐的后台播放. 1.要支持后台任务,首先你得告诉系统你需要后台任务,所以你首先在Info.plist文件 ...
- android+仿ios+音乐播放器,iOS简单的音乐播放器(仿QQ音乐)
AVPlayer实现基本的播放,暂停,上一首,下一首,调节音量,调节进度等,正在学习的新人可以看下,有什么不足可以互相学习,谢谢支持 qq音乐.gif 这个是我写的一个简单的低仿QQ音乐, 如果你也喜 ...
- iOS音乐播放器小技巧
在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...
- iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...
iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...
- iOS电商常见动画与布局、微信悬浮窗、音乐播放器、歌词解析、拖动视图等源码
iOS精选源码 MXScroll 介绍 混合使用UIScrollView ios 电商demo(实现各种常见动画效果和页面布局) 一行代码集成微信悬浮窗 可拖动,大小的视图,可放置在屏幕边缘. 在使用 ...
最新文章
- faster rcnn接口_Faster R-CNN教程
- python实现滑动窗口平均_数据流滑动窗口平均值 · sliding window average from data stream...
- [C++] STACK_Principle
- Python 第三方模块之 numpy.random
- 新疆大学c语言期末考试题库,2016年新疆师范大学教育科学学院C语言程序设计考研复试题库...
- 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三2-转
- (五)ThinkPHP实践之Session驱动-TTLSA
- DB2数据库中用户和Schema的概念与理解
- 恒生O32系统的前世今生
- 如何判断自己的操作系统是32位还是64位?
- vs2017 社区版
- java项目打包windows服务
- CORBA 架构体系指南(通用对象请求代理体系架构)
- marvelous designer 10安装使用教程(附快捷键)
- [顶会举办地速查] - 深度学习顶会:CVPR、ICCV、ECCV 历年举办地点(2015~2022)
- 四自由度机械手c语言编程设计,stm32开发:一种四自由度机械臂的简单算法
- 计算机硬件与组成原理基础
- 工业边缘智能网关 工业自动化
- php将数组转换为JSON中文字符串(兼容中文)
- 阿里巴巴2016校园招聘 研发工程师(三)详解