清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#import "ZJViewController.h" #import "ZjMusic.h" @interface ZJViewController ()<AVAudioPlayerDelegate,UITabBarDelegate,UITableViewDataSource> @end #define kBtnHeight 50 #define kBtnWidth 60 @implementation ZJViewController - (void)viewDidLoad { [super viewDidLoad]; [self initView]; [self initData]; // NSLog(@"%@",self.lrcDict); } -(void)initData { ZjMusic *music1 = [[ZjMusic alloc] initWithName:@"Right Here Waiting(此情可待)" andType:@"mp3"]; ZjMusic *music2 = [[ZjMusic alloc] initWithName:@"Beyond-真的爱你" andType:@"mp3"]; ZjMusic *music3 = [[ZjMusic alloc] initWithName:@"刘德华-爱你一万年" andType:@"mp3"]; ZjMusic *music4 = [[ZjMusic alloc] initWithName:@"毛宁-涛声依旧" andType:@"mp3"]; ZjMusic *music5 = [[ZjMusic alloc] initWithName:@"你是我的眼" andType:@"mp3"]; ZjMusic *music6 = [[ZjMusic alloc] initWithName:@"星星" andType:@"mp3"]; ZjMusic *music7 = [[ZjMusic alloc] initWithName:@"月光爱人" andType:@"mp3"]; self.musicData = [[NSMutableArray alloc] init]; [self.musicData addObject:music1]; [self.musicData addObject:music2]; [self.musicData addObject:music3]; [self.musicData addObject:music4]; [self.musicData addObject:music5]; [self.musicData addObject:music6]; [self.musicData addObject:music7]; [self loadMusic:music5]; [self initLrc:music5]; self.musicNameLabel.text = music5.name; } #pragma mark 加载Music -(void)loadMusic:(ZjMusic*)music { NSString *path = [[NSBundle mainBundle] pathForResource:music.name ofType:music.type]; NSURL *URL = [NSURL fileURLWithPath:path]; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:nil]; self.audioPlayer.delegate = self; self.audioPlayer.volume = 0.5; self.volumeSlider.value = self.audioPlayer.volume; [self.audioPlayer prepareToPlay]; [self returnTotalTime]; } #pragma mark 音量slider自动移动,currentTime自动变换 -(void)currentTimeChange { [self returnCurrentTime]; self.durationlSlider.value = self.audioPlayer.currentTime/self.audioPlayer.duration; NSLog(@"curtime ---->%d",(int)self.audioPlayer.currentTime); // static int index = 0; NSString *key = [NSString stringWithFormat:@"%d",(int)self.audioPlayer.currentTime]; NSString *lrc = [self.lrcDict objectForKey:key]; if(lrc){ // NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; // [self.lrcTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle]; // index++; self.musicLrcLable.text = lrc; NSLog(@"index--->%@",lrc); } } #pragma mark 上一首 -(void)previousSound { BOOL playFlag; if(self.audioPlayer.playing){ playFlag = YES; [self.audioPlayer stop]; }else{ playFlag = NO; } _soundIndex --; if(self.soundIndex<0){ self.soundIndex = self.musicData.count-1; } ZjMusic *music = self.musicData[_soundIndex]; [self initLrc:music]; self.musicNameLabel.text = music.name; [self loadMusic:music]; if(playFlag){ [self.audioPlayer play]; } } #pragma mark 下一曲 -(void)nextSound { BOOL playFlag; if(self.audioPlayer.playing){ playFlag = YES; [self.audioPlayer stop]; }else{ playFlag = NO; } _soundIndex ++; if(self.soundIndex>self.musicData.count-1){ self.soundIndex = 0; } ZjMusic *music = self.musicData[_soundIndex]; [self initLrc:music]; self.musicNameLabel.text = music.name; [self loadMusic:music]; if(playFlag){ [self.audioPlayer play]; } } #pragma mark 音量显示 -(void)showVolumeSlider { if(self.volumeSlider.hidden == NO){ self.volumeSlider.hidden = YES; }else{ self.volumeSlider.hidden = NO; } [self performSelector:@selector(hiddenVolum) withObject:nil afterDelay:5]; } #pragma mark 音量隐藏 -(void)hiddenVolum { self.volumeSlider.hidden = YES; } #pragma mark 播放暂停 -(void)palyAndPause:(UIButton*)button { NSString *imageName = @"play"; if(self.audioPlayer.playing){ [self.audioPlayer pause]; imageName = @"play"; [self.timer invalidate]; }else{ [self.audioPlayer play]; imageName = @"stop"; self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(currentTimeChange) userInfo:nil repeats:YES]; } [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; [self returnTotalTime]; } -(void)returnTotalTime { NSString *totalTime = [NSString stringWithFormat:@"%d:%d",(int)self.audioPlayer.duration/60,(int)self.audioPlayer.duration%60]; self.totalTime.text = totalTime; } #pragma mark 调节音量 -(void)volumeChange { self.audioPlayer.volume = self.volumeSlider.value; [self returnCurrentTime]; } -(void)returnCurrentTime { NSString *currentTime = [NSString stringWithFormat:@"%d:%d",(int)self.audioPlayer.currentTime/60,(int)self.audioPlayer.currentTime%60]; if((int)self.audioPlayer.currentTime%60<10){ currentTime = [NSString stringWithFormat:@"%d:0%d",(int)self.audioPlayer.currentTime/60,(int)self.audioPlayer.currentTime%60]; } self.currentTimeLabel.text = currentTime; } #pragma mark 调节时间 -(void)durationChange { self.audioPlayer.currentTime = self.durationlSlider.value*self.audioPlayer.duration; } - (void)dealloc { [_audioPlayer release]; [_durationlSlider release]; [_volumeSlider release]; [_musicData release]; [_currentTimeLabel release]; [_musicNameLabel release]; [_totalTime release]; [_lrcDict release]; [_timeArray release]; [_lrcTableView release]; [super dealloc]; } #pragma mark 初始化数据 -(void)initView { //当前时间 self.currentTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 35, 40, 20)]; self.currentTimeLabel.text = @"0:00"; self.currentTimeLabel.backgroundColor = [UIColor clearColor]; [self.view addSubview:self.currentTimeLabel]; //持续时间 self.durationlSlider = [[UISlider alloc] initWithFrame:CGRectMake(65, 30, 190, 30)]; [self.durationlSlider addTarget:self action:@selector(durationChange) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:self.durationlSlider]; //总时间 self.totalTime = [[UILabel alloc] initWithFrame:CGRectMake(265, 35, 40, 20)]; self.totalTime.text = @"0:00"; self.totalTime.backgroundColor = [UIColor clearColor]; [self.view addSubview:self.totalTime]; UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(50, 250, 220, 60)]; [self.view addSubview:subView]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; //上一曲 button.frame = CGRectMake(0, 0, kBtnWidth, kBtnHeight); [button setImage:[UIImage imageNamed:@"left"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(previousSound) forControlEvents:UIControlEventTouchUpInside]; [subView addSubview:button]; //播放暂停 button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(80, 0, kBtnWidth, kBtnHeight); [button setImage:[UIImage imageNamed:@"play"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(palyAndPause:) forControlEvents:UIControlEventTouchUpInside]; [subView addSubview:button]; //下一曲 button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(160, 0, kBtnWidth, kBtnHeight); [button addTarget:self action:@selector(nextSound) forControlEvents:UIControlEventTouchUpInside]; [button setImage:[UIImage imageNamed:@"right"] forState:UIControlStateNormal]; [subView addSubview:button]; //显示歌ci self.musicLrcLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 400, 320, 44)]; self.musicLrcLable.textAlignment = NSTextAlignmentCenter; self.musicLrcLable.backgroundColor = [UIColor greenColor]; [self.view addSubview:self.musicLrcLable]; //显示歌名 self.musicNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 40)]; self.musicNameLabel.backgroundColor = [UIColor clearColor]; self.musicNameLabel.textAlignment = NSTextAlignmentCenter; [self.view addSubview:self.musicNameLabel]; //音量 button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(10, 390, kBtnWidth, kBtnHeight); [button addTarget:self action:@selector(showVolumeSlider) forControlEvents:UIControlEventTouchUpInside]; [button setImage:[UIImage imageNamed:@"labalan"] forState:UIControlStateNormal]; [button setImage:[UIImage imageNamed:@"laba"] forState:UIControlStateHighlighted]; [self.view addSubview:button]; self.volumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(-80, 280, 220, 5)]; self.volumeSlider.minimumValue = 0; self.volumeSlider.maximumValue = 1; self.volumeSlider.hidden = YES; self.volumeSlider.transform = CGAffineTransformMakeRotation(-95* M_PI/180); [self.view addSubview:self.volumeSlider]; [self.volumeSlider addTarget:self action:@selector(volumeChange) forControlEvents:UIControlEventValueChanged]; } -(void) initLrc:(ZjMusic*)music { NSLog(@"%@ ,%@",music.name,music.type); self.timeArray = [[NSMutableArray alloc] init]; self.lrcDict = [[NSMutableDictionary alloc] init]; NSString *lrcPath = [[NSBundle mainBundle] pathForResource:music.name ofType:@"lrc"]; NSString *contentStr = [NSString stringWithContentsOfFile:lrcPath encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [contentStr componentsSeparatedByString:@"\n"]; for (int i= 0; i<array.count; i ++) { NSString *lineStr = array[i]; NSArray *lineArray = [lineStr componentsSeparatedByString:@"]"]; NSString *lrcStr = [lineArray objectAtIndex:1]; if([lineArray[0] length]>5){ NSString *timeStr = [lineArray[0] substringWithRange:NSMakeRange(1, 5)]; NSArray *timeArray = [timeStr componentsSeparatedByString:@":"]; NSInteger timeInt = [timeArray[0] intValue]*60 + [timeArray[1] intValue]; NSString *timeTostr = [NSString stringWithFormat:@"%d",timeInt]; [self.lrcDict setObject:lrcStr forKey:timeTostr]; [self.timeArray addObject:timeTostr]; } } // NSLog(@"%d",self.timeArray.count); } @end