//
// MusicTool.h
// SunshineMusic
//
// Created by dllo on 16/1/11.
// Copyright © 2016年 G.Group. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <STKAudioPlayer.h>
@class Music;
@interface MusicTool : NSObject
@property (nonatomic, retain)STKAudioPlayer *player;
@property (nonatomic, retain)NSMutableArray *MusiconlineArr;
@property (nonatomic, retain)NSMutableArray *MusicLocaltionArr;
@property (nonatomic, assign)NSInteger musicArrNumber;
@property (nonatomic, retain)NSURL *url;
/**
* 设置播放格式(循环/ 顺序/ 随机/ 单曲)目前只写了循环和顺序(用bool就可以) ,以后可以用枚举
*/
@property (nonatomic, assign)BOOL TEMP;
/**
* 本地播放当前播放
*/
@property (nonatomic, retain)Music *currentmusic;
/**
* 计时器,显示歌曲时间信息
*/
@property (nonatomic, retain)NSTimer *timer;
@property (nonatomic, retain)NSTimer *timerOnline;
@property (nonatomic, copy)NSString *timelabel;
@property (nonatomic, copy)NSString *timelabel2;
@property (nonatomic, assign)NSInteger timenum1;
@property (nonatomic, assign)CGFloat slider;
+(instancetype)shareMusicTool;
// 本地播放(数组)
// 初始化本地数据
- (void)beforeplaylocaltion;
// 播放本地音乐
//上一首
- (void)upAction;
//播放/暂停
- (void)startOrstopAction;
//下一首
- (void)downAction;
// 本地播放(单个)
- (void)playSingersongStrname:(NSString *)strname Strtype:(NSString *)strtype;
// 网络播放(数组)
//上一首
- (void)upOnlineAction;
//播放/暂停
- (void)startOrstopOnlineAction;
//下一首
- (void)downOnlineAction;
//网络播放()
- (void)playSingerOnlinesongStrUrl:(NSString *)strname Strnum:(NSInteger )strnum Arr:(NSMutableArray *)urlarr;
@end
//
// MusicTool.m
// SunshineMusic
//
// Created by dllo on 16/1/11.
// Copyright © 2016年 G.Group. All rights reserved.
#import "MusicTool.h"
#import <STKAudioPlayer.h>
@implementation MusicTool
- (void)setMusiconlineArr:(NSMutableArray *)MusiconlineArr
{
if (_MusiconlineArr != MusiconlineArr) {
[_MusiconlineArr release];
_MusiconlineArr = [MusiconlineArr retain];
}
//创建计时器
[self kaishitimer2];
[self startOrstopOnlineAction];
// [self beforeplayOnline];
}
- (void)setMusicLocaltionArr:(NSMutableArray *)MusicLocaltionArr
{
if (_MusicLocaltionArr != MusicLocaltionArr) {
[_MusicLocaltionArr release];
_MusicLocaltionArr = [MusicLocaltionArr retain];
}
//创建计时器
[self kaishitimer];
}
+(instancetype)shareMusicTool
{
static MusicTool *musicTool = nil;
if (nil == musicTool) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
musicTool = [[MusicTool alloc]init];
[musicTool createTool];
});
}
return musicTool;
}
- (void)kaishitimer
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeAct) userInfo:nil repeats:YES];
}
- (void)kaishitimer2
{
self.timerOnline = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeActonline) userInfo:nil repeats:YES];
}
- (void)createTool
{
STKAudioPlayerOptions playerOption = {YES, YES,{50, 100, 200, 400, 800, 1600, 2600, 16000}};
self.player = [[STKAudioPlayer alloc]initWithOptions:playerOption];
//再建一个单例记录 当前在哪个界面上,通过这个值创建不同的计时器方法
// self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeAct) userInfo:nil repeats:YES];
}
- (void)beforeplaylocaltion
{
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"later"] ) {
NSMutableArray *arr = [NSMutableArray array];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"later"];
}
NSString *str = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *str1 = [str stringByAppendingPathComponent:@"music"];
NSString *str2 = [str1 stringByAppendingPathComponent:[self.MusicLocaltionArr objectAtIndex:self.musicArrNumber]];
NSURL *url = [NSURL fileURLWithPath:str2];
if ([self.MusicLocaltionArr objectAtIndex:self.musicArrNumber] != NULL) {
NSArray *arr = [[NSUserDefaults standardUserDefaults] objectForKey:@"later"];
NSMutableArray *arr1 = [NSMutableArray array];
[arr1 addObjectsFromArray:arr];
[arr1 addObject:[self.MusicLocaltionArr objectAtIndex:self.musicArrNumber]];
[[NSUserDefaults standardUserDefaults] setObject:arr1 forKey:@"later"];
}
self.url = url;
[self startOrstopAction];
}
- (void)upAction
{
if (self.musicArrNumber == 0) {
self.musicArrNumber = self.MusicLocaltionArr.count;
}
self.musicArrNumber--;
NSLog(@"up%ld", self.musicArrNumber);
[self updataPlayerSetting];
}
- (void)timeAct
{
if ((NSInteger)self.player.progress % 60 < 10) {
self.timelabel = [NSString stringWithFormat:@"%ld:0%ld",(NSInteger)self.player.progress / 60 , (NSInteger)self.player.progress % 60];
} else {
self.timelabel = [NSString stringWithFormat:@"%ld:%ld",(NSInteger)self.player.progress / 60, (NSInteger)self.player.progress % 60];
}
if ((NSInteger)self.player.duration % 60 < 10) {
self.timelabel2 = [NSString stringWithFormat:@"%ld:0%ld",(NSInteger)self.player.duration / 60 , (NSInteger)self.player.duration % 60];
} else {
self.timelabel2 = [NSString stringWithFormat:@"%ld:%ld",(NSInteger)self.player.duration / 60 , (NSInteger)self.player.duration % 60];
}
self.slider = self.player.progress/self.player.duration; // 如果播放完,调用自动播放下一首
if (self.slider > 0.999) {
[self autoplay];
}
}
- (void)autoplay
{
if (self.TEMP == YES) {
if (self.musicArrNumber == self.MusicLocaltionArr.count - 1) {
self.musicArrNumber = 0;
}
self.musicArrNumber ++;
//更新播放器控制
[self updataPlayerSetting];
} else {
if (self.musicArrNumber == self.MusicLocaltionArr.count - 1 ) {
[self.player resume];
[self.timer invalidate];
return;
}
self.musicArrNumber ++;
//更新播放器控制
[self updataPlayerSetting];
}
}
// 更新播放器设置
- (void)updataPlayerSetting
{
NSString *str = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *str1 = [str stringByAppendingPathComponent:@"music"];
NSString *str2 = [str1 stringByAppendingPathComponent:[self.MusicLocaltionArr objectAtIndex:self.musicArrNumber]];
NSLog(@"updata%ld", self.musicArrNumber);
NSURL *url = [NSURL fileURLWithPath:str2];
self.url = url;
[self startOrstopAction];
}
- (void)startOrstopAction
{
if (self.url == NULL) {
[self updataPlayerSetting];
}
[self.player playURL:self.url];
[self kaishitimer];
}
- (void)downAction
{
if (self.musicArrNumber == self.MusicLocaltionArr.count - 1) {
self.musicArrNumber = -1;
}
self.musicArrNumber ++;
NSLog(@"down%ld", self.musicArrNumber);
[self updataPlayerSetting];
}
- (void)playSingersongStrname:(NSString *)strname Strtype:(NSString *)strtype
{
NSString *str = [[NSBundle mainBundle]pathForResource:strname ofType:strtype];
self.url = [NSURL fileURLWithPath:str];
[self startOrstopAction];
/**
* 若想实现自动播放可以在数组中便利,找到自己的位置,给self.musicArrNumber 一个值(同时也可以实现上一首,下一首)
*
* @return
*/
}
//****************************网络音乐**********************
- (void)upOnlineAction
{
if (self.musicArrNumber == 0) {
self.musicArrNumber = self.MusiconlineArr.count;
}
self.musicArrNumber--;
NSLog(@"up%ld", self.musicArrNumber);
[self updataOnlinePlayerSetting];
}
- (void)timeActonline
{
if ((NSInteger)self.player.progress % 60 < 10) {
self.timelabel = [NSString stringWithFormat:@"%ld:0%ld",(NSInteger)self.player.progress / 60 , (NSInteger)self.player.progress % 60];
} else {
self.timelabel = [NSString stringWithFormat:@"%ld:%ld",(NSInteger)self.player.progress / 60, (NSInteger)self.player.progress % 60];
}
if ((NSInteger)self.player.duration % 60 < 10) {
self.timelabel2 = [NSString stringWithFormat:@"%ld:0%ld",(NSInteger)self.player.duration / 60 , (NSInteger)self.player.duration % 60];
} else {
self.timelabel2 = [NSString stringWithFormat:@"%ld:%ld",(NSInteger)self.player.duration / 60 , (NSInteger)self.player.duration % 60];
}
self.slider = self.player.progress/self.player.duration;
// 如果播放完,调用自动播放下一首
if (self.slider > 0.999) {
[self autoplayOnline];
}
}
- (void)autoplayOnline
{
//
if (self.TEMP == YES) {
if (self.musicArrNumber == self.MusiconlineArr.count - 1) {
self.musicArrNumber = - 1;
}
self.musicArrNumber ++;
//更新播放器控制
[self updataOnlinePlayerSetting];
} else {
if (self.musicArrNumber == self.MusiconlineArr.count - 1 ) {
[self.player resume];
[self.timer invalidate];
return;
}
self.musicArrNumber ++;
// 更新播放器控制
[self updataOnlinePlayerSetting];
}
}
- (void)updataOnlinePlayerSetting
{
//更新播放器按钮状态
// self.button2.selected = YES;
// self.play = YES;
//更新曲目
NSURL *url = [NSURL URLWithString:[self.MusiconlineArr objectAtIndex:self.musicArrNumber]];
NSLog(@"auto%ld",self.musicArrNumber);
// [self.player playURL:url];
self.url = url;
self.currentmusic = [self.MusicLocaltionArr objectAtIndex:self.musicArrNumber];
[self startOrstopOnlineAction];
//更新音量
//重新载入歌词词典
}
- (void)startOrstopOnlineAction
{
// if (STKAudioPlayerStatePlaying == self.player.state) {
// //暂停
// [self.player pause];
// } else {
// // 播放
[self.player playURL:self.url];
[self kaishitimer2];
// self.timerOnline = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeActonline) userInfo:nil repeats:YES];
// }
}
- (void)downOnlineAction
{
if (self.musicArrNumber == self.MusiconlineArr.count - 1) {
self.musicArrNumber = -1;
}
self.musicArrNumber ++;
NSLog(@"down%ld",self.musicArrNumber);
[self updataOnlinePlayerSetting];
}
- (void)playSingerOnlinesongStrUrl:(NSString *)strname Strnum:(NSInteger )strnum Arr:(NSMutableArray *)urlarr;
{
self.url = [NSURL URLWithString:strname];
[self startOrstopOnlineAction];
/**
* 若想实现自动播放可以在数组中便利,找到自己的位置,给self.musicArrNumber 一个值(同时也可以实现上一首,下一首)
*
* @return
*/
}
#pragma mark 摇一摇 换歌
- (void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion == UIEventSubtypeMotionShake) {
if (self.musicArrNumber == self.MusicLocaltionArr.count - 1) {
self.musicArrNumber = -1;
}
self.musicArrNumber ++;
[self updataOnlinePlayerSetting];
}
}
@end