@wasm-audio-decoders/common
Advanced tools
Comparing version 8.0.0 to 9.0.0
{ | ||
"name": "@wasm-audio-decoders/common", | ||
"version": "8.0.0", | ||
"version": "9.0.0", | ||
"description": "Web Assembly Audio Decoders Common", | ||
@@ -5,0 +5,0 @@ "module": "index.js", |
@@ -103,12 +103,31 @@ export default function WASMAudioDecoderCommon() { | ||
crc32Table: { | ||
value: (() => { | ||
let crc32Table = new Int32Array(256), | ||
i, | ||
j, | ||
c; | ||
for (i = 0; i < 256; i++) { | ||
for (c = i << 24, j = 8; j > 0; --j) | ||
c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : c << 1; | ||
crc32Table[i] = c; | ||
} | ||
return crc32Table; | ||
})(), | ||
}, | ||
decodeDynString: { | ||
value(source) { | ||
const output = new uint8Array(source.length); | ||
const offset = parseInt(source.substring(11, 13), 16); | ||
const offsetReverse = 256 - offset; | ||
let output = new uint8Array(source.length); | ||
let offset = parseInt(source.substring(11, 13), 16); | ||
let offsetReverse = 256 - offset; | ||
let escaped = false, | ||
let crcIdx, | ||
escaped = false, | ||
byteIndex = 0, | ||
byte, | ||
i = 13; | ||
i = 21, | ||
expectedCrc, | ||
resultCrc = 0xffffffff; | ||
@@ -128,6 +147,21 @@ while (i < source.length) { | ||
output[byteIndex++] = | ||
output[byteIndex] = | ||
byte < offset && byte > 0 ? byte + offsetReverse : byte - offset; | ||
resultCrc = | ||
(resultCrc << 8) ^ | ||
WASMAudioDecoderCommon.crc32Table[ | ||
((resultCrc >> 24) ^ output[byteIndex++]) & 255 | ||
]; | ||
} | ||
// expected crc | ||
for (crcIdx = 0; crcIdx <= 8; crcIdx += 2) | ||
expectedCrc |= | ||
parseInt(source.substring(13 + crcIdx, 15 + crcIdx), 16) << | ||
(crcIdx * 4); | ||
if (expectedCrc !== resultCrc) | ||
throw new Error("WASM string decode failed crc32 validation"); | ||
return output.subarray(0, byteIndex); | ||
@@ -143,3 +177,3 @@ }, | ||
// prettier-ignore | ||
const puffString = String.raw`dynEncode0014u*ttt$#U¤¤U¤¤3yzzss|yusvuyÚ&4<054<,5T44^T44<(6U~J(44< ~A544U~6J0444545 444J0444J,4U4U Ò7U454U4Z4U4U^/6545T4T44BU~64CU~O4U54U~5 U5T4B4Z!4U~5U5U5T4U~6U4ZTU5U5T44~4O4U2ZTU5T44Z!4B6T44U~64B6U~O44U~4O4U~54U~5 44~C4~54U~5 44~5454U4B6Ub!444~UO4U~5 U54U4ZTU#44U$464<4~B6^4<444~U~B4U~54U544~544~U5 µUä#UJUè#5TT4U0ZTTUX5U5T4T4Uà#~4OU4U $~C4~54U~5 T44$6U\!TTT4UaT4<6T4<64<Z!44~4N4<U~5 4UZ!4U±_TU#44UU6UÔ~B$544$6U\!4U6U¤#~B44Uä#~B$~64<6_TU#444U~B~6~54<Y!44<_!T4Y!4<64~444~AN44<U~6J4U5 44J4U[!U#44UO4U~54U~5 U54 7U6844J44J 4UJ4UJ04VK(44<J44<J$4U´~54U~5 4U¤~5!TTT4U$5"U5TTTTTTT4U$"4VK,U54<(6U~64<$6_!4< 64~6A54A544U~6#J(U54A4U[!44J(44#~A4U6UUU [!4464~64_!4<64~54<6T4<4]TU5 T4Y!44~44~AN4U~54U~54U5 44J(44J UÄA!U5U#UôJU"UÔJU#UÔ"JU#U´"JT4U´ZTU5T4UôZTU5T4UDZTU5T4U$[T44~UO4U~5 UÔUô4U~U´$.U5T4UP[T4U~4~UO4U~5 U#<U#<4U~U2$.UÄUN 44 ~UO4U~5 44!~UO4U~5 4U~4~UO4U~5 44J44J(U5 44U¤~J@44Uä~J<44UD~J844U~J44U$54U$5U54U$54U1^4U1^!4U~54U~5U54U~6U4U^/65T4T4U$54U~4BU~4O4U54U~5 UU'464U'_/54UU~5T4T4U~4BU~UO4U54U~5 U54Uä~4U¤~4U~U'$!44~5U5T44\T44U<~$6U\!4U#aT4U~4U~4O4U~5 U5U5U5TTT4U$"4YTU5 4U4~C5U5 U5U5444$4~64~\TU5 4U~4U~5T4Y!44O4U~54U~54U5 4CYTU5 4Uä~4U¤~4U~4$6TU54U\!44Bæ4Bä~[!4U~4UD~4U~4U~4$6TU54U\!44B4B~[!44U<~4U4~$5 4U"U#$544"Y!454U^!44<J44<(J454U~84UN!#%'+/37?GOWgw·×÷Uä;U9$%& !"#`; | ||
const puffString = String.raw`dynEncode0114db91da9bu*ttt$#U¤¤U¤¤3yzzss|yusvuyÚ&4<054<,5T44^T44<(6U~J(44< ~A544U~6J0444545 444J0444J,4U4U Ò7U454U4Z4U4U^/6545T4T44BU~64CU~O4U54U~5 U5T4B4Z!4U~5U5U5T4U~6U4ZTU5U5T44~4O4U2ZTU5T44Z!4B6T44U~64B6U~O44U~4O4U~54U~5 44~C4~54U~5 44~5454U4B6Ub!444~UO4U~5 U54U4ZTU#44U$464<4~B6^4<444~U~B4U~54U544~544~U5 µUä#UJUè#5TT4U0ZTTUX5U5T4T4Uà#~4OU4U $~C4~54U~5 T44$6U\!TTT4UaT4<6T4<64<Z!44~4N4<U~5 4UZ!4U±_TU#44UU6UÔ~B$544$6U\!4U6U¤#~B44Uä#~B$~64<6_TU#444U~B~6~54<Y!44<_!T4Y!4<64~444~AN44<U~6J4U5 44J4U[!U#44UO4U~54U~5 U54 7U6844J44J 4UJ4UJ04VK(44<J44<J$4U´~54U~5 4U¤~5!TTT4U$5"U5TTTTTTT4U$"4VK,U54<(6U~64<$6_!4< 64~6A54A544U~6#J(U54A4U[!44J(44#~A4U6UUU [!4464~64_!4<64~54<6T4<4]TU5 T4Y!44~44~AN4U~54U~54U5 44J(44J UÄA!U5U#UôJU"UÔJU#UÔ"JU#U´"JT4U´ZTU5T4UôZTU5T4UDZTU5T4U$[T44~UO4U~5 UÔUô4U~U´$.U5T4UP[T4U~4~UO4U~5 U#<U#<4U~U2$.UÄUN 44 ~UO4U~5 44!~UO4U~5 4U~4~UO4U~5 44J44J(U5 44U¤~J@44Uä~J<44UD~J844U~J44U$54U$5U54U$54U1^4U1^!4U~54U~5U54U~6U4U^/65T4T4U$54U~4BU~4O4U54U~5 UU'464U'_/54UU~5T4T4U~4BU~UO4U54U~5 U54Uä~4U¤~4U~U'$!44~5U5T44\T44U<~$6U\!4U#aT4U~4U~4O4U~5 U5U5U5TTT4U$"4YTU5 4U4~C5U5 U5U5444$4~64~\TU5 4U~4U~5T4Y!44O4U~54U~54U5 4CYTU5 4Uä~4U¤~4U~4$6TU54U\!44Bæ4Bä~[!4U~4UD~4U~4U~4$6TU54U\!44B4B~[!44U<~4U4~$5 4U"U#$544"Y!454U^!44<J44<(J454U~84UN!#%'+/37?GOWgw·×÷Uä;U9$%& !"#`; | ||
@@ -146,0 +180,0 @@ WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString) |
@@ -13,74 +13,74 @@ import NodeWorker from "@eshaz/web-worker"; | ||
if (!source) { | ||
const webworkerSourceCode = | ||
"'use strict';" + | ||
// dependencies need to be manually resolved when stringifying this function | ||
`(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => { | ||
// We're in a Web Worker | ||
let type = "text/javascript", | ||
isNode, | ||
webworkerSourceCode = | ||
"'use strict';" + | ||
// dependencies need to be manually resolved when stringifying this function | ||
`(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => { | ||
// We're in a Web Worker | ||
// setup Promise that will be resolved once the WebAssembly Module is received | ||
let decoder, | ||
moduleResolve, | ||
modulePromise = new Promise((resolve) => { | ||
moduleResolve = resolve; | ||
}); | ||
// setup Promise that will be resolved once the WebAssembly Module is received | ||
let decoder, | ||
moduleResolve, | ||
modulePromise = new Promise((resolve) => { | ||
moduleResolve = resolve; | ||
}); | ||
self.onmessage = ({ data: { id, command, data } }) => { | ||
let messagePromise = modulePromise, | ||
messagePayload = { id }, | ||
transferList; | ||
self.onmessage = ({ data: { id, command, data } }) => { | ||
let messagePromise = modulePromise, | ||
messagePayload = { id }, | ||
transferList; | ||
if (command === "init") { | ||
Object.defineProperties(_Decoder, { | ||
WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon }, | ||
EmscriptenWASM: { value: _EmscriptenWASM }, | ||
module: { value: data.module }, | ||
isWebWorker: { value: true }, | ||
}); | ||
if (command === "init") { | ||
Object.defineProperties(_Decoder, { | ||
WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon }, | ||
EmscriptenWASM: { value: _EmscriptenWASM }, | ||
module: { value: data.module }, | ||
isWebWorker: { value: true }, | ||
}); | ||
decoder = new _Decoder(data.options); | ||
moduleResolve(); | ||
} else if (command === "free") { | ||
decoder.free(); | ||
} else if (command === "ready") { | ||
messagePromise = messagePromise.then(() => decoder.ready); | ||
} else if (command === "reset") { | ||
messagePromise = messagePromise.then(() => decoder.reset()); | ||
} else { | ||
// "decode": | ||
// "decodeFrame": | ||
// "decodeFrames": | ||
Object.assign( | ||
messagePayload, | ||
decoder[command]( | ||
// detach buffers | ||
Array.isArray(data) | ||
? data.map((data) => new Uint8Array(data)) | ||
: new Uint8Array(data) | ||
) | ||
decoder = new _Decoder(data.options); | ||
moduleResolve(); | ||
} else if (command === "free") { | ||
decoder.free(); | ||
} else if (command === "ready") { | ||
messagePromise = messagePromise.then(() => decoder.ready); | ||
} else if (command === "reset") { | ||
messagePromise = messagePromise.then(() => decoder.reset()); | ||
} else { | ||
// "decode": | ||
// "decodeFrame": | ||
// "decodeFrames": | ||
Object.assign( | ||
messagePayload, | ||
decoder[command]( | ||
// detach buffers | ||
Array.isArray(data) | ||
? data.map((data) => new Uint8Array(data)) | ||
: new Uint8Array(data) | ||
) | ||
); | ||
// The "transferList" parameter transfers ownership of channel data to main thread, | ||
// which avoids copying memory. | ||
transferList = messagePayload.channelData | ||
? messagePayload.channelData.map((channel) => channel.buffer) | ||
: []; | ||
} | ||
messagePromise.then(() => | ||
self.postMessage(messagePayload, transferList) | ||
); | ||
// The "transferList" parameter transfers ownership of channel data to main thread, | ||
// which avoids copying memory. | ||
transferList = messagePayload.channelData | ||
? messagePayload.channelData.map((channel) => channel.buffer) | ||
: []; | ||
} | ||
}; | ||
}).toString()})(${Decoder}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM})`; | ||
messagePromise.then(() => | ||
self.postMessage(messagePayload, transferList) | ||
); | ||
}; | ||
}).toString()})(${Decoder}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM})`; | ||
try { | ||
isNode = typeof process.versions.node !== "undefined"; | ||
} catch {} | ||
const type = "text/javascript"; | ||
source = isNode | ||
? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString( | ||
"base64" | ||
)}` | ||
: URL.createObjectURL(new Blob([webworkerSourceCode], { type })); | ||
try { | ||
// browser | ||
source = URL.createObjectURL(new Blob([webworkerSourceCode], { type })); | ||
} catch { | ||
// nodejs | ||
source = `data:${type};base64,${Buffer.from( | ||
webworkerSourceCode | ||
).toString("base64")}`; | ||
} | ||
WASMAudioDecoderCommon.modules.set(Decoder, source); | ||
@@ -87,0 +87,0 @@ } |
60332
403