一、界面展示

二、代码结构

三、详细代码

MusicUtils

//
//  MusicUtils.swift
//  MusicDemo
//
//  Created by iscopy on 2022/2/16.
//import Foundation
//音频框架
import AVFoundationclass MusicUtils: NSObject {fileprivate static var player : AVAudioPlayer?
}// MARK: - 对歌曲的控制
extension MusicUtils: AVAudioPlayerDelegate{/// 播放本地音乐class func playLocationMusic(_ musicName : String){//获取资源的URLguard let url = Bundle.main.url(forResource: musicName, withExtension: nil) else { return }//判断和暂停/停止的对象是否同一首歌曲(继续播放的时候不会切歌)if player?.url == url{player?.play()return}//根据URL创建AVAudioPlayer对象guard let audioPlayer = try? AVAudioPlayer(contentsOf: url) else { return }self.player = audioPlayer//播放音乐audioPlayer.play()}/// 播放网络音乐class func playNetworkMusic(_ urlString : String){//获取资源的URLguard let url = URL.init(string: urlString) else { return }//判断和暂停/停止的对象是否同一首歌曲(继续播放的时候不会切歌)if player?.url == url{player?.play()return}guard let urlData = try? Data(contentsOf: url) else { return }//根据URL创建AVAudioPlayer对象guard let audioPlayer = try? AVAudioPlayer(data: urlData) else { return }self.player = audioPlayer//播放音乐audioPlayer.play()}class func pauseMusic() {player?.pause()}class func stopMusic(){player?.stop()player?.currentTime = 0}
}// MARK: - 对其他的控制(音量/时间/代理设置)
extension MusicUtils{class func changeVolume(volume : Float){player?.volume = volume}class func setCurrentTime(_ currentTime : TimeInterval) {player?.currentTime = currentTime}class func getCurrentTime() -> TimeInterval{return player?.currentTime ?? 0}class func getDuration() -> TimeInterval{return player?.duration ?? 0}class func setPlayerDelegate(_ delegate : AVAudioPlayerDelegate){player?.delegate = delegate}}

ViewController

//
//  ViewController.swift
//  MusicDemo
//
//  Created by iscopy on 2022/2/15.
//import UIKit//首先导入音频框架
import AVFoundationclass ViewController: UIViewController {//MARK: - 名称@IBOutlet weak var tvMusicName: UILabel!//MARK: - 开始@IBAction func btnStart(_ sender: Any) {tvMusicName.text = self.music[self.postion]print("\(self.postion) \(self.music[self.postion])")//调用本地音乐播放MusicUtils.playLocationMusic(self.music[self.postion])}//MARK: - 暂停@IBAction func btnSuspend(_ sender: Any) {MusicUtils.pauseMusic()}//MARK: - 上一曲@IBAction func btnLastSong(_ sender: Any) {if self.postion == 0{self.postion = self.music.count-1}else{self.postion = self.postion-1}tvMusicName.text = self.music[self.postion]print("\(self.postion) \(self.music[self.postion])")MusicUtils.playLocationMusic(self.music[self.postion])}//MARK: - 下一曲@IBAction func btnNextSong(_ sender: Any) {if self.postion == self.music.count-1{self.postion = 0}else{self.postion = self.postion+1}tvMusicName.text = self.music[self.postion]print("\(self.postion) \(self.music[self.postion])")MusicUtils.playLocationMusic(self.music[self.postion])}var postion:Int = 0var music:Array = [String]()//MARK: - viewDidLoadoverride func viewDidLoad() {super.viewDidLoad()music.append("等什么君 - 岁月神偷(翻自 金玟岐).mp3")music.append("多多poi - 02的爱恋(Feat.约谈人参)(翻自 约谈人参).mp3")music.append("排骨教主 - 牵丝戏.mp3")}}

注:网络音乐播放请调用 playNetworkMusic 方法,这里只是调用了本地播放

GitHub - iscopy/MusicDemo: swift 本地音乐播放

Swift 音乐播放demo相关推荐

  1. swift 音乐播放器项目-《lxy的杰伦情歌》开发实战演练

    近期准备将项目转化为OC与swift混合开发.试着写一个swift音乐播放器的demo,体会到了swift相对OC的优势所在.废话不多说.先上效果图: ps:身为杰伦的铁粉.demo的主题必须跟杰伦有 ...

  2. Swift版音乐播放器(简化版),swift音乐播放器

    这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...

  3. 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...

    用于工作需求接触了公告通知标题内容的无缝向上滚动功能以及使用简单的wang富文本编辑器配置简单的音乐插件demo. 在写之前要先引入相应的js,jquery: 首先是通知标题的无缝向上滚动,这个网上很 ...

  4. swift 音乐播放单例

    遇到需要播放闹钟,警告铃的需求时,需要封装一个播放音乐的单例,以下是单例代码: // // AlertSoundPlayer.swift // Sleep // // Created by haita ...

  5. 【前端】h5音乐播放demo 可关闭可播放

    复制如下代码,直接可预览(记得把超链接换成自己本地路径) <!DOCTYPE html> <html> <head> <meta charset=" ...

  6. Swift 3 :基于 AVAudioPlayer 的简单音乐播放器

    2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 学习ios以来差不多接近两个月了,作为一个刚入行的菜鸡终于鼓起勇气写博客并发布出来,本周课程讲到了ios多媒 ...

  7. iOS开发,一个使用AVPlayer实现的播放在线音乐的Demo

    前言 最近两天公司暂时没有任务安排,闲着无聊便搞了一个在线音乐播放器(Demo).说实话现在做音乐的开放API没有多少,基本都是爬虫的,GitHub上面有一些别人爬虫下来的某些大型音乐网站的API,我 ...

  8. swift版QQ音乐播放器(二)

    一 完善部分的QQ音乐效果图 二 需要完善点 1 歌曲的切换和暂停播放 2 歌曲当前播放时间和歌曲总时间的更新 3 进度条的处理 4 歌手头像处理 5 头像动画效果 6 歌词的进度显示 8 完善细节 ...

  9. 【Android-Service】基于MVP的音乐播放器demo实现思路(附源码)

    最近在学习service相关的内容,在该部分的学习过程中,根据学习视频中的内容进行了总结归纳,以下是音乐播放器demo的开发思路,具体步骤及源码: 有关MVP框架的内容可看: link. 实现效果: ...

  10. Swift 第三方 播放器AliyunPlayer,音乐(阿里云播放器)(源码)

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

最新文章

  1. python 基础 1.2--pycharm 的安装及使用
  2. 三个管脚的压电陶瓷片
  3. 2021-09-26
  4. android dpi
  5. 秀!Pandas 也能爬虫!
  6. 2019蓝桥杯省赛---java---A---8(修改数组)
  7. React开发(263):react中处理时间的判断
  8. 洛谷 P2689 东南西北【模拟/搜索】
  9. android提示程序正在执行,Android中获取正在运行的进程(一)
  10. ubuntu的两种网络连接模式
  11. Archlinux in VirtualBox
  12. Android之哭笑不得的BUG--xml设置的padding不起作用,幕后黑手竟然是?
  13. Running Hero.
  14. [渝粤教育] 西南科技大学 成本会计 在线考试复习资料(1)
  15. 宏病毒的研究与实例分析04——实战分析
  16. ecshop 添加手机号码验证唯一性(手机版)
  17. 一个月黑风高的夜晚紧急完成gitlab服务器数据迁移
  18. 逻辑思维能力测试题归纳总结之计算题
  19. 旧金山大学 计算机,旧金山大学(University of San Francisco)
  20. Material Design(1)

热门文章

  1. 联想Yoga C930 NM-B741 EYG70 Ariel-SVT笔记本点位图TVW
  2. ssr提示服务器名无效_联想服务器在UEFI HII界面中配置阵列的基本操作
  3. EAS BOS 介绍
  4. PMP和PRINCE2到底有什么区别?哪个含金量更高?
  5. 使用python生成正弦光栅的代码示例,包括竖直光栅,水平光栅,圆光栅
  6. 8.10.3 熊猫分布密度制图
  7. .log 合并或 .txt 合并
  8. STKO助力OpenSEES系列:结构模态分析以及动力特性(MDOF与等效SDOF验证)
  9. matlab归一化mapminmax警告,matlab函数mapminmax归一化的问题
  10. lottie动画效果使用简例