Browse Source

#11 Add Moo Music Format

20230320
MengYX 5 years ago
parent
commit
60445b7ed9
No known key found for this signature in database GPG Key ID: E63F9C7303E8F604
  1. 3
      README.md
  2. 2
      package.json
  3. 11
      src/App.vue
  4. 2
      src/decrypt/common.js
  5. 25
      src/decrypt/qmc.js

3
README.md

@ -9,7 +9,8 @@
# Features # Features
- [x] Unlock in browser 在浏览器中解锁 - [x] Unlock in browser 在浏览器中解锁
- [x] QQMusic Format QQ音乐格式 (.qmc0/.qmc3/.qmcflac/.qmcogg) - [x] QQMusic Format QQ音乐格式 (.qmc0/.qmc3/.qmcflac/.qmcogg)
- [x] QQMusic Tm Format QQ音乐 (.tm0/.tm2/.tm3/.tm6) - [x] MooMusic Format Moo音乐格式 ([.bkcmp3/.bkcflac](https://github.com/ix64/unlock-music/issues/11))
- [x] QQMusic Tm Format QQ音乐Tm格式 (.tm0/.tm2/.tm3/.tm6)
- [ ] QQMusic New Format QQ音乐新格式 - [ ] QQMusic New Format QQ音乐新格式
- [x] .mflac (Partial 部分支持) - [x] .mflac (Partial 部分支持)
- [ ] .mgg - [ ] .mgg

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "unlock-music", "name": "unlock-music",
"version": "1.1.0", "version": "1.1.1",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",

11
src/App.vue

@ -67,7 +67,8 @@
<el-footer id="app-footer"> <el-footer id="app-footer">
<el-row> <el-row>
音乐解锁移除已购音乐的加密保护 音乐解锁移除已购音乐的加密保护
目前支持网易云音乐(ncm)和QQ音乐(qmc0, qmc3, qmcflac, qmcogg, mflac) 目前支持网易云音乐(ncm)QQ音乐(qmc0, qmc3, qmcflac, qmcogg, mflac)以及
<a href="https://github.com/ix64/unlock-music/blob/master/README.md" target="_blank">其他格式</a>
<a href="https://github.com/ix64/unlock-music/wiki/使用提示" target="_blank">使用提示</a> <a href="https://github.com/ix64/unlock-music/wiki/使用提示" target="_blank">使用提示</a>
</el-row> </el-row>
<el-row> <el-row>
@ -108,7 +109,7 @@
this.$notify.info({ this.$notify.info({
title: '离线使用', title: '离线使用',
message: '我们使用PWA技术,无网络也能使用<br/>' + message: '我们使用PWA技术,无网络也能使用<br/>' +
'最近更新:支持tm0/2/3/6<br/>' + '最近更新:支持bkcmp3/bkcflac<br/>' +
'点击查看 <a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>', '点击查看 <a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>',
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
duration: 10000, duration: 10000,
@ -118,7 +119,7 @@
handleFile(file) { handleFile(file) {
(async () => { (async () => {
let data =await dec.CommonDecrypt(file); let data = await dec.CommonDecrypt(file);
if (data.status) { if (data.status) {
this.tableData.push(data); this.tableData.push(data);
this.$notify.success({ this.$notify.success({
@ -193,8 +194,8 @@
} }
#app-footer a { #app-footer a {
padding-left: 0.5em; padding-left: 0.2em;
padding-right: 0.5em; padding-right: 0.2em;
} }
#app-footer { #app-footer {

2
src/decrypt/common.js

@ -27,6 +27,8 @@ async function CommonDecrypt(file) {
case "qmc0"://QQ Music Android Mp3 case "qmc0"://QQ Music Android Mp3
case "qmcflac"://QQ Music Android Flac case "qmcflac"://QQ Music Android Flac
case "qmcogg"://QQ Music Android Ogg case "qmcogg"://QQ Music Android Ogg
case "bkcmp3"://Moo Music Mp3
case "bkcflac"://Moo Music Flac
rt_data = await QmcDecrypt.Decrypt(file.raw, raw_filename, raw_ext); rt_data = await QmcDecrypt.Decrypt(file.raw, raw_filename, raw_ext);
break; break;
case "mflac"://QQ Music Desktop Flac case "mflac"://QQ Music Desktop Flac

25
src/decrypt/qmc.js

@ -11,24 +11,21 @@ const SEED_MAP = [
[0x0e, 0x74, 0xbb, 0x90, 0xbc, 0x3f, 0x92], [0x0e, 0x74, 0xbb, 0x90, 0xbc, 0x3f, 0x92],
[0x00, 0x09, 0x5b, 0x9f, 0x62, 0x66, 0xa1]]; [0x00, 0x09, 0x5b, 0x9f, 0x62, 0x66, 0xa1]];
const OriginalExtMap = {
"qmc0": "mp3",
"qmc3": "mp3",
"qmcogg": "ogg",
"qmcflac": "flac",
"bkcmp3": "mp3",
"bkcflac": "flac"
};
async function Decrypt(file, raw_filename, raw_ext) { async function Decrypt(file, raw_filename, raw_ext) {
// 获取扩展名 // 获取扩展名
let new_ext; if (!(raw_ext in OriginalExtMap)) {
switch (raw_ext) { return {status: false, message: "File type is incorrect!"}
case "qmc0":
case "qmc3":
new_ext = "mp3";
break;
case "qmcogg":
new_ext = "ogg";
break;
case "qmcflac":
new_ext = "flac";
break;
default:
return {status: false, message: "File type is incorrect!"}
} }
let new_ext = OriginalExtMap[raw_ext]
const mime = util.AudioMimeType[new_ext]; const mime = util.AudioMimeType[new_ext];
// 读取文件 // 读取文件
const fileBuffer = await util.GetArrayBuffer(file); const fileBuffer = await util.GetArrayBuffer(file);

Loading…
Cancel
Save