0.2.9 • Published 2 months ago

node-taglib-sharp-extend v0.2.9

Weekly downloads
-
License
LGPL-3.0-or-later
Repository
github
Last release
2 months ago

node-taglib-sharp-extend

patched node-taglib-sharp v5.2.3, add support for file in buffer

Install

pnpm add node-taglib-sharp node-taglib-sharp-extend

Usage

Extra function compare to origin

import { File } from 'node-taglib-sharp-extend'

const file = File.createFromBuffer('test.mp3', buffer)
  • fileAbstraction: MemoryFileAbstraction

Utils

import {
  flushFile,
  getBufferFromFile,
  getFileFromBuffer,
  getPictureBase64,
  getPictureURL,
  parseMetadata,
  updatePicture,
  updateTag
} from 'node-taglib-sharp-extend/utils'

let file = getFileFromBuffer('test.mp3', buffer)

const { tag, property, pictures, quality } = parseMetadata(
  file,
  arr => arr.flatMap(a => a.split('; ')).join('')
)

updateTag(file, 'title', 'test')
updatePicture(file, buffer)

file = flushFile(file)
console.log(getBufferFromFile(file).length)

// browser only
const [url, clean] = getPictureURL(pictures[0])
console.log(url)
clean()

const base64 = await getPictureBase64(pictures[0])

Types

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

Run in browser

if you want to run in browser, you need to do some polyfills for node modules

total size: ~270KB (minified + gzip)

Polyfills

there is a built-in vite plugin for polyfill, and please ensure that vite-plugin-node-polyfills is installed (will be installed by default through peerDependencies)

when dev, default includes: ['buffer', 'string_decoder', 'stream', 'crypto', 'fs', 'path', 'util']

when build, default includes: ['buffer', 'string_decoder'], other modules are manually transformed by the plugin

default global: { Buffer: true }

vite config:

import { defineConfig } from 'vite'
import { polyfillTaglib } from 'node-taglib-sharp-extend/vite'

export default defineConfig({
  plugins: [
    polyfillTaglib(/* options */),
  ],
})
Web Worker support check

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/utils'

// you can run in main thread or worker thread
if (await checkWebWorkerSupport()) {
  // ...
}
0.2.9

2 months ago

0.2.8

2 months ago

0.2.7

2 months ago

0.2.6

2 months ago

0.2.5

2 months ago

0.2.4

4 months ago

0.2.3

6 months ago

0.2.2

6 months ago

0.2.1

6 months ago

0.2.0

6 months ago

0.1.2

6 months ago

0.1.1

6 months ago

0.1.0

6 months ago