Move ID3 Writer to Util
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
const ID3Writer = require("browser-id3-writer");
|
||||
export const FLAC_HEADER = [0x66, 0x4C, 0x61, 0x43];
|
||||
export const MP3_HEADER = [0x49, 0x44, 0x33];
|
||||
export const OGG_HEADER = [0x4F, 0x67, 0x67, 0x53];
|
||||
@@ -38,7 +39,7 @@ export function GetFileInfo(artist, title, filenameNoExt) {
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
export function GetCoverURL(metadata) {
|
||||
export function GetMetaCoverURL(metadata) {
|
||||
let pic_url = "";
|
||||
if (metadata.common.picture !== undefined && metadata.common.picture.length > 0) {
|
||||
let pic = new Blob([metadata.common.picture[0].data], {type: metadata.common.picture[0].format});
|
||||
@@ -61,6 +62,56 @@ export function DetectAudioExt(data, fallbackExt) {
|
||||
if (IsBytesEqual(MP3_HEADER, data.slice(0, MP3_HEADER.length))) return "mp3";
|
||||
if (IsBytesEqual(FLAC_HEADER, data.slice(0, FLAC_HEADER.length))) return "flac";
|
||||
if (IsBytesEqual(OGG_HEADER, data.slice(0, OGG_HEADER.length))) return "ogg";
|
||||
if (IsBytesEqual(M4A_HEADER, data.slice(4, 8))) return "m4a";
|
||||
if (IsBytesEqual(M4A_HEADER, data.slice(4, 4 + M4A_HEADER.length))) return "m4a";
|
||||
return fallbackExt;
|
||||
}
|
||||
|
||||
|
||||
export async function GetWebImage(pic_url) {
|
||||
try {
|
||||
let resp = await fetch(pic_url);
|
||||
let mime = resp.headers.get("Content-Type");
|
||||
if (mime.startsWith("image/")) {
|
||||
let buf = await resp.arrayBuffer();
|
||||
let objBlob = new Blob([buf], {type: mime});
|
||||
let objUrl = URL.createObjectURL(objBlob);
|
||||
return {"buffer": buf, "url": objUrl, "type": mime};
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
return {"buffer": null, "url": "", "type": ""}
|
||||
}
|
||||
|
||||
export async function WriteMp3Meta(audioData, artistList, title, album, pictureData = null, pictureDesc = "Cover") {
|
||||
const writer = new ID3Writer(audioData);
|
||||
writer.setFrame("TPE1", artistList)
|
||||
.setFrame("TIT2", title)
|
||||
.setFrame("TALB", album);
|
||||
if (pictureData !== null) {
|
||||
writer.setFrame('APIC', {
|
||||
type: 3,
|
||||
data: pictureData,
|
||||
description: pictureDesc,
|
||||
})
|
||||
}
|
||||
writer.addTag();
|
||||
return writer.arrayBuffer;
|
||||
}
|
||||
|
||||
export function RequestJsonp(url, callback_name = "callback") {
|
||||
return new Promise((resolve, reject) => {
|
||||
let node;
|
||||
window[callback_name] = function (data) {
|
||||
delete window[callback_name];
|
||||
if (node.parentNode) node.parentNode.removeChild(node);
|
||||
resolve(data)
|
||||
};
|
||||
node = document.createElement('script');
|
||||
node.type = "text/javascript";
|
||||
node.src = url;
|
||||
node.addEventListener('error', msg => {
|
||||
reject(msg);
|
||||
});
|
||||
document.head.appendChild(node);
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user