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/ios1509/Day16_类的复合设计/OC3_歌词解析/传奇.txt" @interface LrcManager : NSObject - (id)initWithFile:(NSString *)path; + (NSString *)userInterface:(float)aTime; @end
//
// LrcManager.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "LrcManager.h" //匿名类别(类扩展)
//能扩展方法与实例变量,实现了实例变量与方法的私有化
@interface LrcManager ()
{
NSString *_title; // 歌曲名
NSString *_author;// 歌词作者
NSMutableArray *_lrcList;//存lrcItem
} //解析歌词文件
- (BOOL)parseLrcFile:(NSString *)path;
//解析歌词标题
- (void)parseLrcTitle:(NSString *)lrcString;
//解析歌词演唱者
- (void)parseLrcAuthor:(NSString *)lrcString;
//解析歌词词条
- (void)parseLrcItem:(NSString *)lrcString;
//将时间字符串转换成浮点时间
- (float)timeByTimeString:(NSString *)aString; @end @implementation LrcManager - (id)initWithFile:(NSString *)path
{
self = [super init];
if (self) {
_lrcList = [NSMutableArray array];
[self parseLrcFile:path];
}
return self;
} - (BOOL)parseLrcFile:(NSString *)path
{
//读取歌词文件
NSString *fileContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
if (!fileContent) {
return NO;
}
//分割歌词字符串
NSArray *lrcArray = [fileContent componentsSeparatedByString:@"\n"]; for (NSString *lrcString in lrcArray) {
if ([lrcString isEqualToString:@""]) {
continue;
}
else if ([lrcString hasPrefix:@"[ti:"]) {
[self parseLrcTitle:lrcString];
}
else if ([lrcString hasPrefix:@"[ar:"])
{
[self parseLrcAuthor:lrcString];
}
else
{
[self parseLrcItem:lrcString];
}
}
//对可变数组排序
[_lrcList sortUsingSelector:@selector(isSortByTime:)];
return YES;
} - (void)parseLrcTitle:(NSString *)lrcString
{
_title = [lrcString substringWithRange:NSMakeRange(, [lrcString length]-)];
} - (void)parseLrcAuthor:(NSString *)lrcString
{
_author = [lrcString substringWithRange:NSMakeRange(, [lrcString length]-)];
}
//02:39.90
- (float)timeByTimeString:(NSString *)aString
{
NSArray *timeArray = [aString componentsSeparatedByString:@":"];
return [[timeArray objectAtIndex:] intValue]*+[[timeArray objectAtIndex:] floatValue];
} - (void)parseLrcItem:(NSString *)lrcString
{
NSArray *itemArray = [lrcString componentsSeparatedByString:@"]"];
NSInteger len = [itemArray count];
for (NSInteger i=; i<len-; i++)
{
LrcItem *item = [[LrcItem alloc] init];
NSString *timeString = [[itemArray objectAtIndex:i] substringFromIndex:];
[item setTime:[self timeByTimeString:timeString]];
[item setLrc:[itemArray lastObject]];
[_lrcList addObject:item];
}
}
//3.5 5.5 8.5 10.5 12.0
+ (NSString *)userInterface:(float)aTime
{
LrcManager *manager = [[LrcManager alloc] initWithFile:FilePath];
for (LrcItem *item in manager->_lrcList) {
[item printLrcItem];
}
NSInteger len = [manager->_lrcList count];
NSInteger i;
for (i=; i<len; i++) {
LrcItem *item = [manager->_lrcList objectAtIndex:i];
if (aTime < [item time]) {
return [[manager->_lrcList objectAtIndex:i-] lrc];
}
}
if (i==len) {
return [[manager->_lrcList objectAtIndex:i-] lrc];
}
return nil;
}
@end
//
// LrcItem.h
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h> @interface LrcItem : NSObject
{
float _time;
NSString *_lrc;
} - (float)time;
- (NSString *)lrc; - (void)setTime:(float)aTime;
- (void)setLrc:(NSString *)aLrc; - (BOOL)isSortByTime:(LrcItem *)aItem; - (void)printLrcItem; @end
//
// LrcItem.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "LrcItem.h" @implementation LrcItem - (float)time
{
return _time;
} - (NSString *)lrc
{
return _lrc;
} - (void)setTime:(float)aTime
{
_time = aTime;
} - (void)setLrc:(NSString *)aLrc
{
_lrc = aLrc;
} - (BOOL)isSortByTime:(LrcItem *)aItem
{
if ([self time] > [aItem time]) {
return YES;
}
return NO;
} - (void)printLrcItem
{
NSLog(@"time = %.2f lrc = %@", [self time], [self lrc]);
} @end
//
// main.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h>
#import "LrcManager.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
float time;
scanf("%f",&time);
NSLog(@"%@", [LrcManager userInterface:time]);
}
return ;
}
OC3_歌词解析的更多相关文章
- android 歌词解析
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存
声明:(部分图片来自网络,如果侵犯了您的权益请联系我,会尽快删除!) 又是音乐播放器,不过这次和上次不一样了,准确说这次更像播放器了,初学者不建议看这个,可以先看前面一个音乐播放器(1),当然 我没加 ...
- iOS 音乐播放器之锁屏效果+歌词解析
概述 功能描述:锁屏歌曲信息.控制台远程控制音乐播放:暂停/播放.上一首/下一首.快进/快退.列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果).歌词解析并随音乐 ...
- iOS电商常见动画与布局、微信悬浮窗、音乐播放器、歌词解析、拖动视图等源码
iOS精选源码 MXScroll 介绍 混合使用UIScrollView ios 电商demo(实现各种常见动画效果和页面布局) 一行代码集成微信悬浮窗 可拖动,大小的视图,可放置在屏幕边缘. 在使用 ...
- C语言之歌词解析
0x00 脚下的路 不知道为啥要写这个小标题,可能是年轻的心想体验一下苍老的感觉,抑或是少年的一阵迷茫.混沌的四年,终究还是入了这一行.从初时的不知,到现在的刚开始,中间的间隔竟是四年之久,想起了陈奕 ...
- 网易云歌词解析(配合audio标签实现本地歌曲播放,歌词同步)
先看下效果 github上做的一个音乐播放器: https://github.com/SorrowX/electron-music 中文歌曲 英文歌曲(如果有翻译的中文给回返回出去) 韩文歌曲 来看下 ...
- Objective-C歌词解析
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { FILE* fp1;//定义文件指针 ...
- 歌词解析&class
class song_song: def __init__(self,lrc_file): # 定义两个字典一个列表备用 self.song_file = lrc_file self.song_lrc ...
- python 将歌词解析封装成类,要求:提供一个方法(根据时间返回歌词) - 提示:封装两个类:歌词类、歌词管理类
自己写的 有更好方案的大佬可以讨论一下 import bisectclass Lrc(): def __init__(self, sec, lrc): self.sec = sec self.lrc ...
随机推荐
- J2EE程序员应该要掌握的linux知识
J2EE程序员应该要掌握的linux知识 大型J2EE应用都在建构在linux环境下的.开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试.但是最后的发布还 ...
- Git Cmd
http://my.oschina.net/sunboy2050/blog/55749
- xml文件格式例如以下
xml文件格式例如以下: <?xml version="1.0" encoding="utf-8"?> <us ...
- Java log code example
Java log example Logrecord filter import java.util.logging.Filter; import java.util.logging.Level; i ...
- iOS NSString常用用法大全
版权声明:本文为博主Atany原创文章,未经博主允许不得转载.博客地址:http://blog.csdn.net/yang8456211 一.NSRange 在对NSString介绍之前,我们先要了解 ...
- SparkStreamingTest.scala
/** * Created by root on 9/8/15. */ import org.apache.spark._ import org.apache.spark.rdd.RDD import ...
- UNIX基础知识之输入和输出
一.文件描述符 文件描述符(file descriptor)通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件.当内核打开一个已有文件或创建一个新文件时,它返回一个文件描述符.在读.写文件 ...
- cisco路由器配置教程
配置cisco路由器 经过几十年的发展,从最初的只有四个节点的ARPANET发展到现今无处不在的Internet,计算机网络已经深入到了我们生活当中.随着计算机网络规模的爆炸性增长,作为连接设备的路由 ...
- vim替换命令
转载:http://blog.csdn.net/glorin/article/details/6317098 替換(substitute) :[range]s/pattern/string/[c,e, ...
- Java SE ---算术运算符
算术运算符:(加)+,(减)-,(乘)*,(除)/,(求余)%,自增自减 一,算数运算符:当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型.如果参加运算的变量中有整型int ...