欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

將酷狗krc歌詞解析并轉(zhuǎn)換為lrc歌詞php源碼

 更新時(shí)間:2014年06月20日 10:15:03   投稿:shichen2014  
這篇文章主要介紹了krc歌詞解析并轉(zhuǎn)換為lrc歌詞的php實(shí)現(xiàn)方法,需要的朋友可以參考下

最近在進(jìn)行一次對(duì)酷狗音樂(lè)歌詞采集時(shí)發(fā)現(xiàn)酷狗音樂(lè)的歌詞直接瀏覽都是“亂碼”,自己平時(shí)所見(jiàn)的歌詞都是lrc格式的文本,這種酷狗專用的krc格式的顯然是經(jīng)過(guò)特別處理過(guò)的,平時(shí)用酷狗聽(tīng)音樂(lè)也沒(méi)仔細(xì)看他的歌詞有什么不同,只是與天天靜聽(tīng)等不同的是可以逐字高亮顯示歌詞。

對(duì)酷狗的flash播放器進(jìn)行反編譯,發(fā)現(xiàn)這段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; 
}

根據(jù)這段代碼可以很快轉(zhuǎn)換成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歌詞壓縮加密的文本內(nèi)容,得到了解析后的krc明文文本歌詞$krc_text,然后就可以很容易的轉(zhuǎn)換成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;
}

簡(jiǎn)單示例如下:

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

相關(guān)文章

最新評(píng)論