Skip to content

Commit 5cd4f2d

Browse files
committed
Add meta writes
1 parent d2f7f3c commit 5cd4f2d

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

audio-encode.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,36 @@ export { encodeChunked }
5151

5252
// --- format registration ---
5353

54+
// Lazy-loaded meta writers (per-format), keyed by format name. Loaded on first
55+
// use when `meta`/`markers`/`regions` is passed to that format's encoder.
56+
const META_WRITERS = {
57+
wav: () => import('@audio/encode-wav/meta').then(m => m.writeMeta),
58+
mp3: () => import('@audio/encode-mp3/meta').then(m => m.writeMeta),
59+
flac: () => import('@audio/encode-flac/meta').then(m => m.writeMeta),
60+
}
61+
5462
function reg(name, load) {
5563
encode[name] = fmt(name, async (opts) => {
64+
let { meta, markers, regions, ...rest } = opts || {}
5665
let init = (await load()).default
57-
let codec = await init(opts)
58-
return streamEncoder(ch => codec.encode(ch), () => codec.flush(), () => codec.free())
66+
let codec = await init(rest)
67+
// No meta requested (or unsupported by format): pass through.
68+
if (!META_WRITERS[name] || !(meta || markers?.length || regions?.length))
69+
return streamEncoder(ch => codec.encode(ch), () => codec.flush(), () => codec.free())
70+
// Meta requested: buffer encoder output, splice via writeMeta on flush.
71+
let writeMeta = await META_WRITERS[name]()
72+
let parts = []
73+
return streamEncoder(
74+
async ch => { let b = await codec.encode(ch); if (b?.length) parts.push(b); return EMPTY },
75+
async () => {
76+
let f = await codec.flush(); if (f?.length) parts.push(f)
77+
let total = 0; for (let p of parts) total += p.length
78+
let all = new Uint8Array(total), off = 0
79+
for (let p of parts) { all.set(p, off); off += p.length }
80+
return writeMeta(all, { meta: meta || {}, markers: markers || [], regions: regions || [] })
81+
},
82+
() => codec.free(),
83+
)
5984
})
6085
}
6186

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "encode-audio",
3-
"version": "1.4.1",
3+
"version": "1.5.0",
44
"description": "Encode audio data in node or browser",
55
"type": "module",
66
"sideEffects": false,

0 commit comments

Comments
 (0)