Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望添加歌词翻译功能 #296

Closed
2 tasks done
shanyan-wcx opened this issue Aug 20, 2020 · 14 comments
Closed
2 tasks done

希望添加歌词翻译功能 #296

shanyan-wcx opened this issue Aug 20, 2020 · 14 comments
Labels
enhancement New feature or request

Comments

@shanyan-wcx
Copy link

shanyan-wcx commented Aug 20, 2020

解决方案检查

描述您想要的解决方案
简洁明了地描述您要发生的事情。

描述您考虑过的替代方案
对您考虑过的所有替代解决方案或功能的简洁明了的描述。

其他内容
在此处添加有关功能请求的任何其他上下文或屏幕截图(直接把图片拖到编辑框即可添加图片)。

@lyswhut
Copy link
Owner

lyswhut commented Aug 22, 2020

说明什么平台没有歌词翻译

@shanyan-wcx
Copy link
Author

小枸音乐,小秋音乐,小芸音乐,小蜜音乐,小霞音乐好像都没有,至少我听了几首都没有。

@lyswhut lyswhut added the enhancement New feature or request label Aug 23, 2020
@lyswhut
Copy link
Owner

lyswhut commented Aug 23, 2020

下个版本添加小芸、小秋、小霞的歌词翻译,
因小枸、小蜜、小杜因接口拿不到翻译歌词的原因无法添加(懒得话精力去研究了),有大佬知道接口的可以向我反馈添加进去

@InoriHimea
Copy link

http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=%E7%83%9F%E8%8A%B1%E6%98%93%E5%86%B7&duration=6000&hash=
http://lyrics.kugou.com/download?ver=1&client=pc&id=15259866&accesskey=1B6B880DC4B44948EFB77AFA514F6594&fmt=krc&charset=utf8

base64解码后的krc如果有翻译会在里面,好像需要自己去解析
曾经有考虑是弄,但是突然沉迷于搞功放电路。

小秋的新版的qrc歌词改了加密方式,暂时只能解码老板的,我记得有大佬可以解出新版的,但是有人拿来盈利就闭源了,加密方式应该还是3重des加密。然后用zlib给压缩了

@lyswhut
Copy link
Owner

lyswhut commented Aug 28, 2020

krc可以拿到,但是没写出解密算法,吾爱有易语言写的解密krc的算法,但是我没怎么看的懂:

循环"位异或"那里没看懂怎么搞,懒得去研究

@InoriHimea
Copy link

其实就是把得到krc歌词,把头部krc魔法值去掉,然后把内容读成byte数组,然后循环每数组内容,按顺序循环对应密钥16位进行xor的位异或运算,得到的结果用zlib解压,得到明文,然后就会看到里头有逐字歌词,里头还会有另外的base64字符串,那个就是翻译或者音标了,有的可能还有日语假名上标之类的,种类蛮多的,搞起来蛮麻烦,之前,可能是有几年了,兴趣来了,本来想给foobar2000的那个歌词革新一哈,那个不带翻译,毕竟是很老的插件了,然后歌词虽然研究出来了,无奈c++只有初级水平,看不太懂foobar的源码,就没有搞了。js的话,我记得好像有现成的写好的代码,不过不知道适不适合node.js现在的体系,现在好像是比较流行TypeScript吧,总之先贴上来吧

@InoriHimea
Copy link

function start_parse(data)
{

var zip_data = null;
var krc_text = null;
zip_data = krchex_xor(data);

if(!zip_data) return;

unzip_data = utils.ZUnCompress(zip_data);

if(!unzip_data) return;

krc_text = utils.UTF8ToUnicode(unzip_data);

return krc_text;

}

function krchex_xor(s)
{
var magic_bytes = [ 0x6b, 0x72, 0x63, 0x31 ];// 'k' , 'r' , 'c' ,'1'

if(s.length < magic_bytes.length)return;

for(var i=0;i<magic_bytes.length;++i)
{
	var c = s.charCodeAt(i);
	if( c != magic_bytes[i])return;
}

var enc_key = [ 0x40, 0x47, 0x61, 0x77, 0x5e, 0x32, 0x74, 0x47, 0x51, 0x36, 0x31, 0x2d , 0xce, 0xd2, 0x6e, 0x69 ];

var buf = "";
var krc_header = magic_bytes.length;//first 4 bytes

for( var i = krc_header;i < s.length ; ++i )
{
	
	var x1 = s.charCodeAt(i);;
	var x2 = enc_key[ (i - krc_header) % 16 ];
	buf += String.fromCharCode( x1 ^ x2 );
}
return buf;

}

@lyswhut
Copy link
Owner

lyswhut commented Sep 4, 2020

感谢提供xor代码👍👍,回头我试试😀

@lyswhut
Copy link
Owner

lyswhut commented Sep 4, 2020

解出来了,NB啊,老铁

image

@lyswhut
Copy link
Owner

lyswhut commented Sep 4, 2020

小枸的翻译安排上了~🍻

@InoriHimea
Copy link

做个技术交流,其实我也在研究Electron ,从这个项目还是可以学到一些东西的,现在就是qrc解密不了,那个3des解密算法太复杂了,而且qrc结构改了,可能解码方式有些不同了,旧版前面有个[offset:0]的固定头,但是新版没有,试着再某大佬的c代码基础上改,还是解不出来,会是乱码,可能密钥改了

@InoriHimea
Copy link

其实我之前也有想做个播放器,有用C++写,java写,C#写,但是界面都丑,只有基本播放功能,然后用vue写,js部分算是还好,但是页面真的 不太像画,排版是我的硬伤 /泪奔

@lyswhut
Copy link
Owner

lyswhut commented Sep 5, 2020

qrc先不管,现在旧版的接口也能拿到翻译,先用着先吧

@lyswhut
Copy link
Owner

lyswhut commented Sep 18, 2020

已在v1.1.0新增大部分平台的翻译支持

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants