32 lines
1.2 KiB
JavaScript
32 lines
1.2 KiB
JavaScript
const assetRoot = '/static/piper-wasm-v1/onnx/';
|
|
|
|
export function createOnnxWasmPaths(origin) {
|
|
const absoluteAssetRoot = new URL(assetRoot, origin).href;
|
|
return absoluteAssetRoot;
|
|
}
|
|
|
|
export function configureOnnxRuntime(onnxRuntime) {
|
|
if (!onnxRuntime?.env?.wasm) throw new TypeError('ONNX Runtime WebAssembly settings are unavailable.');
|
|
// Piper 1.0.3 overwrites this value in TtsSession.init() with
|
|
// navigator.hardwareConcurrency. Override that source as well, otherwise an
|
|
// iPad may start a large WASM worker pool despite this setting.
|
|
const navigatorObject = globalThis.navigator;
|
|
if (navigatorObject && navigatorObject.hardwareConcurrency !== 1) {
|
|
try {
|
|
Object.defineProperty(navigatorObject, 'hardwareConcurrency', {
|
|
configurable: true,
|
|
value: 1,
|
|
});
|
|
} catch (_) {
|
|
// The check below converts an unsupported override into a clear error.
|
|
}
|
|
}
|
|
if (navigatorObject && navigatorObject.hardwareConcurrency !== 1) {
|
|
throw new Error('Piper could not be restricted to one processor thread.');
|
|
}
|
|
// Piper already runs in a worker. Avoid a second worker pool on mobile Safari.
|
|
onnxRuntime.env.wasm.numThreads = 1;
|
|
onnxRuntime.env.wasm.initTimeout = 60000;
|
|
}
|
|
|