mirror of
				https://git.unlock-music.dev/um/web.git
				synced 2025-11-04 15:13:29 +08:00 
			
		
		
		
	#11 Add Moo Music Format
This commit is contained in:
		
							parent
							
								
									4e499b2deb
								
							
						
					
					
						commit
						60445b7ed9
					
				@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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
									
									
									
									
									
								
							
							
						
						
									
										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 {
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user