LRC歌词文件读取代码
/**************************************************/
/*******************-main文件-***********************/
/**************************************************/
#import <Foundation/Foundation.h>
#import "lrcContent.h"
#import "lrcManager.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
lrcManager *lrcM=[[lrcManager alloc] init];
[lrcM showLrc];
}
return 0;
}
/**************************************************/
/***************-lrcManager.h文件-********************/
/**************************************************/
#import <Foundation/Foundation.h>
#import "lrcContent.h"
#define PATH @"/Users/paul/Desktop/legend.txt"
@interface lrcManager : NSObject
@property NSArray *lrcArray; //存放每行的歌词
-(BOOL)isMessage:(NSString *)lineContent; //判断是否是歌词的其他信息,如歌手名,作词,作曲
-(NSMutableArray *)getLrcFileContent:(NSString *)path; //读取歌词文件内容
-(lrcContent *)polishLrc:(NSMutableArray *)lineArr; //处理单行歌词
-(lrcContent *)sortLrc:(lrcContent *)lrcContent; //对歌词进行排序(根据歌词前的时间)
-(void)showLrc; //显示歌词内容
@end
/**************************************************/
/***************-lrcManager.m文件-********************/
/**************************************************/
#import "lrcManager.h"
@implementation lrcManager
-(id)init
{
if(self=[super init])
{
_lrcC=[[lrcContent alloc] init];
_lrcArray=[[NSArray alloc] init];
_lrcC.lrc=[[NSMutableArray alloc] init];
_lrcC.message=[[NSMutableArray alloc] init];
_lrcC.content=@"";
_lrcC.time=0.0;
}
return self;
}
-(BOOL)isMessage:(NSString *)lineContent
{
int flag=0;
if([lineContent intValue])
{
flag=1;
}
return flag;
}
-(NSMutableArray *)getLrcFileContent:(NSString *)path
{
//将单句歌词分割放入动态数组
NSString *fileContent=[[NSString alloc] initWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil];
NSArray *arrFileContent=[fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
NSMutableArray *mArrFileContent=[[NSMutableArray alloc] initWithArray:arrFileContent];
[mArrFileContent removeObject:@""];
return mArrFileContent;
}
-(lrcContent *)polishLrc:(NSString *)lineStr
{
NSArray *arrLine=[lineStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[:]"]];
NSMutableArray *mArrLine=[[NSMutableArray alloc] initWithArray:arrLine];
[mArrLine removeObject:@""];
if(![self isMessage:[mArrLine objectAtIndex:1]])
{
//歌曲信息
[_lrcC.message addObject:[mArrLine objectAtIndex:1]];
}
else
{
//歌词
if([[mArrLine lastObject] intValue]==0)
{
for(int i=0;i<[mArrLine count]-1;i+=2)
{
NSString *s=[[NSString alloc] initWithFormat:@"%f",([[mArrLine objectAtIndex:i] floatValue]*60+[[mArrLine objectAtIndex:i+1] floatValue])];
[_lrcC.lrc addObject:s];
[_lrcC.lrc addObject:[mArrLine lastObject]];
}
}
}
return _lrcC;
}
-(lrcContent *)sortLrc:(lrcContent *)lrcContent
{
NSMutableArray *mArr=[[NSMutableArray alloc] initWithArray:lrcContent.lrc];
for(int i=0;i<[mArr count]-2;i+=2)
{
for(int j=i+2;j<[mArr count];j+=2)
{
if(([[mArr objectAtIndex:j] floatValue])<([[mArr objectAtIndex:i] floatValue]))
{
[mArr exchangeObjectAtIndex:i withObjectAtIndex:j];
[mArr exchangeObjectAtIndex:i+1 withObjectAtIndex:j+1];
}
}
}
lrcContent.lrc=mArr;
return lrcContent;
}
-(void)showLrc
{
lrcManager *lrcM=[[lrcManager alloc] init];
for (int i=0; i<[[self getLrcFileContent:PATH] count]; i++)
{
_lrcC=[lrcM polishLrc:[[lrcM getLrcFileContent:PATH] objectAtIndex:i]];
}
lrcM.lrcC=[lrcM sortLrc:_lrcC];
for(int i=1;i<[_lrcC.lrc count];i+=2)
{
NSLog(@"%@",[_lrcC.lrc objectAtIndex:i]);
sleep(1);
}
}
@end
/**************************************************/
/***************-lrcContent.h文件-********************/
/**************************************************/
#import <Foundation/Foundation.h>
@interface lrcContent : NSObject
@property NSMutableArray *message; //存放歌词的其他信息
@property NSMutableArray *lrc; //存放歌词每行
@property NSString *content; //存放单行歌词
@property float time; //存放歌词的出现时间
@end
/**************************************************/
/***************-lrcContent.m文件-********************/
/**************************************************/
#import "lrcContent.h"
@implementation lrcContent
-(id)init
{
if(self=[super init])
{
_message=[[NSMutableArray alloc] init];
_lrc=[[NSMutableArray alloc] init];
_content=@"";
_time=0.0;
}
return self;
}
@end
/**************************************************/
/*******************-歌词示例文件-********************/
/**************************************************/
[ti:传奇]
[ar:王菲]
[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
/**************************************************/
/*******************-程序运行示例-********************/
/**************************************************/
2015-08-10 22:16:30.271 myLrcReader[5185:198636] 传奇
2015-08-10 22:16:31.272 myLrcReader[5185:198636] 作词:刘兵作曲:李健
2015-08-10 22:16:32.278 myLrcReader[5185:198636] 演唱:王菲
2015-08-10 22:16:33.281 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼
2015-08-10 22:16:34.283 myLrcReader[5185:198636] 再也没能忘掉你容颜
2015-08-10 22:16:35.288 myLrcReader[5185:198636] 梦想着偶然能有一天再相见
2015-08-10 22:16:36.290 myLrcReader[5185:198636] 从此我开始孤单思念
2015-08-10 22:16:37.296 myLrcReader[5185:198636] 想你时你在天边
2015-08-10 22:16:38.298 myLrcReader[5185:198636] 想你时你在眼前
2015-08-10 22:16:39.298 myLrcReader[5185:198636] 想你时你在脑海
2015-08-10 22:16:40.299 myLrcReader[5185:198636] 想你时你在心田
2015-08-10 22:16:41.303 myLrcReader[5185:198636] 宁愿相信我们前世有约
2015-08-10 22:16:42.308 myLrcReader[5185:198636] 今生的爱情故事不会再改变
2015-08-10 22:16:43.314 myLrcReader[5185:198636] 宁愿用这一生等你发现
2015-08-10 22:16:44.315 myLrcReader[5185:198636] 我一直在你身旁从未走远
2015-08-10 22:16:45.318 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼
2015-08-10 22:16:46.320 myLrcReader[5185:198636] 再也没能忘掉你容颜
2015-08-10 22:16:47.324 myLrcReader[5185:198636] 梦想着偶然能有一天再相见
2015-08-10 22:16:48.329 myLrcReader[5185:198636] 从此我开始孤单思念
2015-08-10 22:16:49.333 myLrcReader[5185:198636] 想你时你在天边
2015-08-10 22:16:50.335 myLrcReader[5185:198636] 想你时你在眼前
2015-08-10 22:16:51.337 myLrcReader[5185:198636] 想你时你在脑海
2015-08-10 22:16:52.343 myLrcReader[5185:198636] 想你时你在心田
2015-08-10 22:16:53.348 myLrcReader[5185:198636] 宁愿相信我们前世有约
2015-08-10 22:16:54.349 myLrcReader[5185:198636] 今生的爱情故事不会再改变
2015-08-10 22:16:55.352 myLrcReader[5185:198636] 宁愿用这一生等你发现
2015-08-10 22:16:56.354 myLrcReader[5185:198636] 我一直在你身旁从未走远
2015-08-10 22:16:57.359 myLrcReader[5185:198636] 宁愿相信我们前世有约
2015-08-10 22:16:58.361 myLrcReader[5185:198636] 今生的爱情故事不会再改变
2015-08-10 22:16:59.366 myLrcReader[5185:198636] 宁愿用这一生等你发现
2015-08-10 22:17:00.369 myLrcReader[5185:198636] 我一直在你身旁从未走远
2015-08-10 22:17:01.372 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼
LRC歌词文件读取代码的更多相关文章
- Java使用正则表达式解析LRC歌词文件
LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...
- 如何将lrc歌词文件批量转换为ANSI编码?
有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...
- 浅析LRC歌词文件
[时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...
- c#解析Lrc歌词文件
看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间格式: 1.标准格式: [分钟:秒.毫秒] 歌词 注释:括号.冒号.点号全都要求 ...
- 解析LRC歌词文件readlrc
package com.jikexueyuan.readlrc.main; import com.jikexueyuan.readlrc.utils.Utils; import java.io.Fil ...
- 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- C#下载歌词文件
前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...
- Lrc歌词-开发标准
LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...
- 2020/2/1 PHP代码审计之任意文件读取及删除漏洞
在开始学习之前先简单记录一下自己现在的思路吧..现在接触的基本都是无防护的漏洞也就是最简单的一些漏洞.我的想法就是以代审思路为主,之前一直在打CTF,白盒的思维我觉得和CTF这种黑盒有很大区别.自己的 ...
随机推荐
- shell统计一个文件里某行出现的次数并排序
话说有个aaa.txt文件,文件内容如下: aaaabbbbccccddddeeeeffffmmmmooooaaaaccccaaaabbbbddddaaaammmmbbbbaaaaoooo 然后面试题 ...
- 简述JS中 appy 和 call 的详细用法
Apply 和 Call 两个老生常言的方法,使用过程的一些细节还是有很大的异同,具体使用情况可以参照下面例子详细回顾一下. 区别和详解:js中call()和apply()的用法 1.关于call() ...
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- 我的_vimrc文件
""""""""""""""""&quo ...
- hibernate实现多变联合查询
Hibernate主要支持两种查询方式:HQL查询和Criteria查询.前者应用较为广发,后者也只是调用封装好的接口. 现在有一个问题,就是实现多表连接查询,且查询结果集不与任何一个实体类对应,怎么 ...
- HTTP响应头缓存控制
在一般Web开发中,有时需要设置特殊的HTTP响应头阻止客户端(一般是浏览器)缓存(使用)该次请求的响应. 这时候大部分开发人员都是百度或谷歌几段代码复制粘贴即了事. 以下简述一下关于缓存控制的几种H ...
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1...
之前项目一直好好的,之后电脑重装系统,数据库重新安装了一个5.6版本的,项目jar包丢失了,之后就又重新找了一些jar包倒入,结果运行报错: Caused by: com.mysql.jdbc.Mys ...
- java 对象占用内存查看 以及JVM级别 方法修改等
public interface Instrumentation 此类提供检测 Java 编程语言代码所需的服务.检测是向方法中添加字节码,以搜集各种工具所使用的数据.由于更改完全是进行添加,所以这些 ...
- Android 热门技术干货
http://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247484939&idx=1&sn=d1871b09de55ca6 ...
- gridControl使用集锦
1.grid控件默认选择一行时,focused的cell并不是蓝色的,而是白色的 要想实现一次选择一行全都是蓝色的只要改一个属性就可以了 this.gridView1.OptionsSelection ...