www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

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

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

  1. public function loaderCompleteHandler(param1:ByteArray) : void{  
  2.  this.newkeyBytes = [64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105];  
  3.  var result:* = param1;  
  4.  var krcBytes:* = new ByteArray();  
  5.  result.position = 4;  
  6.  result.readBytes(krcBytes);  
  7.  var l:* = krcBytes.length;  
  8.  var i:int;  
  9.  while (i < l) { 
  10.  krcBytes[i] = krcBytes[i] ^ this.newkeyBytes[i % this.newkeyBytes.length];  
  11.  i = (i + 1);  
  12.  } 
  13.  try {  
  14.  krcBytes.uncompress();  
  15.  } catch (error:SecurityError) {  
  16.  errorfun("uncompressError"); 
  17.  return;  
  18.  }  
  19.  krcBytes.position = 0;  
  20.  this.myLyric.dataStr = krcBytes.readUTFBytes(krcBytes.length);  
  21.  this.successfun();  
  22.  return;  

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

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

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

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

简单示例如下:

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

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《将酷狗krc歌词解析并转换为lrc歌词php源码》
文章链接:https://www.adminn.cn/news/8710.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏