zoukankan      html  css  js  c++  java
  • IOS 解析歌词lrc

    最近在捣鼓音乐播放器,过程中学到了一些东西,写下来分享一下,首先是歌词的解析

    首先我们看看lrc(不贴维基了怕打不开

    歌词文件一般是这样的格式

    1.[分钟:秒.毫秒] 歌词

    2. [分钟:秒] 歌词

    3. [分钟:秒:毫秒] 歌词

    其中1是标准格式,下面我就一种为例。

    思路是先获取整个歌词内容,再按换行分段,对每一行中的内容,分为两部分,时间和内容,分别提取。

         -(void)parselyric
       {
          NSString *path = [[NSBundle mainBundle]pathForResource:_lab_title.text ofType:@"lrc"];
        
          //if lyric file exits
          if ([path length]) {
            
            //get the lyric string
            NSString *lyc = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
            
            //init
            _musictime = [[NSMutableArray alloc]init];
            _lyrics = [[NSMutableArray alloc]init];
            _t = [[NSMutableArray alloc]init];
            
            NSArray *arr = [lyc componentsSeparatedByString:@"
    "];
            
            for (NSString *item in arr) {
                
                //if item is not empty
                if ([item length]) {
                    
                    NSRange startrange = [item rangeOfString:@"["];
                    NSLog(@"%d%d",startrange.length,startrange.location);
                    NSRange stoprange = [item rangeOfString:@"]"];
                    
                    NSString *content = [item substringWithRange:NSMakeRange(startrange.location+1, stoprange.location-startrange.location-1)];
                    
                    NSLog(@"%d",[item length]);
                    
                    //the music time format is mm.ss.xx such as 00:03.84
                    if ([content length] == 8) {
                        NSString *minute = [content substringWithRange:NSMakeRange(0, 2)];
                        NSString *second = [content substringWithRange:NSMakeRange(3, 2)];
                        NSString *mm = [content substringWithRange:NSMakeRange(6, 2)];
                        
                        NSString *time = [NSString stringWithFormat:@"%@:%@.%@",minute,second,mm];
                        NSNumber *total =[NSNumber numberWithInteger:[minute integerValue] * 60 + [second integerValue]];
                        [_t addObject:total];
                        
                        NSString *lyric = [item substringFromIndex:10];
                        
                        [_musictime addObject:time];
                        [_lyrics addObject:lyric];
                    }
                }
            }
        }
        else
            _lyrics = nil;
      }
    

    这里我只处理里标准格式的歌词,其它格式也可用类似方法处理。

  • 相关阅读:
    请求重定向,请求转发
    post、get方法乱码问题
    Servlet
    修改Servlet模板,让Servlet更清新
    Java-Python对垒之质数计算
    使用Packet Tracer对不同网段组网模拟
    哑编码的两种方法
    AdaBoost scikit-learn相关参数
    KNN scikit-learn相关参数
    递归思想的应用-根据二叉树的中序遍历和前序遍历重建二叉树
  • 原文地址:https://www.cnblogs.com/myqiqiang/p/3969954.html
Copyright © 2011-2022 走看看