krc转lrc 酷狗加密歌词转换
2013-04-18 11:34
351 查看
import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.RandomAccessFile; import java.text.SimpleDateFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.Inflater; public class Krc2Lrc { private static final char key[] = { '@', 'G', 'a', 'w', '^', '2', 't', 'G', 'Q', '6', '1', '-', '\316', '\322','n', 'i' }; public static void main(String[] args) { try { convert("c:/a.krc"); } catch (Exception e) { System.err.println("failure!"); e.printStackTrace(); return; } System.out.println("success"); } /* * 参数:文件名 函数作用:解密转换 */ public static void convert(String fileName) throws Exception { RandomAccessFile raf = new RandomAccessFile(fileName, "r"); byte[] content = new byte[(int) (raf.length() - 4)]; raf.skipBytes(4); raf.read(content); raf.close(); for (int i = 0, length = content.length; i < length; i++) { int j = i % 16; // 循环异或解密 content[i] ^= key[j]; } String lrc = null; lrc = new String(decompress(content), "utf-8"); // 解压为 utf8 String final_lrc = lrc.replaceAll("<([^>]*)>", "").replaceAll(",([^]]*)]", "] "); /* 处理时间标签 */ Pattern p = Pattern.compile("\\[\\d+?\\]"); Matcher m = p.matcher(final_lrc); while (m.find()) { final_lrc = m.replaceFirst(toTime(m.group())); m = p.matcher(final_lrc); } String lrcFileName = fileName.replaceAll(".krc", ".lrc").replaceAll("\\s-\\s\\w+.lrc", ".lrc"); FileOutputStream fos = new FileOutputStream(lrcFileName); byte[] lrcbyte = final_lrc.getBytes(); fos.write(lrcbyte); fos.close(); System.out.println("文件保存为:"+lrcFileName); } private static String toTime(String num) { SimpleDateFormat sdf = new SimpleDateFormat("mm:ss"); long time = Long.parseLong(num.substring(1, num.length() - 1)); return "[" + sdf.format(time) + "." + ((time % 1000) / 10) + "]"; } /* * 解压 */ private static byte[] decompress(byte[] data) throws Exception { byte[] output = new byte[0]; Inflater decompresser = new Inflater(); decompresser.reset(); decompresser.setInput(data); ByteArrayOutputStream o = new ByteArrayOutputStream(data.length); byte[] buf = new byte[1024]; while (!decompresser.finished()) { int i = decompresser.inflate(buf); o.write(buf, 0, i); } output = o.toByteArray(); o.close(); decompresser.end(); return output; } }
相关文章推荐
- 酷狗krc歌词转换为lrc格式
- 将酷狗krc歌词转换为lrc格式
- 将酷狗krc歌词解析并转换为lrc歌词php源码
- 笨笨-歌词伴侣V1.2(酷狗KRC转LRC,LRC歌词批量下载)
- 笨笨-歌词伴侣V1.2(酷狗KRC转LRC,LRC歌词批量下载)
- 将酷狗krc歌词解析并转换为lrc歌词php源码
- 酷狗歌词Krc批量转换工具Lrc [附转换编码DLL]
- krc2lrc(krc酷狗歌词转lrc)工具更新- 1.2 增加添加/拖放目录功能
- 酷狗.Krc加密歌词解析
- 酷狗的krc歌词文件的解析
- 浅谈歌词文件(LRC、QRC、KRC)
- 浅谈歌词文件(LRC、QRC、KRC)
- 如何将lrc歌词文件批量转换为ANSI编码?
- 加密解密基础问题:字节数组和16进制字符串的相互转换
- 正则表达式练习: android 歌词解析lrc 转 txt 代码
- shell脚本转换成二进制的可执行文件方法--加密
- JavaScript解析lrc文件音乐歌词
- c# 操作Lrc歌词文件 的类
- 歌词字幕转换制作专家转换LRC-UTF,出错问题,乱码问题,格式问题
- 一、酷狗 歌词搜索 Indy TIdhttp