将酷狗krc歌词解析并转换为lrc歌词php源码


Posted in PHP onJune 20, 2014

最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是“乱码”,自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐也没仔细看他的歌词有什么不同,只是与天天静听等不同的是可以逐字高亮显示歌词。

对酷狗的flash播放器进行反编译,发现这段krc解密的ActionScript代码:

public function loaderCompleteHandler(param1:ByteArray) : void{ 
 this.newkeyBytes = [64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105]; 
 var result:* = param1; 
 var krcBytes:* = new ByteArray(); 
 result.position = 4; 
 result.readBytes(krcBytes); 
 var l:* = krcBytes.length; 
 var i:int; 
 while (i < l) {
 krcBytes[i] = krcBytes[i] ^ this.newkeyBytes[i % this.newkeyBytes.length]; 
 i = (i + 1); 
 }
 try { 
 krcBytes.uncompress(); 
 } catch (error:SecurityError) { 
 errorfun("uncompressError");
 return; 
 } 
 krcBytes.position = 0; 
 this.myLyric.dataStr = krcBytes.readUTFBytes(krcBytes.length); 
 this.successfun(); 
 return; 
}

根据这段代码可以很快转换成php解析代码:

$enKey = array(64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105);
$krc_content = substr($krc_content,4);
$len = strlen($krc_content);
$krc_compress = '';
for ($k = 0; $k < $len; $k++){
 $krc_compress .= chr(ord($krc_content[$k]) ^ $enKey[$k % 16]);
}
$krc_text = gzuncompress($krc_compress);

上面的$krc_content为krc歌词压缩加密的文本内容,得到了解析后的krc明文文本歌词$krc_text,然后就可以很容易的转换成lrc歌词了,如下:

function krc2lrc($krc_content,$glue = "n"){
 $enKey = array(64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105);
 $krc_content = substr($krc_content,4);
 $len = strlen($krc_content);
 $krc_compress = '';
 for ($k = 0; $k < $len; $k++){
 $krc_compress .= chr(ord($krc_content[$k]) ^ $enKey[$k % 16]);
 }
 $krc_text = gzuncompress($krc_compress);
 preg_match_all("/[(ar|ti|offset):(.+)]/",$krc_text,$matches);
 $lrc_text = implode($glue,$matches[0]).$glue;
 preg_match_all("/[(d{0,8}),(d{0,8})](.+)/",$krc_text,$matches);
 unset($krc_text,$krc_compress,$krc_content,$enKey);
 if(!empty($matches[1])){
 foreach($matches[1] as $k=>$v){
 list($seconds, $millis) = explode('.', $v / 1000); 
 $lrc_time = date('i:s',1388534400 + $seconds).'.'.substr($millis,0,2);
 $lrc_cont = preg_replace("/<d{1,8},d{1,8},d{1,8}>/",'',$matches[3][$k]);
 $lrc_text .= "[{$lrc_time}]{$lrc_cont}{$glue}";
 }
 }
 return $lrc_text;
}

简单示例如下:

$content = file_get_contents('1.krc');
echo krc2lrc($content,'<br/>');
PHP 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
ADODB结合SMARTY使用~超级强
Nov 25 PHP
php 远程图片保存到本地的函数类
Dec 08 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
深入解析PHP底层机制及相关原理
Dec 11 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 #PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 #PHP
PHP扩展CURL的用法详解
Jun 20 #PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 #PHP
ThinkPHP3.1查询语言详解
Jun 19 #PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 #PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 #PHP
You might like
咖啡知识大全
2021/03/03 新手入门
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
js中的闭包实例展示
2018/11/01 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
python之随机数函数的实现示例
2020/12/30 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
Java基础知识面试要点
2016/07/29 面试题
商场端午节活动方案
2014/01/29 职场文书
二年级小学生评语
2014/04/21 职场文书
研究生导师推荐信
2014/09/06 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
详解Python为什么不用设计模式
2021/06/24 Python