
Product
Secure Your AI-Generated Code with Socket MCP
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
node-taglib-sharp-extend
Advanced tools
read and write audio file metadata in nodejs / browser(memory)
Patch node-taglib-sharp with:
createFromPath
in File
Node
dependenciesVite
plugin for webappBackup your file!
Known issue:
m4a
maybe corrupt after writing, see original issuenpm install node-taglib-sharp-extend
yarn add node-taglib-sharp-extend
pnpm add node-taglib-sharp-extend
import { createFileFromBuffer, createFileFromPath } from 'node-taglib-sharp-extend'
const localFile = await createFileFromPath('./samples/test.mp3')
const file = await createFileFromBuffer('test.mp3', buffer)
import {
flushFile,
getBufferFromFile,
getFileFromBuffer,
getPictureBase64,
getPictureURL,
parseMetadata,
updatePicture,
updateTag
} from 'node-taglib-sharp-extend'
let file = getFileFromBuffer('test.mp3', buffer)
const { tag, property, pictures, quality, unwritableReason } = parseMetadata(
file,
arr => arr.flatMap(a => a.split('; ')).join('')
)
updateTag(file, 'title', 'test')
updatePicture(file, buffer)
// if File is created from buffer and corrupt after flusing, throw CorruptError
file = flushFile(file)
console.log('file size:', getBufferFromFile(file).length)
// browser only
const [url, clean] = getPictureURL(pictures[0])
console.log(url)
clean()
const base64 = await getPictureBase64(pictures[0])
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>
property: IAudioProperty
quality: AudioQualityType
pictures?: IParsedPicture[]
}
more utils are documented by JSDoc
if you want to run it in webapp, you need to do some polyfills for node modules
total size: ~250KB (minified + gzip)
there is a built-in vite plugin for polyfill, and please ensure that vite-plugin-node-polyfills
is installed
when dev,
default includes: ['buffer', 'string_decoder', 'stream', 'crypto', 'fs', 'util']
when build,
default includes: ['buffer', 'string_decoder']
,
other modules are manually transformed by the plugin
vite config:
import { polyfillTaglib } from 'node-taglib-sharp-extend/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [
polyfillTaglib(/* options */),
],
})
Built-in manualChunks
config, split into 2 vendors: iconv
and taglib
import { taglibManualChunksConfig } from 'node-taglib-sharp-extend/vite'
import { defineConfig } from 'vite'
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks: taglibManualChunksConfig
}
}
}
})
Matroska / WebM use node:crypto.randomFillSync()
to generate random array, it is polyfilled to 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()) {
// ...
}
FAQs
read and write audio file metadata in nodejs / browser(memory)
The npm package node-taglib-sharp-extend receives a total of 177 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.
Product
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
Security News
As vulnerability data bottlenecks grow, the federal government is formally investigating NIST’s handling of the National Vulnerability Database.
Research
Security News
Socket’s Threat Research Team has uncovered 60 npm packages using post-install scripts to silently exfiltrate hostnames, IP addresses, DNS servers, and user directories to a Discord-controlled endpoint.