ZLMusic模仿百度音乐应用项目源码

func stopPlayMusic() {
    if (self.isStop == true) {
        self.player.pause()
        btn .setTitle("播放", forState:UIControlState.Normal)
        //var paused = player.currentTime
        self.songImageView.layer.speed = 0.0

    }else{
        self.player.play()
        btn .setTitle("暂停", forState:UIControlState.Normal)
        self.songImageView.layer.beginTime = player.currentTime
        self.songImageView.layer.speed = 0.1
    }
    isStop = !isStop
   }
   func downloadData(path: NSString,dataHandler: (NSData)->Void){
        var url = NSURL(string: path)
        var request = NSURLRequest(URL: url)
        var mainQueue = NSOperationQueue.mainQueue()
        NSURLConnection.sendAsynchronousRequest(request, queue: mainQueue) {
            (response:NSURLResponse!, data:NSData!, error:NSError!) -> Void in
            var httpResponse = response as NSHTTPURLResponse
            if httpResponse.statusCode == 200 {
               dataHandler(data)
            }

        }

    }

    func downloadSong(path: NSString) {
        self.downloadData(path, dataHandler: { (data: NSData) -> Void in
            self.playSong(data)
        })
    }
    func downloadSongLrc(path: NSString) {
        var lrcPath = "http://ting.baidu.com\(path)"
        self.downloadData(lrcPath, dataHandler: { (data: NSData) -> Void in
            var lrc = NSString(data: data, encoding:NSUTF8StringEncoding)
            var lrcLists = lrc.componentsSeparatedByString("\n") as NSArray
            println("\(lrc)")
            println("\(lrcLists[5])")

        })
    }
    func loadSongMessage(id: Int) {

        var path = "http://music.baidu.com/data/music/fmlink?type=mp3&rate=1&format=json&songIds=\(id)"
        downloadData(path, dataHandler: { (data: NSData) -> Void in
            var array: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:nil) as NSDictionary
            var dataDic: NSDictionary = array["data"] as NSDictionary
            var list:NSArray = dataDic["songList"] as NSArray
            var songDic:NSDictionary = list[0] as NSDictionary
            self.currentSong.refreshSong(songDic)
            self.title = self.currentSong.songName
            println("\(songDic)")
            self.playImage(self.currentSong.songPicRadio)
            self.showSongInfo()
            self.downloadSong(self.currentSong.songLink)
            self.downloadSongLrc(self.currentSong.lrcLink)
        })

    }

    func playImage(path: NSString) {

        if path == "" {
            self.songImageView.backgroundColor = UIColor.cyanColor()
        }else{
            var url = NSURL(string: path)
            var data = NSData(contentsOfURL: url, options: nil, error: nil)
            var image = UIImage(data: data)
            self.songImageView.image = image
        }
        self.songImageView.contentMode = UIViewContentMode.ScaleAspectFit
        self.songImageView.layer.cornerRadius = self.songImageView.frame.width/2
        self.songImageView.layer.masksToBounds = true
        self.songImageView.userInteractionEnabled = true
        var ges = UITapGestureRecognizer(target: self, action:"tapImageView:")
        self.songImageView.addGestureRecognizer(ges)

    }
    func showSongInfo() {
        self.artistName.text = self.currentSong.artistName
        self.songName.text = self.currentSong.songName
        self.timeLabel.text = "00:00"
    }
    func loadSongList() {
        var path = "http://fm.baidu.com/dev/api/?tn=playlist&special=flash&prepend=&format=json&_=1378945264366&id="+String(channel.id)
        downloadData(path, dataHandler: { (data: NSData) -> Void in
            var dic: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:nil) as NSDictionary
            var list: NSArray = dic["list"] as NSArray
            for dict in list{
                var song = Song()
                song.id = dict["id"] as Int
                self.songList.append(song)
            }
            if self.songList.count != 0 {
                self.currentSong = self.songList[0]
                self.loadSongMessage(self.currentSong.id)
            }

       })
    }

    func doAnimation() {
        var animation = CABasicAnimation(keyPath: "transform.rotation.z")
        animation.toValue = NSNumber(double: 2.0*M_PI)
        animation.duration = 1.5
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        animation.removedOnCompletion = false
        animation.cumulative = false
        animation.repeatCount = FLT_MAX
        self.songImageView.layer.addAnimation(animation, forKey: "AnimatedKey")
        self.songImageView.layer.speed = 0.1
    }

    func tapImageView(sender:UITapGestureRecognizer){
        self.stopPlayMusic()
    }
        override func viewDidLoad() {
        super.viewDidLoad()
        //self.title = channel.title
        loadSongList()
        self.view.backgroundColor = UIColor(red: 218/255.0, green: 225/255.0, blue: 230/255.0, alpha: 1)
        println("\(channel.id)")
    }
    override func viewWillDisappear(animated: Bool) {
        timer.invalidate()
        self.songImageView.stopAnimating()
        player.stop()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

     func AudioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) {
        timer.invalidate()
        self.songImageView.layer.speed = 0
        self.songImageView.stopAnimating()
        var index = self.currentIndex + 1
        loadSongWithIndex(index)
}

这个项目是一个比较不错的ZLMusic模仿百度音乐应用,也是采用Swift开发的百度音乐电台,基本模仿了现实中的百度音乐应用功能了,支持播放功能,上首歌,下一首个,以及歌曲分类等。

项目源码下载:http://code.662p.com/view/9375.html

时间: 2024-10-06 11:59:18

ZLMusic模仿百度音乐应用项目源码的相关文章

【10.23更新】 程序员新手福利来了,Android项目源码集合,持续更新。。。

拼图游戏 使用服务:玩编程 功能分类:休闲游戏 支持平台:Android 运行环境: Android 开发语言:Java 开发工具:Eclipse 源码下载地址 :http://www.devstore.cn/code/info/259.html 拼图游戏运行界面: 仿糗事百科Android客户端源码 功能分类:社交            支持平台:Android 运行环境:Eclipse       开发语言:Java 开发工具:Eclipse        源码大小:4.62MB 源码下载地

音乐社交APP源码项目

1.关于音乐曲库,对接的是百度音乐,会自动随搜索链接百度曲库2.便捷聊天,采用xmpp基本架构.3.加入和整理了群聊天.4.分布式聊天,喜欢该专辑直接进入聊天,喜欢该音乐的进入聊天.5.采用兴趣社交和陌生社交方式6.自动创建的群聊 应用项目源码下载:http://code.662p.com/view/8290.html <ignore_js_op> <ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

Java商户管理系统 客户管理 库存管理 销售报表 SSM项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

分享封装好的异步Mysql动态的库(DyNetMysql.dll) + 项目源码

在做C++项目时,经常会用到Mysql数据库,Mysql接口提供给我们的数据是相当原始的,如:字段名.字段类型,字段长度等等,一般情况我们都想一种更方便获得数据 如: XXXStruct* pRecourdInfo = (const XXXStruct*)(mysql获得的数据指针); 直接转换字段对应的结构来,这样能大大方便我们使用 这个功能已经在我之前发表上一篇文章<<分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)>>中实现,现在是将它封装

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

先来张在路上-- 此项目是用Maven创建的,没有使用Maven的,自己百度.谷歌去:直接用Junit测试就行,先执行里面的save方法,添加10000条测试数据提供各种聚合查询等. 废话不多说,上干货-- 一.MongoDB数据库的配置(mongodb.xml) 以下是我自己的配置,红色字体请改为自己本机的东东,你说不懂设置端口,不会创建数据库名称,不会配置用户名密码,那有请查阅本系列的第4节(MongoDB的使用学习之(四)权限设置--用户名.密码.端口==),你说懒得设置,那就@#¥%--