Skip to content

Instantly share code, notes, and snippets.

@WolfgangDrescher
Forked from lpugin/index.html
Created February 14, 2020 12:41
Show Gist options
  • Save WolfgangDrescher/2a45e1919ac322a7aa3f08d91cd00a85 to your computer and use it in GitHub Desktop.
Save WolfgangDrescher/2a45e1919ac322a7aa3f08d91cd00a85 to your computer and use it in GitHub Desktop.
Verovio worker
<!DOCTYPE html>
<html>
<title>Verovio test worker</title>
<body>
<button onclick="testWorker1()">Test Worker 1</button>
<button onclick="testWorker2()">Test Worker 2</button>
<script>
ticket = 0;
var worker = new Worker('./verovio-worker.js');
worker.onmessage = function(event) {
console.log(event.data);
};
function testWorker1() {
this.worker.postMessage( ["getPageCount", ticket++, {}] );
}
function testWorker2() {
this.worker.postMessage( ["getVersion", ticket++, {}] );
}
</script>
</body>
</html>
/**
* Create the instance of the Verovio toolkit and provides worker methods
* It uses the Webassembly (WASM) version
*/
const verovioServer = 'https://www.verovio.org/javascript/develop';
/////////////////////////////
// WASM
self.Module = {
locateFile: function (s) {
console.log(s);
return `${verovioServer}/${s}`;
},
onRuntimeInitialized: function() {
onLoad();
}
};
self.importScripts(`${verovioServer}/verovio-toolkit-wasm.js`);
// gets executed when everything is ready.
self.onLoad = function(
) {
self.vrvToolkit = new verovio.toolkit();
console.log(`Verovio (WASM) ${self.vrvToolkit.getVersion()}`); // works!
sendBack("loaded", false, {});
}
self.vrvToolkit = null;
/////////////////////////////
// Common code
function sendBack(message, ticket, params)
{
postMessage([message, ticket, params]);
}
self.addEventListener("message", function (event) {
let messageType = event.data[0];
let ticket = event.data[1];
let params = event.data[2];
if (!vrvToolkit)
{
sendBack("error", ticket, {"error": "The verovio-toolkit has not finished loading yet!"});
return;
}
switch (messageType)
{
case "getElementAttr":
sendBack(messageType + "-ok", ticket, {"elementAttr": vrvToolkit.getElementAttr(params.id)});
break;
case "getMEI":
sendBack(messageType + "-ok", ticket, {"mei": vrvToolkit.getMEI(-1, true)});
break;
case "getOptions":
sendBack(messageType + "-ok", ticket, {"options": vrvToolkit.getOptions(params.default)});
break;
case "getPageCount":
sendBack(messageType + "-ok", ticket, {"pageCount": vrvToolkit.getPageCount()});
break;
case "getPageWithElement":
sendBack(messageType + "-ok", ticket, {"pageWithElement": vrvToolkit.getPageWithElement(params.id), id: params.id});
break;
case "getVersion":
sendBack(messageType + "-ok", ticket, {"getVersion": vrvToolkit.getVersion()});
break;
case "loadData":
vrvToolkit.loadData(params.mei);
sendBack(messageType + "-ok", ticket, {"pageCount": vrvToolkit.getPageCount()});
break;
case "redoLayout":
vrvToolkit.redoLayout();
sendBack(messageType + "-ok", ticket, {"pageCount": vrvToolkit.getPageCount()});
break;
case "renderToSVG":
svg = vrvToolkit.renderToSVG(params.pageIndex);
sendBack(messageType + "-ok", ticket, {
"pageIndex": params.pageIndex,
"svg": svg
});
break;
case "setOptions":
vrvToolkit.setOptions(params.options);
break;
default:
sendBack("error", ticket, {"error": "Did not recognize input" + event.data});
break;
}
}, false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment