码迷,mamicode.com
首页 > 其他好文 > 详细

加载歌词代码

时间:2014-05-15 16:39:12      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:style   code   c   ext   color   int   

ios 开发

学习记录

编写音乐播放器:

获取歌词的思路 :

  • 加载歌词:

歌词加载方法:

//此方法是通过路径拿到歌词将其取出
 NSString *lrcPath(自己定义的字符串变量名) = [[NSBundle mainBundle]
                         pathForResource: 歌曲数组[索引]  ofType:@"lrc"];//歌词格式
//此方法是将歌词的格式转换成Xcode支持的格式
 NSString *contentStr = [NSString stringWithContentsOfFile:lrcPath
                                                 encoding:NSUTF8StringEncoding
                                                        error:nil];
  • 存储歌词:
//在此定义数组,将得到的歌词自字符串用"\n"分离存放到数组中
NSArray *array = [contentStr componentsSeparatedByString:@"\n"];

//这里通过循环函数将歌词的每一行读取出来(包括对应的时间)
    for (int i = 0; i < [array count]; i++) {
   //将存放到数组中的字符串赋值给linStr 
        NSString *linStr = [array objectAtIndex:i];
        //这里将每一句进行分离存放
        NSArray *lineArray = [linStr componentsSeparatedByString:@"]"];
        if ([lineArray[0] length] > 8) {
        //将符合条件的歌词和时间进行截取
            NSString *str1 = [linStr substringWithRange:NSMakeRange(3, 1)];
            NSString *str2 = [linStr substringWithRange:NSMakeRange(6, 1)];
          //这里将截取的字符串进一步判断              
         if ([str1 isEqualToString:@":"] && [str2 isEqualToString:@"."]) {
         //这里将符合条件的字符串进行分离并赋值
                NSString *lrcStr = [lineArray objectAtIndex:1];
                NSString *timeStr = [[lineArray objectAtIndex:0]
                                     substringWithRange:NSMakeRange(1, 5)];
         //最终目的将歌词和对应的时间分离然后存入定义的字典里
                //把时间和歌词加入词典
                [lrcDictionary setObject:lrcStr forKey:timeStr];
                [timeArray addObject:timeStr];
            }
        }
    }
这样做的目的是通过字典里来将歌词进行提取方便布局到TableView上显示;
  • 显示歌词:
//tabelview返回值
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section {
    //返回歌词对应的时间数组
    return [timeArray count];
}

//tableview
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {

    static NSString *lrcindetifier = @"lrcCell";
    UITableViewCell *lrcCell = [tableView dequeueReusableCellWithIdentifier:lrcindetifier];
    if (lrcCell == nil) {
        lrcCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                        reuseIdentifier:lrcindetifier];
    }
        lrcCell.selectionStyle = UITableViewCellSelectionStyleNone;
        lrcCell.backgroundColor = [UIColor clearColor];

    //判断行数与播放时间是否相同,相同就这样显示歌词
    if (indexPath.row == lrcLineNumber) {
    //这里将歌词通过字典取出并放到cell上显示
        lrcCell.textLabel.text = lrcDictionary[timeArray[indexPath.row]];
        //当前播放歌词的颜色
        lrcCell.textLabel.textColor = [UIColor purpleColor];
        //当前播放歌词的大小
        lrcCell.textLabel.font = [UIFont systemFontOfSize:13];
        lrcCell.textLabel.alpha = 1;

    }else
    {   //否则就以这种格式显示歌词
        lrcCell.textLabel.text = lrcDictionary[timeArray[indexPath.row]];
        lrcCell.textLabel.textColor = [UIColor whiteColor];
        lrcCell.textLabel.font = [UIFont systemFontOfSize:12];
        lrcCell.textLabel.alpha = 0.6;
    }

    lrcCell.textLabel.textAlignment = NSTextAlignmentCenter;
    lrcCell.textLabel.backgroundColor = [UIColor clearColor];

    return lrcCell;
}
这些代码很简单易懂,故不多做赘述
  • 动态更新:
#pragma mark - 动态更新歌词
- (void)displaySongWord:(NSUInteger)time {

    for (int i = 0; i < [timeArray count]; i++) {
        //把时间转换成秒
        NSArray *array = [timeArray[i] componentsSeparatedByString:@":"];
        NSUInteger currentTime = [array[0] intValue] * 60 + [array[1] intValue];
        if (i == [timeArray count]-1) {
            //求最后一句歌词的时间点
            NSArray *array1 = [timeArray[timeArray.count-1]
                               componentsSeparatedByString:@":"];
            NSUInteger currentTime1 = [array1[0] intValue] * 60 + [array1[1]
                                                                   intValue];
            if (time > currentTime1) {
                [self updateLrcTableView:i];
                break;
            }
        } else {
            //求出第一句的时间点,在第一句显示前的时间内一直加载第一句
            NSArray *array2 = [timeArray[0]
                               componentsSeparatedByString:@":"];
            NSUInteger currentTime2 = [array2[0] intValue] * 60 + [array2[1]
                                                                   intValue];
            if (time < currentTime2) {
                [self updateLrcTableView:0];
                break;
            }
            //求出下一步的歌词时间点,然后计算区间
            NSArray *array3 = [timeArray[i+1]
                               componentsSeparatedByString:@":"];
            NSUInteger currentTime3 = [array3[0] intValue] * 60 + [array3[1]
                                                                   intValue];
            if (time >= currentTime && time <= currentTime3) {
                [self updateLrcTableView:i];
                break;

            }
        }
    }
}

以上的代码是别人的,我已经看过,感觉不错就记录下来了,在这里向作者致敬!

加载歌词代码,布布扣,bubuko.com

加载歌词代码

标签:style   code   c   ext   color   int   

原文地址:http://www.cnblogs.com/liukunoeng/p/3726494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!