将酷狗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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
php获取新浪微博数据API实例
Nov 12 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
php扩展开发入门demo示例
Sep 23 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python避免死锁方法实例分析
2015/06/04 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python KMeans聚类问题分析
2018/02/23 Python
python pygame实现方向键控制小球
2019/05/17 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python 面向对象部分知识点小结
2020/03/09 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
给孩子的新年寄语
2014/04/08 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
超市收银员岗位职责
2015/04/07 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
Python pyecharts绘制条形图详解
2022/04/02 Python
python标准库ElementTree处理xml
2022/05/20 Python