您的位置:首页 > 其它

简单的音乐播放器

2016-02-21 16:21 295 查看


下面是代码 比较有意思的是红心的设置

(略过plist文件解析)

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *songName;
@property (weak, nonatomic) IBOutlet UILabel *singerName;

@property (weak, nonatomic) IBOutlet UIImageView *postImageView;
@property (weak, nonatomic) IBOutlet UIView *upView;
@property (weak, nonatomic) IBOutlet UIView *downView;

@property (weak, nonatomic) IBOutlet UILabel *processLabel;
@property (weak, nonatomic) IBOutlet UILabel *totalTime;
@property (weak, nonatomic) IBOutlet UISlider *prcessSlisdr;
@property (weak, nonatomic) IBOutlet UIButton *play;
@property (weak, nonatomic) IBOutlet UIButton *favor;

@end

#import "ViewController.h"
#import "ZQModel.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()<AVAudioPlayerDelegate>
{
NSMutableArray *musics;//存放歌曲信息的数组
NSString *totalTimeText;//总时长
int currentMusic;//当前播放的歌曲
BOOL isLove[100];//记录歌曲是否收藏
AVAudioPlayer *player;//播放器
NSTimer *myTimer;//定时器

}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
[self loadData];
}

//使用这个方法打开就可以播放
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self reloadData];
}

- (void)creatPlayer{

//初始化播放器
int songName=[musics[currentMusic] musicID];
NSString *path=[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%d",songName] ofType:@"mp3"];
NSURL *url=[NSURL fileURLWithPath:path];
player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
player.delegate=self;

}
//AVAudioPlayer代理方法 当音乐播放完毕调用此方法  (下一首)
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
if (currentMusic>=musics.count-1) {
currentMusic=0;
self.prcessSlisdr.value=0;
}else{
currentMusic++;
self.prcessSlisdr.value=0;
}
[self reloadData];
}

- (void)reloadData{
//每首歌对应一个player 当更换歌曲的时候们需要新建一个player
[self creatPlayer];

//设置每个视图的属性
NSString *imageName=[musics[currentMusic] musicImage];
self.postImageView.image=[UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]];
self.songName.text=[musics[currentMusic] song];
self.singerName.text=[musics[currentMusic] singer];

//这里的duration是一个TimInterval 我们需要转化成正常看到的时分秒
self.totalTime.text=[NSString  stringWithFormat:@"%d:%d:%d",(int)lround(floor(player.duration/3600.))%100,(int)lround(floor(player.duration/60.))%60,(int)lround(floor(player.duration))%60];
self.processLabel.text=[NSString stringWithFormat:@"%lf",[player currentTime]];
self.prcessSlisdr.value=player.currentTime/player.duration;

//添加定时器 使slider做改变
myTimer=[NSTimer scheduledTimerWithTimeInterval:.2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
[player play];

//切换歌曲 切换play按钮的状态
self.play.selected=YES;
//切换歌曲显示当前歌曲是否收藏
self.favor.selected=isLove[currentMusic];
}
- (void)loadData{
//解析plist文件
NSString *path=[[NSBundle mainBundle]pathForResource:@"music" ofType:@"plist"];
NSArray *array=[NSArray arrayWithContentsOfFile:path];

//千万别忘了可变数组的初始化
musics=[NSMutableArray array];
for (NSDictionary *dic in array) {
ZQModel *model=[[ZQModel alloc]init];

model.song=[dic objectForKey:@"song"];
model.singer=[dic objectForKey:@"singer"];
model.musicID=[[dic objectForKey:@"url"] intValue];
model.musicImage=[dic objectForKey:@"image"];
[musics addObject:model];
}
}
- (IBAction)backAction:(UIButton *)sender {

}

- (IBAction)favorAction:(UIButton *)sender {
//把是否收藏添加到BOOL数组中
isLove[currentMusic]=!isLove[currentMusic];
sender.selected=isLove[currentMusic];
}

- (IBAction)playAction:(UIButton *)sender {
sender.selected=!sender.selected;
if (!sender.selected) {
[player pause];
[myTimer invalidate];
myTimer=nil;
return;
}

//NSTimer没有暂停  每次停止就需要重新创建一个
myTimer=[NSTimer scheduledTimerWithTimeInterval:.2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
[player play];

}

- (void)timerAction:(NSTimer *)timer{
//让slider的value跟着时间变动
if (self.prcessSlisdr.value<1) {
self.processLabel.text=[NSString  stringWithFormat:@"%d:%d:%d",(int)lround(floor(player.currentTime/3600.))%100,(int)lround(floor(player.currentTime/60.))%60,(int)lround(floor(player.currentTime))%60];
self.prcessSlisdr.value=player.currentTime/player.duration;
}else{
//当时间到头了 关闭定时器  并消灭它
[timer invalidate];
timer=nil;
}
}

- (IBAction)lastSongAction:(UIButton *)sender {

//上一首
if (currentMusic<=0) {
currentMusic=(int)musics.count-1;
self.prcessSlisdr.value=0;
}else{
currentMusic=currentMusic-1;
self.prcessSlisdr.value=0;
}
[self reloadData];
}

- (IBAction)nextAction:(UIButton *)sender {
if (currentMusic>=musics.count-1) {
currentMusic=0;
self.prcessSlisdr.value=0;
}else{
currentMusic++;
self.prcessSlisdr.value=0;
}
[self reloadData];
}

- (IBAction)processSlider:(UISlider *)sender {

player.currentTime=sender.value*player.duration;
}

- (IBAction)hidden:(UIButton *)sender {
//点击屏幕中间  上下两个View消失
self.upView.hidden=!self.upView.hidden;
self.downView.hidden=!self.downView.hidden;
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: