This commit is contained in:
flosacca 2020-11-21 07:03:57 +08:00
parent c11f3fd130
commit f24ea6a07b
2 changed files with 20 additions and 3 deletions

View File

@ -55,10 +55,11 @@ export async function Decrypt(file, raw_filename, raw_ext) {
try { try {
let musicBlob = new Blob([audioData], {type: mime}); let musicBlob = new Blob([audioData], {type: mime});
const originalMeta = await musicMetadata.parseBlob(musicBlob); const originalMeta = await musicMetadata.parseBlob(musicBlob);
console.log(originalMeta)
let shouldWrite = !originalMeta.common.album && !originalMeta.common.artists && !originalMeta.common.title let shouldWrite = !originalMeta.common.album && !originalMeta.common.artists && !originalMeta.common.title
if (musicMeta.format === "mp3") { if (musicMeta.format === "mp3") {
audioData = await WriteMp3Meta( audioData = await WriteMp3Meta(
audioData, artists, info.title, musicMeta.album, imageInfo.buffer, musicMeta.albumPic, !shouldWrite) audioData, artists, info.title, musicMeta.album, imageInfo.buffer, musicMeta.albumPic, shouldWrite ? null : originalMeta)
} else if (musicMeta.format === "flac") { } else if (musicMeta.format === "flac") {
const writer = new MetaFlac(Buffer.from(audioData)) const writer = new MetaFlac(Buffer.from(audioData))
if (shouldWrite) { if (shouldWrite) {

View File

@ -93,9 +93,25 @@ export async function GetWebImage(pic_url) {
return {"buffer": null, "src": pic_url, "url": "", "type": ""} return {"buffer": null, "src": pic_url, "url": "", "type": ""}
} }
export async function WriteMp3Meta(audioData, artistList, title, album, pictureData = null, pictureDesc = "Cover", cover_only = true) { export async function WriteMp3Meta(audioData, artistList, title, album, pictureData = null, pictureDesc = "Cover", originalMeta = null) {
const writer = new ID3Writer(audioData); const writer = new ID3Writer(audioData);
if (!cover_only) writer.setFrame("TPE1", artistList).setFrame("TIT2", title).setFrame("TALB", album); if (originalMeta !== null) {
artistList = originalMeta.common.artists || artistList
title = originalMeta.common.title || title
album = originalMeta.common.album || album
const frames = originalMeta.native['ID3v2.4'] || originalMeta.native['ID3v2.3'] || originalMeta.native['ID3v2.2'] || []
frames.forEach(frame => {
if (frame.id !== 'TPE1' && frame.id !== 'TIT2' && frame.id !== 'TALB') {
try {
writer.setFrame(frame.id, frame.value)
} catch (e) {
}
}
})
}
writer.setFrame('TPE1', artistList)
.setFrame('TIT2', title)
.setFrame('TALB', album);
if (pictureData !== null) { if (pictureData !== null) {
writer.setFrame('APIC', { writer.setFrame('APIC', {
type: 3, type: 3,