解析歌词

1.获取歌词文件

//获取歌词文件
-(void)analysisIrc{
    _timeArr=[[NSMutableArray alloc]init];
    _stringArr=[[NSMutableArray alloc]init];

    NSDictionary *dic=[self.playlistArr objectAtIndex:self.currentNum];
    NSDictionary *songInfo=[dic valueForKey:@"songinfo"];
    NSString *lrcStr=[songInfo valueForKey:@"lrclink"];
    if ([NSData dataWithContentsOfFile:[self getLocalFilePath]]) {//本地存在
        NSLog(@"本地歌词");
        self.lrcLabel.text=self.nameLabel.text;
        [self ana];
    }else{//本地不存在
   [NSURLConnection sendAsynchronousRequest:[NSMutableURLRequest requestWithURL:[NSURL URLWithString:lrcStr]] queue:[NSOperationQueue new] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
       if (data) {
           [data writeToFile:[self getLocalFilePath] atomically:YES];
           NSLog(@"歌词准备完毕");
           [self performSelectorOnMainThread:@selector(ana) withObject:nil waitUntilDone:YES];
       }

   }];
    }
}

2.解析歌词文件

-(void)ana{//获取歌词文件
    NSString *lyc = [NSString stringWithContentsOfFile:[self getLocalFilePath] encoding:NSUTF8StringEncoding error:nil];
    //   NSLog(@"歌词----%@",lyc);//每行为一个元素
    NSArray *lycArray = [lyc componentsSeparatedByString:@"\n"];
    for (int i = 0; i < [lycArray count]; i++) {

        NSString *lineString = [lycArray objectAtIndex:i];

        NSArray *lineArray = [lineString componentsSeparatedByString:@"]"];
        //行不为空,长度大于时间长度
        if ([lineArray[0] length] > 8) {

            NSString *str1 = [lineString substringWithRange:NSMakeRange(3, 1)];

            NSString *str2 = [lineString substringWithRange:NSMakeRange(6, 1)];

            if ([str1 isEqualToString:@":"] && [str2 isEqualToString:@"."]) {

                for (int i = 0; i < lineArray.count - 1; i++) {
                    //获取歌词部分
                    NSString *lrcString = [lineArray objectAtIndex:lineArray.count - 1];

                    //获取时间部分
                    NSString *timeString =[[lineArray objectAtIndex:i] substringWithRange:NSMakeRange(1, 5)];//
                    [_timeArr addObject:timeString];
                    [_stringArr addObject:lrcString];
                }
            }
        }
    }
}

3.获取歌词文件路径的函数

///*
//获取文件路径
//*/
-(NSString *)getLocalFilePath{

    NSArray *arr=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *path=[arr objectAtIndex:0];
  //  NSString *filepath=[path stringByAppendingPathComponent:_selectedPlaylistCellModel.playUrl32];
    NSDictionary *dic=[self.playlistArr objectAtIndex:self.currentNum];
    NSDictionary *songInfo=[dic valueForKey:@"songinfo"];
     NSString *filepath=[NSString stringWithFormat:@"%@/%@-%@.lrc",path,[songInfo valueForKey:@"author"],[songInfo valueForKey:@"title"]];
    NSLog(@"%@",filepath);
    return filepath;
}

4.展示歌词

 if (self.timeArr) {
            //NSLog(@"歌词存在");

            //NSLog(@"%@",lrcString);
            if ([self.timeArr containsObject:self.currentTimeLabel.text]) {
              //  NSLog(@"更新");
                int index=(int)[self.timeArr indexOfObject:self.currentTimeLabel.text];
                //内容不为空时传值
                if (![[self.stringArr objectAtIndex:index] isEqual:@""]) {
                    NSLog(@"%@",[self.stringArr objectAtIndex:index]);
                    self.lrcLabel.text=[self.stringArr objectAtIndex:index];
                }
            }
        }
时间: 2024-10-06 06:16:33

解析歌词的相关文章

linux 下 python 调用 mplayer 解析歌词同步播放显示

加载同目录同名歌词同步显示 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os, time, subprocess, re, chardet def load_lrc(lrc_file):     try:         lrc_contains = open(lrc_file, 'rb').read()         encoding = chardet.detect(lrc_contains)['encoding']     

浅谈动感歌词-歌词解析篇

1引言 要解析动感歌词文件,首先就要清楚动感歌词的文件内容,当然歌词的文件内容,我们已经在分析篇的文章里面介绍过了,这里将不再做详细的介绍,当我们可以把歌词成功解析出来后,再结合歌词生成篇,一个简单的歌词格式转换工具也就出来了. 2歌词解析 歌词解析,其实就是把文件里面的标签内容.歌词时间和歌词内容解析出来,当然,为了后期拓展其它的动感歌词格式,我们这里要好好设计一番. 2.1实体类 2.1.1歌词读取器 主要用来约束动感歌词读取器要实现的方法,可用于拓展实现其它的动感歌词格式. 2.1.2歌词

看看如何用C语言解析LRC格式的歌词(上)

嗯,本该昨晚写的,结果因为系统出了点问题,所以便拖到了今天早上.好了,不废话了. 经常听歌的,必然都见过歌词吧.当然,我们这里要说的歌词格式是以LRC为后缀的歌词.此外,还有QRC,KRC格式的歌词.但相对来说,LRC格式歌词更为常见.我们先来看看LRC格式的歌词究竟长什么样: 好了,我们该怎么解读这种格式的歌词呢?推荐看百度百科对它的介绍,在此就不废话了. 相信写过音乐播放的或者想要写音乐播放器的都会涉及到歌词文件的解析吧.自然,使用高级语言可能更为方便一些.比如,我们可以用正则匹配的方式获得

我的Android进阶之旅------&gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内容的实体类LrcRow 2解析歌词的构造器 ILrcBuilder接口 DefaultLrcBuilder歌词解析构造器 lrc歌词原始内容 lrc歌词解析后的内容 三显示LRC歌词内容 1定义一个ILrcViewListener接口 2定义一个ILrcView接口 3自定义一个LrcView 同步

歌词解析总结

前言 目前常用歌词文件有3种 LRC QRC KRC 其中LRC是最常用的歌词文件,千千静听.酷我音乐都是用LRC做歌词解析的.它的格式非常简单.解析容易但是,歌词的精度只能控制到一行. QRC是QQ音乐的歌词文件.其精度可以控制到每个字.它是无加密的. KRC是酷狗播放器专用歌词文件,它通过了压缩处理并且加密.它也能精确控制到每一个字,同时还绑定了歌曲的信息,酷狗播放器打开时能够自动下载歌曲 LRC歌词解析 开头的歌曲信息可能会有2种展现形式 [00:02.37]三十而立 [00:03.12]

OC3_歌词解析

// // LrcManager.h // OC3_歌词解析 // // Created by zhangxueming on 15/6/15. // Copyright (c) 2015年 zhangxueming. All rights reserved. // #import <Foundation/Foundation.h> #import "LrcItem.h" #define FilePath @"/Users/zhangxueming/Desktop

歌词解析

#import <Foundation/Foundation.h> @interface JYLrcItem : NSObject @property (nonatomic) float time;@property (nonatomic) NSString *lrc; - (BOOL)isBiggerTimeThan:(JYLrcItem *)aItem; @end----------------------------------------------------------------

歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例

歌词数据解析.歌词滚动.歌词进度控制功能的实现(基于js-base64.lyric-parser.better-scroll) 1.需求分析 后台歌词接口返回的数据如下(base64字符串): W3RpOua8lOWRmF0KW2FyOuiWm+S5i+iwpl0KW2FsOue7heWjq10KW2J5Ol0KW29mZnNldD owXQpbMDA6MDAuNTZd5ryU5ZGYIC0g6Jab5LmL6LCmClswMDowMi40Ml3or43vvJrolpvk uYvosKYKWzA

网页音乐播放器javascript实现,可以显示歌词

可以显示歌词,但是歌词和歌曲都要实现自己下载下来.只能播放一首歌,歌词还得是lrc格式的代码写的很罗嗦,急切希望帮改改CSS的代码?1.代码:<html >    <head>        <!--下面有很多style都是没用到的,但是我改不动了-->        <!--css觉得真是很麻烦-->        <style type="text/css">            audio            {