Add Support for flac meta/cover

This commit is contained in:
MengYX
2020-07-18 19:25:41 +08:00
parent 9c41991cea
commit 1d8c5069e4
5 changed files with 50 additions and 6 deletions

View File

@@ -1,4 +1,5 @@
const CryptoJS = require("crypto-js");
const MetaFlac = require('metaflac-js');
const CORE_KEY = CryptoJS.enc.Hex.parse("687a4852416d736f356b496e62617857");
const META_KEY = CryptoJS.enc.Hex.parse("2331346C6A6B5F215C5D2630553C2728");
const MagicHeader = [0x43, 0x54, 0x45, 0x4E, 0x46, 0x44, 0x41, 0x4D];
@@ -40,12 +41,23 @@ export async function Decrypt(file, raw_filename, raw_ext) {
if (musicMeta.format === undefined) musicMeta.format = DetectAudioExt(audioData, "mp3");
const imageInfo = await GetWebImage(musicMeta.albumPic);
if (musicMeta.format === "mp3") audioData = await WriteMp3Meta(
audioData, artists, info.title, musicMeta.album, imageInfo.buffer, musicMeta.albumPic);
if (musicMeta.format === "mp3") {
audioData = await WriteMp3Meta(
audioData, artists, info.title, musicMeta.album, imageInfo.buffer, musicMeta.albumPic);
} else if (musicMeta.format === "flac") {
const writer = new MetaFlac(Buffer.from(audioData))
writer.setTag("TITLE=" + info.title);
writer.setTag("ALBUM=" + musicMeta.album);
artists.forEach(artist => writer.setTag("ARTIST=" + artist));
writer.importPictureFromBuffer(Buffer.from(imageInfo.buffer))
audioData = writer.save()
}
console.log(imageInfo)
const mime = AudioMimeType[musicMeta.format];
const musicData = new Blob([audioData], {type: mime});
return {
let x = {
status: true,
title: info.title,
artist: info.artist,
@@ -55,6 +67,8 @@ export async function Decrypt(file, raw_filename, raw_ext) {
file: URL.createObjectURL(musicData),
mime: mime
};
console.log(x)
return x;
}

View File

@@ -7,6 +7,9 @@ import {
GetWebImage,
RequestJsonp
} from "./util";
const MetaFlac = require('metaflac-js');
import {QmcMaskCreate58, QmcMaskDetectMflac, QmcMaskDetectMgg, QmcMaskGetDefault} from "./qmcMask";
import {fromByteArray as Base64Encode, toByteArray as Base64Decode} from 'base64-js'
@@ -85,6 +88,11 @@ export async function Decrypt(file, raw_filename, raw_ext) {
writer.addTag();
musicDecoded = writer.arrayBuffer
musicBlob = new Blob([musicDecoded], {type: mime});
} else if (ext === 'flac') {
const writer = new MetaFlac(Buffer.from(musicDecoded))
writer.importPictureFromBuffer(Buffer.from(imageInfo.buffer))
musicDecoded = writer.save()
musicBlob = new Blob([musicDecoded], {type: mime});
}
}
}

View File

@@ -91,7 +91,7 @@ export async function GetWebImage(pic_url) {
return {"buffer": null, "url": "", "type": ""}
}
export async function WriteMp3Meta(audioData, artistList, title, album, pictureData = null, pictureDesc = "Cover") {
export function WriteMp3Meta(audioData, artistList, title, album, pictureData = null, pictureDesc = "Cover") {
const writer = new ID3Writer(audioData);
writer.setFrame("TPE1", artistList)
.setFrame("TIT2", title)