您的位置:首页 > 其它

krc歌词文件解析

2012-08-02 17:10 1206 查看
做卡拉ok项目时,逐字歌词同步需要很多高精度的lrc文件,目前国内有2大家:拥有专利的kugou和没有专利的qq音乐。二者各推出了一种逐字同步歌词文件: krc和qrc。krc有加密处理,直接打开的话只能看到乱码。

查找了很多资料,发现只有java版的半成品解密代码,而没有ios平台可用的。经过我半天努力,终于移植到ios平台。个人劳动成果,转载请注明来源。谢谢!本文提供ios平台的krc文件解密解决办法。

//
//  KRC.h
//  iOSKRCDecoder
//
//  Created by zeng songgen on 12-8-2.
//  Copyright (c) 2012年 zeng songgen. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface KRC : NSObject
{
//FileStream fs;

//头部4字节
NSMutableData * HeadBytes;

//异或加密内容
NSMutableData * EncodedBytes;

//解异或加密后ZIP数据
NSMutableData * ZipBytes;

//UNZIP后数据
NSData * UnzipBytes;
}

- (NSString *) Decode: (NSString * )filePath;

@end


//
//  KRC.m
//  iOSKRCDecoder
//
//  Created by zeng songgen on 12-8-2.
//  Copyright (c) 2012年 zeng songgen. All rights reserved.
//

#import "KRC.h"
#import "GTMNSData+zlib.h"

@implementation KRC

//异或加密 密钥
- (NSString *) Decode: (NSString * )filePath
{
NSString * EncKey = @"@Gaw^2tGQ61-ÎÒni";
//char EncKey[] = { '@', 'G', 'a', 'w', '^', '2', 't', 'G', 'Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i' };

NSData * totalBytes = [[NSMutableData alloc] initWithContentsOfFile:filePath];
//HeadBytes = [[NSMutableData alloc] initWithData:[totalBytes subdataWithRange:NSMakeRange(0, 4)]];
EncodedBytes = [[NSMutableData alloc] initWithData:[totalBytes subdataWithRange:NSMakeRange(4, totalBytes.length - 4)]];

ZipBytes = [[NSMutableData alloc] initWithCapacity:EncodedBytes.length];

Byte * encodedBytes = EncodedBytes.mutableBytes;

int EncodedBytesLength = EncodedBytes.length;

for (int i = 0; i < EncodedBytesLength; i++)
{
int l = i % 16;
char c = [EncKey characterAtIndex:l];

Byte b = (Byte)((encodedBytes[i]) ^ c);

[ZipBytes appendBytes:&b length:1];

}
UnzipBytes = [NSData gtm_dataByInflatingData:ZipBytes];

NSString * s = [[[NSString alloc] initWithData:UnzipBytes encoding:NSUTF8StringEncoding] autorelease];

return s;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: