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:@"\n"];
        
        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;
  }

這里我只處理里標准格式的歌詞,其它格式也可用類似方法處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM