搜索
首页php教程php手册酷狗krc歌词解析并转换为lrc歌词php版

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

于是搜索了下发现有个java版的半成品解密代码,测试了下竟然还是"乱码",巨坑!于是只有采用最原始的办法,对酷狗的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 = &#39;&#39;; 
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歌词了,代码如下:

/** 
 * krc歌词解析并转换为lrc歌词 
 * $Name: krc2lrc  2014-4-18  qaulau<qaulau@hotmail.com>$ 
 *  
 * @param string $krc_content 加密的krc歌词内容 
 * @param string $glue   处理后的lrc歌词连接字符,默认为换行符n 
 */ 
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 = &#39;&#39;; 
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(!emptyempty($matches[1])){ 
foreach($matches[1] as $k=>$v){ 
list($seconds, $millis) = explode(&#39;.&#39;, $v / 1000);  
$lrc_time = date(&#39;i:s&#39;,1388534400 + $seconds).&#39;.&#39;.substr($millis,0,2); 
$lrc_cont = preg_replace("/<d{1,8},d{1,8},d{1,8}>/",&#39;&#39;,$matches[3][$k]);   
$lrc_text .= "[{$lrc_time}]{$lrc_cont}{$glue}"; 
} 
} 
 return $lrc_text; 
}

简单的示例:

$content = file_get_contents(&#39;1.krc&#39;); 
echo krc2lrc($content,&#39;<br/>&#39;);

分享一下,方便日后有类似需要的人查询.


本文地址:

转载随意,但请附上文章地址:-)

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中