音乐播放器单例
来源:互联网 发布: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
- 音乐播放器单例
- 播放音乐
- 播放音乐
- 音乐播放
- 播放音乐
- 音乐播放
- 播放音乐
- 播放音乐
- 音乐播放
- 播放音乐
- 播放音乐
- 音乐播放
- 音乐播放
- 音乐播放
- 音乐播放
- 音乐播放
- 播放音乐
- 音乐播放
- The Java™ Tutorials — Generics :Generic Methods and Bounded Type Parameters 泛型方法和受限类型参数
- HDU1232 畅通工程【并查集】
- MyBatis使用@MapKey注解接收多个查询记录到Map中,以便方便地用get()方法获取字段的值
- tomact
- HBase-5.提高HBase客户端的读写性能方法
- 音乐播放器单例
- LIS最长上升子序列模板
- Matlab里面的指针
- 轮播图封装
- Elasticsearch过滤与聚合的先后顺序java实现
- 仿美团外卖效果
- java类的生命周期分析
- 【quick-cocos2d-x】Lua 面向对象(OOP)编程与元表元方法
- HBase-6.hbase 协处理器