Move ID3 Writer to Util

This commit is contained in:
MengYX
2020-04-05 17:31:16 +08:00
parent 9569e2f145
commit 2415db67be
3 changed files with 61 additions and 29 deletions

View File

@@ -1,8 +1,7 @@
const CryptoJS = require("crypto-js");
const ID3Writer = require("browser-id3-writer");
const CORE_KEY = CryptoJS.enc.Hex.parse("687a4852416d736f356b496e62617857");
const META_KEY = CryptoJS.enc.Hex.parse("2331346C6A6B5F215C5D2630553C2728");
import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetFileInfo} from "./util"
import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetFileInfo, GetWebImage, WriteMp3Meta} from "./util"
export async function Decrypt(file, raw_filename, raw_ext) {
const fileBuffer = await GetArrayBuffer(file);
@@ -31,8 +30,10 @@ export async function Decrypt(file, raw_filename, raw_ext) {
if (artists.length === 0) artists.push(info.artist);
if (musicMeta.format === undefined) musicMeta.format = DetectAudioExt(audioData, "mp3");
if (musicMeta.format === "mp3")
audioData = await writeID3(audioData, artists, info.title, musicMeta.album, musicMeta.albumPic);
const imageInfo = await GetWebImage(musicMeta.albumPic);
if (musicMeta.format === "mp3") audioData = await WriteMp3Meta(
audioData, artists, info.title, musicMeta.album, imageInfo.buffer, musicMeta.albumPic);
const mime = AudioMimeType[musicMeta.format];
const musicData = new Blob([audioData], {type: mime});
@@ -42,32 +43,12 @@ export async function Decrypt(file, raw_filename, raw_ext) {
artist: info.artist,
ext: musicMeta.format,
album: musicMeta.album,
picture: musicMeta.albumPic,
picture: imageInfo.url,
file: URL.createObjectURL(musicData),
mime: mime
};
}
async function writeID3(audioData, artistList, title, album, picture) {
const writer = new ID3Writer(audioData);
writer.setFrame("TPE1", artistList)
.setFrame("TIT2", title)
.setFrame("TALB", album);
if (picture !== "") {
try {
const img = await (await fetch(picture)).arrayBuffer();
writer.setFrame('APIC', {
type: 3,
data: img,
description: 'Cover'
})
} catch (e) {
console.log("Fail to write cover image!");
}
}
writer.addTag();
return writer.arrayBuffer;
}
function getKeyData(dataView, fileBuffer, offset) {
const keyLen = dataView.getUint32(offset, true);