
Security News
Open Source CAI Framework Handles Pen Testing Tasks up to 3,600× Faster Than Humans
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
node-taglib-sharp-extend
Advanced tools
extend node-taglib-sharp, add support for file in memory
pnpm add node-taglib-sharp node-taglib-sharp-extend
built-in:
import { File, MemoryFileAbstraction } from 'node-taglib-sharp-extend'
export function getFile(fileName: string, buffer: Uint8Array | Buffer | number[]): File {
return File.createFromAbstraction(
new MemoryFileAbstraction(fileName, buffer),
)
}
export function getBuffer(metadata: File): Uint8Array | undefined {
const abstraction = metadata.fileAbstraction
return abstraction instanceof MemoryFileAbstraction
? abstraction.current()
: undefined
}
// `File.save` will not flush original buffer, so need function to get current buffer
export function flushFile(file: File): File {
file.save()
const abstraction = file.fileAbstraction
return abstraction instanceof MemoryFileAbstraction
? getFileFromBuffer(abstraction.name, abstraction.current())
: file
}
parse metadata:
export type IAudioTag<T extends string | string[] = string[]> = Partial<{
title: string
artists: T
album: string
track: number
trackTotal: number
disk: number
diskTotal: number
year: number
genres: T
albumArtists: T
composers: T
comment: string
lyrics: string
}>
export type IAudioProperty = {
bitRate: number
bitsPerSample: number
sampleRate: number
duration: number
channels: number
codecs: ICodec[]
}
export type Metadata<T extends string | string[] = string[]> = {
tag: IAudioTag<T>
properties: IAudioProperty
quality: AudioQualityType
pictures?: IParsedPicture[]
}
type TransformStringArrayFn<T extends string | string[]> = (rawArray: string[], name: ArrayableName) => T
function fetchMetadata<T extends string | string[] = string[]>(
file: File,
transformStringArray?: TransformStringArrayFn<T>
): Metadata<T>
more utils are documented by JSDoc
if you want to run in browser, you need to polyfill node modules and patch node-taglib-sharp
for performance
there is a built-in vite plugin for polyfill, and please confirm that vite-plugin-node-polyfills
is installed
import { defineConfig } from 'vite'
import { polyfillTaglib } from 'node-taglib-sharp-extend/vite'
export default defineConfig({
plugins: [
// allow extra node polyfill options
polyfillTaglib(),
],
})
Matroska / WebM use node:crypto.randomFillSync()
to generate random array, it is polyfilled to globalThis.crypto.getRandomValues
.
you can use built-in function to check if support in Web Worker:
import { checkWebWorkerSupport } from 'node-taglib-sharp-extend'
// you can run in main thread or worker thread
if (await checkWebWorkerSupport()) {
// ...
}
in V5.2.2, the performance of writing block is poor when using MemoryFileAbstraction
. File.insert()
use tiny buffer size to increase the file size, and the buffer allocation in memory seem to be expensive
so patch the File.insert()
with larger buffer size in Step 3 will improve the performance
if you use pnpm, add to your package.json
and rerun pnpm install
:
{
"pnpm": {
"patchedDependencies": {
"node-taglib-sharp@5.2.2": "./node_modules/node-taglib-sharp-extend/patches/node-taglib-sharp@5.2.2.patch"
}
}
}
FAQs
read and write audio file metadata in nodejs / browser(memory)
The npm package node-taglib-sharp-extend receives a total of 106 weekly downloads. As such, node-taglib-sharp-extend popularity was classified as not popular.
We found that node-taglib-sharp-extend demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.
Security News
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.