taglib-wasm
Version:
TagLib-Wasm is the universal tagging library for TypeScript/JavaScript platforms: Browsers, Node.js, Deno, Bun, Cloudflare Workers, and Electron apps
69 lines (68 loc) • 1.83 kB
JavaScript
import { withAudioFile, withAudioFileSave } from "./with-audio-file.js";
async function readPictures(file) {
return withAudioFile(file, (audioFile) => audioFile.getPictures());
}
async function applyPictures(file, pictures) {
return withAudioFileSave(file, (audioFile) => {
audioFile.setPictures(pictures);
});
}
async function addPicture(file, picture) {
return withAudioFileSave(file, (audioFile) => {
audioFile.addPicture(picture);
});
}
async function clearPictures(file) {
return applyPictures(file, []);
}
async function readCoverArt(file) {
const pictures = await readPictures(file);
if (pictures.length === 0) {
return void 0;
}
const frontCover = pictures.find((pic) => pic.type === "FrontCover");
if (frontCover) {
return frontCover.data;
}
return pictures[0].data;
}
async function applyCoverArt(file, imageData, mimeType) {
const picture = {
mimeType,
data: imageData,
type: "FrontCover",
description: "Front Cover"
};
return applyPictures(file, [picture]);
}
function findPictureByType(pictures, type) {
return pictures.find((pic) => pic.type === type);
}
async function replacePictureByType(file, newPicture) {
const pictures = await readPictures(file);
const filteredPictures = pictures.filter(
(pic) => pic.type !== newPicture.type
);
filteredPictures.push(newPicture);
return applyPictures(file, filteredPictures);
}
async function readPictureMetadata(file) {
const pictures = await readPictures(file);
return pictures.map((pic) => ({
type: pic.type,
mimeType: pic.mimeType,
description: pic.description,
size: pic.data.length
}));
}
export {
addPicture,
applyCoverArt,
applyPictures,
clearPictures,
findPictureByType,
readCoverArt,
readPictureMetadata,
readPictures,
replacePictureByType
};