UNPKG

taglib-wasm

Version:

TagLib-Wasm is the universal tagging library for TypeScript/JavaScript platforms: Browsers, Node.js, Deno, Bun, Cloudflare Workers, and Electron apps

52 lines (51 loc) 1.91 kB
import { getFileSize, readFileData, readPartialFileData } from "../utils/file.js"; import { metadataFitsInHeader, trailerFitsInFooter } from "./metadata-extent.js"; async function loadAudioData(input, opts) { if (opts.partial && typeof File !== "undefined" && input instanceof File) { const headerSize = Math.min(opts.maxHeaderSize, input.size); const footerSize = Math.min(opts.maxFooterSize, input.size); if (input.size <= headerSize + footerSize) { return { data: await readFileData(input), isPartiallyLoaded: false }; } const header = new Uint8Array( await input.slice(0, headerSize).arrayBuffer() ); if (!metadataFitsInHeader(header, headerSize)) { return { data: await readFileData(input), isPartiallyLoaded: false }; } const footerStart = Math.max(0, input.size - footerSize); const footer = new Uint8Array(await input.slice(footerStart).arrayBuffer()); if (!trailerFitsInFooter(footer, footerSize)) { return { data: await readFileData(input), isPartiallyLoaded: false }; } const combined = new Uint8Array(header.byteLength + footer.byteLength); combined.set(header, 0); combined.set(footer, header.byteLength); return { data: combined, isPartiallyLoaded: true }; } if (opts.partial && typeof input === "string") { const fileSize = await getFileSize(input); if (fileSize > opts.maxHeaderSize + opts.maxFooterSize) { const data = await readPartialFileData( input, opts.maxHeaderSize, opts.maxFooterSize ); if (metadataFitsInHeader(data, opts.maxHeaderSize) && trailerFitsInFooter(data, opts.maxFooterSize)) { return { data, isPartiallyLoaded: true }; } } return { data: await readFileData(input), isPartiallyLoaded: false }; } return { data: await readFileData(input), isPartiallyLoaded: false }; } export { loadAudioData };