taglib-wasm 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +512 -38
- package/dist/index.browser.js +275 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/simple.browser.js +275 -3
- package/dist/src/bwf/bext.d.ts +28 -0
- package/dist/src/bwf/bext.d.ts.map +1 -0
- package/dist/src/bwf/bext.js +126 -0
- package/dist/src/msgpack/encoder.d.ts.map +1 -1
- package/dist/src/msgpack/encoder.js +9 -1
- package/dist/src/runtime/unified-loader/module-loading.js +1 -1
- package/dist/src/runtime/wasi-adapter/file-handle.d.ts +7 -1
- package/dist/src/runtime/wasi-adapter/file-handle.d.ts.map +1 -1
- package/dist/src/runtime/wasi-adapter/file-handle.js +41 -2
- package/dist/src/runtime/wasi-host-loader.d.ts +1 -1
- package/dist/src/runtime/wasi-host-loader.js +1 -1
- package/dist/src/taglib/audio-file-bwf.d.ts +14 -0
- package/dist/src/taglib/audio-file-bwf.d.ts.map +1 -0
- package/dist/src/taglib/audio-file-bwf.js +41 -0
- package/dist/src/taglib/audio-file-impl.d.ts +10 -0
- package/dist/src/taglib/audio-file-impl.d.ts.map +1 -1
- package/dist/src/taglib/audio-file-impl.js +65 -1
- package/dist/src/taglib/audio-file-interface.d.ts +27 -0
- package/dist/src/taglib/audio-file-interface.d.ts.map +1 -1
- package/dist/src/taglib/embind-adapter.d.ts +2 -0
- package/dist/src/taglib/embind-adapter.d.ts.map +1 -1
- package/dist/src/taglib/embind-adapter.js +27 -2
- package/dist/src/types/audio-formats.d.ts +18 -0
- package/dist/src/types/audio-formats.d.ts.map +1 -1
- package/dist/src/types/bwf.d.ts +43 -0
- package/dist/src/types/bwf.d.ts.map +1 -0
- package/dist/src/types/bwf.js +0 -0
- package/dist/src/types/chapters.d.ts +47 -0
- package/dist/src/types/chapters.d.ts.map +1 -0
- package/dist/src/types/chapters.js +0 -0
- package/dist/src/types/index.d.ts +2 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/metadata-mappings.d.ts +1 -1
- package/dist/src/types/metadata-mappings.d.ts.map +1 -1
- package/dist/src/types/tags.d.ts +11 -7
- package/dist/src/types/tags.d.ts.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/wasm.d.ts +14 -2
- package/dist/src/wasm.d.ts.map +1 -1
- package/dist/taglib-wasi.wasm +0 -0
- package/dist/taglib-web.wasm +0 -0
- package/dist/taglib-wrapper.d.ts +0 -2
- package/dist/taglib-wrapper.js +1 -1
- package/package.json +5 -5
- package/dist/taglib_wasi.wasm +0 -0
package/dist/index.browser.js
CHANGED
|
@@ -100,6 +100,20 @@ var init_pictures = __esm({
|
|
|
100
100
|
}
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
+
// src/types/chapters.ts
|
|
104
|
+
var init_chapters = __esm({
|
|
105
|
+
"src/types/chapters.ts"() {
|
|
106
|
+
"use strict";
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// src/types/bwf.ts
|
|
111
|
+
var init_bwf = __esm({
|
|
112
|
+
"src/types/bwf.ts"() {
|
|
113
|
+
"use strict";
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
103
117
|
// src/types/config.ts
|
|
104
118
|
var init_config = __esm({
|
|
105
119
|
"src/types/config.ts"() {
|
|
@@ -122,6 +136,8 @@ var init_types = __esm({
|
|
|
122
136
|
init_tags();
|
|
123
137
|
init_metadata_mappings();
|
|
124
138
|
init_pictures();
|
|
139
|
+
init_chapters();
|
|
140
|
+
init_bwf();
|
|
125
141
|
init_config();
|
|
126
142
|
init_format_property_keys();
|
|
127
143
|
}
|
|
@@ -135,6 +151,136 @@ var init_types2 = __esm({
|
|
|
135
151
|
}
|
|
136
152
|
});
|
|
137
153
|
|
|
154
|
+
// src/bwf/bext.ts
|
|
155
|
+
function readFixedString(bytes, offset, len) {
|
|
156
|
+
let end = offset;
|
|
157
|
+
const max = Math.min(offset + len, bytes.length);
|
|
158
|
+
while (end < max && bytes[end] !== 0) end++;
|
|
159
|
+
let s = "";
|
|
160
|
+
for (let i = offset; i < end; i++) s += String.fromCharCode(bytes[i]);
|
|
161
|
+
return s;
|
|
162
|
+
}
|
|
163
|
+
function writeFixedString(bytes, offset, len, value) {
|
|
164
|
+
for (let i = 0; i < len; i++) {
|
|
165
|
+
bytes[offset + i] = i < value.length ? value.charCodeAt(i) & 255 : 0;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function clampInt16(n) {
|
|
169
|
+
return Math.max(-32768, Math.min(32767, Math.round(n)));
|
|
170
|
+
}
|
|
171
|
+
function loudnessRaw(v) {
|
|
172
|
+
return v === void 0 ? LOUDNESS_UNSET : clampInt16(v * 100);
|
|
173
|
+
}
|
|
174
|
+
function loudnessFromRaw(raw) {
|
|
175
|
+
return raw === LOUDNESS_UNSET ? void 0 : raw / 100;
|
|
176
|
+
}
|
|
177
|
+
function bytesToHex(bytes) {
|
|
178
|
+
let s = "";
|
|
179
|
+
for (const b of bytes) s += b.toString(16).padStart(2, "0");
|
|
180
|
+
return s;
|
|
181
|
+
}
|
|
182
|
+
function hexToBytes(hex, outLen) {
|
|
183
|
+
const clean = hex.replace(/[^0-9a-fA-F]/g, "");
|
|
184
|
+
const out = new Uint8Array(outLen);
|
|
185
|
+
for (let i = 0; i + 1 < clean.length + 1 && i / 2 < outLen; i += 2) {
|
|
186
|
+
const pair = clean.slice(i, i + 2);
|
|
187
|
+
if (pair.length === 2) out[i / 2] = parseInt(pair, 16);
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
function decodeBext(bytes) {
|
|
192
|
+
if (bytes.length < VERSION_OFFSET + 2) return void 0;
|
|
193
|
+
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
194
|
+
const timeRefLow = dv.getUint32(338, true);
|
|
195
|
+
const timeRefHigh = dv.getUint32(342, true);
|
|
196
|
+
const version = dv.getUint16(VERSION_OFFSET, true);
|
|
197
|
+
const result = {
|
|
198
|
+
description: readFixedString(bytes, 0, 256),
|
|
199
|
+
originator: readFixedString(bytes, 256, 32),
|
|
200
|
+
originatorReference: readFixedString(bytes, 288, 32),
|
|
201
|
+
originationDate: readFixedString(bytes, 320, 10),
|
|
202
|
+
originationTime: readFixedString(bytes, 330, 8),
|
|
203
|
+
timeReferenceSamples: BigInt(timeRefHigh) << 32n | BigInt(timeRefLow),
|
|
204
|
+
version,
|
|
205
|
+
codingHistory: bytes.length > FIXED_PREFIX_LEN ? readFixedString(
|
|
206
|
+
bytes,
|
|
207
|
+
FIXED_PREFIX_LEN,
|
|
208
|
+
bytes.length - FIXED_PREFIX_LEN
|
|
209
|
+
) : ""
|
|
210
|
+
};
|
|
211
|
+
if (version >= 1 && bytes.length >= UMID_OFFSET + UMID_LEN) {
|
|
212
|
+
result.umid = bytesToHex(
|
|
213
|
+
bytes.subarray(UMID_OFFSET, UMID_OFFSET + UMID_LEN)
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (version >= 2 && bytes.length >= LOUDNESS_OFFSET + 10) {
|
|
217
|
+
const lv = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET, true));
|
|
218
|
+
const lr = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 2, true));
|
|
219
|
+
const mtp = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 4, true));
|
|
220
|
+
const mml = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 6, true));
|
|
221
|
+
const msl = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 8, true));
|
|
222
|
+
if (lv !== void 0) result.loudnessValueDb = lv;
|
|
223
|
+
if (lr !== void 0) result.loudnessRangeDb = lr;
|
|
224
|
+
if (mtp !== void 0) result.maxTruePeakLevelDbtp = mtp;
|
|
225
|
+
if (mml !== void 0) result.maxMomentaryLoudnessDb = mml;
|
|
226
|
+
if (msl !== void 0) result.maxShortTermLoudnessDb = msl;
|
|
227
|
+
}
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
function encodeBext(b) {
|
|
231
|
+
const codingHistory = b.codingHistory ?? "";
|
|
232
|
+
const bytes = new Uint8Array(FIXED_PREFIX_LEN + codingHistory.length);
|
|
233
|
+
const dv = new DataView(bytes.buffer);
|
|
234
|
+
const hasLoudness = b.loudnessValueDb !== void 0 || b.loudnessRangeDb !== void 0 || b.maxTruePeakLevelDbtp !== void 0 || b.maxMomentaryLoudnessDb !== void 0 || b.maxShortTermLoudnessDb !== void 0;
|
|
235
|
+
const version = Number.isInteger(b.version) ? b.version : hasLoudness ? 2 : b.umid ? 1 : 0;
|
|
236
|
+
writeFixedString(bytes, 0, 256, b.description ?? "");
|
|
237
|
+
writeFixedString(bytes, 256, 32, b.originator ?? "");
|
|
238
|
+
writeFixedString(bytes, 288, 32, b.originatorReference ?? "");
|
|
239
|
+
writeFixedString(bytes, 320, 10, b.originationDate ?? "");
|
|
240
|
+
writeFixedString(bytes, 330, 8, b.originationTime ?? "");
|
|
241
|
+
const tr = b.timeReferenceSamples ?? 0n;
|
|
242
|
+
dv.setUint32(338, Number(tr & 0xffffffffn), true);
|
|
243
|
+
dv.setUint32(342, Number(tr >> 32n & 0xffffffffn), true);
|
|
244
|
+
dv.setUint16(VERSION_OFFSET, version, true);
|
|
245
|
+
if (version >= 1 && b.umid) {
|
|
246
|
+
bytes.set(hexToBytes(b.umid, UMID_LEN), UMID_OFFSET);
|
|
247
|
+
}
|
|
248
|
+
if (version >= 2) {
|
|
249
|
+
dv.setInt16(LOUDNESS_OFFSET, loudnessRaw(b.loudnessValueDb), true);
|
|
250
|
+
dv.setInt16(LOUDNESS_OFFSET + 2, loudnessRaw(b.loudnessRangeDb), true);
|
|
251
|
+
dv.setInt16(LOUDNESS_OFFSET + 4, loudnessRaw(b.maxTruePeakLevelDbtp), true);
|
|
252
|
+
dv.setInt16(
|
|
253
|
+
LOUDNESS_OFFSET + 6,
|
|
254
|
+
loudnessRaw(b.maxMomentaryLoudnessDb),
|
|
255
|
+
true
|
|
256
|
+
);
|
|
257
|
+
dv.setInt16(
|
|
258
|
+
LOUDNESS_OFFSET + 8,
|
|
259
|
+
loudnessRaw(b.maxShortTermLoudnessDb),
|
|
260
|
+
true
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
writeFixedString(
|
|
264
|
+
bytes,
|
|
265
|
+
FIXED_PREFIX_LEN,
|
|
266
|
+
codingHistory.length,
|
|
267
|
+
codingHistory
|
|
268
|
+
);
|
|
269
|
+
return bytes;
|
|
270
|
+
}
|
|
271
|
+
var FIXED_PREFIX_LEN, VERSION_OFFSET, UMID_OFFSET, UMID_LEN, LOUDNESS_OFFSET, LOUDNESS_UNSET;
|
|
272
|
+
var init_bext = __esm({
|
|
273
|
+
"src/bwf/bext.ts"() {
|
|
274
|
+
"use strict";
|
|
275
|
+
FIXED_PREFIX_LEN = 602;
|
|
276
|
+
VERSION_OFFSET = 346;
|
|
277
|
+
UMID_OFFSET = 348;
|
|
278
|
+
UMID_LEN = 64;
|
|
279
|
+
LOUDNESS_OFFSET = 412;
|
|
280
|
+
LOUDNESS_UNSET = 32767;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
|
|
138
284
|
// src/errors/base.ts
|
|
139
285
|
var SUPPORTED_FORMATS, TagLibError;
|
|
140
286
|
var init_base = __esm({
|
|
@@ -377,6 +523,47 @@ var init_errors2 = __esm({
|
|
|
377
523
|
}
|
|
378
524
|
});
|
|
379
525
|
|
|
526
|
+
// src/taglib/audio-file-bwf.ts
|
|
527
|
+
function requireBwf(format) {
|
|
528
|
+
if (!BWF_FORMATS.has(format)) {
|
|
529
|
+
throw new UnsupportedFormatError(format, ["WAV", "FLAC"], {
|
|
530
|
+
operation: "BWF metadata"
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function getBextData(handle) {
|
|
535
|
+
const raw = handle.getBextData();
|
|
536
|
+
return raw && raw.length > 0 ? raw : void 0;
|
|
537
|
+
}
|
|
538
|
+
function setBextData(handle, format, data) {
|
|
539
|
+
requireBwf(format);
|
|
540
|
+
handle.setBextData(data);
|
|
541
|
+
}
|
|
542
|
+
function getBext(handle) {
|
|
543
|
+
const raw = handle.getBextData();
|
|
544
|
+
return raw && raw.length > 0 ? decodeBext(raw) : void 0;
|
|
545
|
+
}
|
|
546
|
+
function setBext(handle, format, bext) {
|
|
547
|
+
requireBwf(format);
|
|
548
|
+
handle.setBextData(encodeBext(bext));
|
|
549
|
+
}
|
|
550
|
+
function getIxml(handle) {
|
|
551
|
+
return handle.getIxml();
|
|
552
|
+
}
|
|
553
|
+
function setIxml(handle, format, data) {
|
|
554
|
+
requireBwf(format);
|
|
555
|
+
handle.setIxml(data);
|
|
556
|
+
}
|
|
557
|
+
var BWF_FORMATS;
|
|
558
|
+
var init_audio_file_bwf = __esm({
|
|
559
|
+
"src/taglib/audio-file-bwf.ts"() {
|
|
560
|
+
"use strict";
|
|
561
|
+
init_bext();
|
|
562
|
+
init_errors2();
|
|
563
|
+
BWF_FORMATS = /* @__PURE__ */ new Set(["WAV", "FLAC"]);
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
|
|
380
567
|
// browser-stub:platform-io-browser-stub
|
|
381
568
|
function getPlatformIO() {
|
|
382
569
|
throw new Error("Filesystem operations are not available in the browser.");
|
|
@@ -1359,6 +1546,9 @@ var init_audio_file_base = __esm({
|
|
|
1359
1546
|
});
|
|
1360
1547
|
|
|
1361
1548
|
// src/taglib/embind-adapter.ts
|
|
1549
|
+
function isValidBitrateMode(value) {
|
|
1550
|
+
return value === "CBR" || value === "VBR" || value === "ABR";
|
|
1551
|
+
}
|
|
1362
1552
|
function wrapEmbindHandle(raw) {
|
|
1363
1553
|
const overrides = {
|
|
1364
1554
|
getTagData() {
|
|
@@ -1383,12 +1573,32 @@ function wrapEmbindHandle(raw) {
|
|
|
1383
1573
|
if (data.year !== void 0) tw.setYear(data.year);
|
|
1384
1574
|
if (data.track !== void 0) tw.setTrack(data.track);
|
|
1385
1575
|
},
|
|
1576
|
+
getBextData() {
|
|
1577
|
+
const v = raw.getBextData();
|
|
1578
|
+
if (v === void 0 || v === null) return void 0;
|
|
1579
|
+
const u8 = v instanceof Uint8Array ? v : new Uint8Array(v);
|
|
1580
|
+
return u8.length > 0 ? u8 : void 0;
|
|
1581
|
+
},
|
|
1582
|
+
setBextData(data) {
|
|
1583
|
+
raw.setBextData(data ?? null);
|
|
1584
|
+
},
|
|
1585
|
+
getIxml() {
|
|
1586
|
+
const v = raw.getIxml();
|
|
1587
|
+
return typeof v === "string" && v.length > 0 ? v : void 0;
|
|
1588
|
+
},
|
|
1589
|
+
setIxml(data) {
|
|
1590
|
+
raw.setIxml(
|
|
1591
|
+
data ?? null
|
|
1592
|
+
);
|
|
1593
|
+
},
|
|
1386
1594
|
getAudioProperties() {
|
|
1387
1595
|
const pw = raw.getAudioProperties();
|
|
1388
1596
|
if (!pw) return null;
|
|
1389
1597
|
const containerFormat = pw.containerFormat() || "unknown";
|
|
1598
|
+
const codec = pw.codec() || "unknown";
|
|
1390
1599
|
const mpegVersion = pw.mpegVersion();
|
|
1391
1600
|
const formatVersion = pw.formatVersion();
|
|
1601
|
+
const bitrateMode = pw.bitrateMode();
|
|
1392
1602
|
return {
|
|
1393
1603
|
duration: pw.lengthInSeconds(),
|
|
1394
1604
|
durationMs: pw.lengthInMilliseconds(),
|
|
@@ -1396,12 +1606,14 @@ function wrapEmbindHandle(raw) {
|
|
|
1396
1606
|
sampleRate: pw.sampleRate(),
|
|
1397
1607
|
channels: pw.channels(),
|
|
1398
1608
|
bitsPerSample: pw.bitsPerSample(),
|
|
1399
|
-
codec
|
|
1609
|
+
codec,
|
|
1400
1610
|
containerFormat,
|
|
1401
1611
|
isLossless: pw.isLossless(),
|
|
1402
1612
|
...mpegVersion > 0 ? { mpegVersion, mpegLayer: pw.mpegLayer() } : {},
|
|
1403
1613
|
...containerFormat === "MP4" || containerFormat === "ASF" ? { isEncrypted: pw.isEncrypted() } : {},
|
|
1404
|
-
...formatVersion > 0 ? { formatVersion } : {}
|
|
1614
|
+
...formatVersion > 0 ? { formatVersion } : {},
|
|
1615
|
+
...isValidBitrateMode(bitrateMode) ? { bitrateMode } : {},
|
|
1616
|
+
...codec === "Opus" ? { outputGainDb: pw.outputGainDb() } : {}
|
|
1405
1617
|
};
|
|
1406
1618
|
}
|
|
1407
1619
|
};
|
|
@@ -1420,6 +1632,15 @@ var init_embind_adapter = __esm({
|
|
|
1420
1632
|
});
|
|
1421
1633
|
|
|
1422
1634
|
// src/taglib/audio-file-impl.ts
|
|
1635
|
+
function sortChapters(list) {
|
|
1636
|
+
return [...list].sort((a, b) => a.startTimeMs - b.startTimeMs);
|
|
1637
|
+
}
|
|
1638
|
+
function inferEndTimeMs(sorted, index, trackEndMs) {
|
|
1639
|
+
const own = sorted[index].endTimeMs;
|
|
1640
|
+
if (own !== void 0) return own;
|
|
1641
|
+
const next = sorted[index + 1];
|
|
1642
|
+
return next ? next.startTimeMs : trackEndMs;
|
|
1643
|
+
}
|
|
1423
1644
|
function readFileSync(path) {
|
|
1424
1645
|
if (typeof Deno !== "undefined") return Deno.readFileSync(path);
|
|
1425
1646
|
if (_nodeFs === void 0) {
|
|
@@ -1437,6 +1658,7 @@ var init_audio_file_impl = __esm({
|
|
|
1437
1658
|
"src/taglib/audio-file-impl.ts"() {
|
|
1438
1659
|
"use strict";
|
|
1439
1660
|
init_types2();
|
|
1661
|
+
init_audio_file_bwf();
|
|
1440
1662
|
init_errors2();
|
|
1441
1663
|
init_file();
|
|
1442
1664
|
init_write();
|
|
@@ -1502,6 +1724,10 @@ var init_audio_file_impl = __esm({
|
|
|
1502
1724
|
fullFileHandle.setTagData(this.handle.getTagData());
|
|
1503
1725
|
fullFileHandle.setProperties(this.handle.getProperties());
|
|
1504
1726
|
fullFileHandle.setPictures(this.handle.getPictures());
|
|
1727
|
+
const bextBytes = this.handle.getBextData();
|
|
1728
|
+
if (bextBytes !== void 0) fullFileHandle.setBextData(bextBytes);
|
|
1729
|
+
const ixmlStr = this.handle.getIxml();
|
|
1730
|
+
if (ixmlStr !== void 0) fullFileHandle.setIxml(ixmlStr);
|
|
1505
1731
|
if (!fullFileHandle.save()) {
|
|
1506
1732
|
throw new FileOperationError(
|
|
1507
1733
|
"save",
|
|
@@ -1556,6 +1782,52 @@ var init_audio_file_impl = __esm({
|
|
|
1556
1782
|
removePictures() {
|
|
1557
1783
|
this.handle.removePictures();
|
|
1558
1784
|
}
|
|
1785
|
+
getChapters() {
|
|
1786
|
+
const sorted = sortChapters(this.handle.getChapters());
|
|
1787
|
+
const trackEndMs = this.audioProperties()?.durationMs;
|
|
1788
|
+
return sorted.map((c, i) => ({
|
|
1789
|
+
startTimeMs: c.startTimeMs,
|
|
1790
|
+
endTimeMs: inferEndTimeMs(sorted, i, trackEndMs),
|
|
1791
|
+
title: c.title || void 0,
|
|
1792
|
+
id: c.id || void 0,
|
|
1793
|
+
source: c.source
|
|
1794
|
+
}));
|
|
1795
|
+
}
|
|
1796
|
+
setChapters(chapters, options) {
|
|
1797
|
+
const fmt = this.getFormat();
|
|
1798
|
+
if (fmt !== "MP3" && fmt !== "MP4") {
|
|
1799
|
+
throw new UnsupportedFormatError(fmt, ["MP3", "MP4"], {
|
|
1800
|
+
operation: "setChapters"
|
|
1801
|
+
});
|
|
1802
|
+
}
|
|
1803
|
+
const sorted = sortChapters(chapters);
|
|
1804
|
+
const trackEndMs = this.audioProperties()?.durationMs;
|
|
1805
|
+
const raw = sorted.map((c, i) => ({
|
|
1806
|
+
id: c.id,
|
|
1807
|
+
startTimeMs: c.startTimeMs,
|
|
1808
|
+
endTimeMs: inferEndTimeMs(sorted, i, trackEndMs) ?? c.startTimeMs,
|
|
1809
|
+
title: c.title
|
|
1810
|
+
}));
|
|
1811
|
+
this.handle.setChapters(raw, options?.mp4ChapterStyle ?? "quicktime");
|
|
1812
|
+
}
|
|
1813
|
+
getBext() {
|
|
1814
|
+
return getBext(this.handle);
|
|
1815
|
+
}
|
|
1816
|
+
setBext(bext) {
|
|
1817
|
+
setBext(this.handle, this.getFormat(), bext);
|
|
1818
|
+
}
|
|
1819
|
+
getBextData() {
|
|
1820
|
+
return getBextData(this.handle);
|
|
1821
|
+
}
|
|
1822
|
+
setBextData(data) {
|
|
1823
|
+
setBextData(this.handle, this.getFormat(), data);
|
|
1824
|
+
}
|
|
1825
|
+
getIxml() {
|
|
1826
|
+
return getIxml(this.handle);
|
|
1827
|
+
}
|
|
1828
|
+
setIxml(data) {
|
|
1829
|
+
setIxml(this.handle, this.getFormat(), data);
|
|
1830
|
+
}
|
|
1559
1831
|
getRatings() {
|
|
1560
1832
|
return this.handle.getRatings().map(
|
|
1561
1833
|
(r) => ({
|
|
@@ -1729,7 +2001,7 @@ var VERSION;
|
|
|
1729
2001
|
var init_version = __esm({
|
|
1730
2002
|
"src/version.ts"() {
|
|
1731
2003
|
"use strict";
|
|
1732
|
-
VERSION = "1.
|
|
2004
|
+
VERSION = "1.2.0";
|
|
1733
2005
|
}
|
|
1734
2006
|
});
|
|
1735
2007
|
|
package/dist/index.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export type { PropertyMetadata } from "./src/constants/property-types.js";
|
|
|
45
45
|
export { copyCoverArt, exportAllPictures, exportCoverArt, exportPictureByType, findCoverArtFiles, importCoverArt, importPictureWithType, loadPictureFromFile, savePictureToFile, } from "./src/file-utils/index.js";
|
|
46
46
|
export { type AudioDynamics, type AudioFileMetadata, type DuplicateGroup, exportFolderMetadata, findDuplicates, type FolderScanItem, type FolderScanOptions, type FolderScanResult, type FolderUpdateItem, type FolderUpdateResult, scanFolder, updateFolderTags, } from "./src/folder-api/index.js";
|
|
47
47
|
export { canvasToPicture, createPictureDownloadURL, createPictureGallery, dataURLToPicture, displayPicture, imageFileToPicture, pictureToDataURL, setCoverArtFromCanvas, } from "./src/web-utils/index.js";
|
|
48
|
-
export type { AudioCodec, AudioFileInput, AudioProperties, BitrateControlMode, ContainerFormat, ExtendedTag, FieldMapping, FileType, NamedAudioInput, OpenOptions, Picture, PictureType, PropertyMap, Tag, TagInput, TagName, } from "./src/types.js";
|
|
48
|
+
export type { AudioCodec, AudioFileInput, AudioProperties, BitrateControlMode, BroadcastAudioExtension, Chapter, ContainerFormat, ExtendedTag, FieldMapping, FileType, NamedAudioInput, OpenOptions, Picture, PictureType, PropertyMap, SetChaptersOptions, Tag, TagInput, TagName, } from "./src/types.js";
|
|
49
49
|
export { BITRATE_CONTROL_MODE_NAMES, BITRATE_CONTROL_MODE_VALUES, PICTURE_TYPE_NAMES, PICTURE_TYPE_VALUES, } from "./src/types.js";
|
|
50
50
|
export type { PropertyKey, PropertyValue } from "./src/constants.js";
|
|
51
51
|
export type { FormatPropertyKey, TagFormat, } from "./src/types/format-property-keys.js";
|
|
@@ -54,6 +54,7 @@ export { COMPLEX_PROPERTIES, COMPLEX_PROPERTY_KEY, } from "./src/constants/compl
|
|
|
54
54
|
export type { ComplexPropertyKey, ComplexPropertyKeyMap, ComplexPropertyValueMap, Rating, UnsyncedLyrics, VariantMap, } from "./src/constants/complex-properties.js";
|
|
55
55
|
export { RatingUtils } from "./src/utils/rating.js";
|
|
56
56
|
export type { NormalizedRating, PopmRating } from "./src/utils/rating.js";
|
|
57
|
+
export * as bwf from "./src/bwf/bext.js";
|
|
57
58
|
export type { TagLibModule, WasmModule } from "./src/wasm.js";
|
|
58
59
|
export type { LoadTagLibOptions } from "./src/runtime/loader-types.js";
|
|
59
60
|
export { loadTagLibModule } from "./src/runtime/module-loader.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -97,6 +97,7 @@ import {
|
|
|
97
97
|
COMPLEX_PROPERTY_KEY
|
|
98
98
|
} from "./src/constants/complex-properties.js";
|
|
99
99
|
import { RatingUtils } from "./src/utils/rating.js";
|
|
100
|
+
import * as bwf from "./src/bwf/bext.js";
|
|
100
101
|
import { loadTagLibModule } from "./src/runtime/module-loader.js";
|
|
101
102
|
export {
|
|
102
103
|
AudioFileImpl,
|
|
@@ -125,6 +126,7 @@ export {
|
|
|
125
126
|
applyPictures,
|
|
126
127
|
applyTags,
|
|
127
128
|
applyTagsToFile,
|
|
129
|
+
bwf,
|
|
128
130
|
canvasToPicture,
|
|
129
131
|
clearPictures,
|
|
130
132
|
clearTags,
|