音乐播放器单例

来源:互联网 发布:mysql存放byteImage 编辑:程序博客网 时间:2024/06/05 15:12

//

//  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) {

        [_MusiconlineArrrelease];

        _MusiconlineArr = [MusiconlineArr retain];

        

    }

    //创建计时器

  [selfkaishitimer2];

  [selfstartOrstopOnlineAction];

//    [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



0 0
原创粉丝点击