let tts = null; self.Module = { // https://emscripten.org/docs/api_reference/module.html#Module.locateFile locateFile: function (path, scriptDirectory = "") { return scriptDirectory + path; }, // https://emscripten.org/docs/api_reference/module.html#Module.locateFile setStatus: function (status) { self.postMessage({ type: "sherpa-onnx-tts-progress", status }); }, onRuntimeInitialized: function () { console.log("Model files downloaded!"); console.log("Initializing tts ......"); try { tts = createOfflineTts(self.Module); self.postMessage({ type: "sherpa-onnx-tts-ready", modelType: getDefaultOfflineTtsModelType(), numSpeakers: tts.numSpeakers, }); } catch (e) { self.postMessage({ type: "error", message: "TTS Initialization failed: " + e.message, }); } }, }; importScripts("sherpa-onnx-wasm-main-tts.js"); importScripts("sherpa-onnx-tts.js"); function getErrorMessage(err) { if (err instanceof Error) { if (err.stack) { return `${err.message}\n${err.stack}`; } return err.message; } return `${err}`; } self.onmessage = async (e) => { const { type, text, sid, speed, genConfig } = e.data; if (type === "generate") { if (!tts) { return; } try { const audio = tts.generate({ text: text, sid: sid || 0, speed: speed || 1.0, }); const samples = audio.samples; const sampleRate = tts.sampleRate; self.postMessage( { type: "sherpa-onnx-tts-result", samples: samples, sampleRate: sampleRate, }, [samples.buffer], ); } catch (err) { self.postMessage({ type: "error", message: "Generation failed: " + getErrorMessage(err), }); } } else if (type === "generateWithConfig") { if (!tts) { return; } try { const config = Object.assign({}, genConfig || {}); config.callback = (samples, n, progress) => { self.postMessage({ type: "sherpa-onnx-tts-generation-progress", progress: progress, }); return 1; }; const audio = tts.generateWithConfig(text, config); const samples = audio.samples; const sampleRate = audio.sampleRate; self.postMessage( { type: "sherpa-onnx-tts-result", samples: samples, sampleRate: sampleRate, }, [samples.buffer], ); } catch (err) { self.postMessage({ type: "error", message: "Generation failed: " + getErrorMessage(err), }); } } };