From 18e6c65ff7128dd3a126831c08c52732a7957b19 Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Fri, 20 Dec 2019 20:27:11 +0100 Subject: [PATCH 1/2] Switch to blob workers by default --- .../JavaScript/AlphaSynthWebWorkerApi.cs | 10 ++++---- .../JavaScript/AlphaTabWorkerScoreRenderer.cs | 23 +++++++++++-------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaSynthWebWorkerApi.cs b/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaSynthWebWorkerApi.cs index 819333703..fced1dfe3 100644 --- a/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaSynthWebWorkerApi.cs +++ b/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaSynthWebWorkerApi.cs @@ -198,16 +198,16 @@ public AlphaSynthWebWorkerApi(ISynthOutput player, string alphaSynthScriptFile, try { - _synth = new Worker(alphaSynthScriptFile); + HaxeString script = "importScripts('" + alphaSynthScriptFile + "')"; + var blob = new Blob(Script.Write("[ script ]")); + _synth = new Worker(URL.CreateObjectURL(blob)); } catch { - // fallback to blob worker + // fallback to direct worker try { - HaxeString script = "importScripts('" + alphaSynthScriptFile + "')"; - var blob = new Blob(Script.Write("[ script ]")); - _synth = new Worker(URL.CreateObjectURL(blob)); + _synth = new Worker(alphaSynthScriptFile); } catch (Exception e) { diff --git a/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaTabWorkerScoreRenderer.cs b/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaTabWorkerScoreRenderer.cs index 0e3494579..05fad13be 100644 --- a/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaTabWorkerScoreRenderer.cs +++ b/Source/AlphaTab.JavaScript/Platform/JavaScript/AlphaTabWorkerScoreRenderer.cs @@ -21,29 +21,32 @@ internal class AlphaTabWorkerScoreRenderer : IScoreRenderer public AlphaTabWorkerScoreRenderer(AlphaTabApi api, Settings settings) { _api = api; + // first try blob worker try { - _worker = new Worker(settings.Core.ScriptFile); + HaxeString script = "importScripts('" + settings.Core.ScriptFile + "')"; + var blob = new Blob(new[] + { + script + }); + _worker = new Worker(URL.CreateObjectURL(blob)); } - catch + catch (Exception e) { - // fallback to blob worker + // fallback to direct worker try { - HaxeString script = "importScripts('" + settings.Core.ScriptFile + "')"; - var blob = new Blob(new[] - { - script - }); - _worker = new Worker(URL.CreateObjectURL(blob)); + _worker = new Worker(settings.Core.ScriptFile); } - catch (Exception e) + catch { Logger.Error("Rendering", "Failed to create WebWorker: " + e); // TODO: fallback to synchronous mode } } + + _worker.PostMessage(new { cmd = "alphaTab.initialize", From 28e10e06fb909f9c3b2832fe0b4bdfb089da1f3b Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Fri, 20 Dec 2019 20:27:19 +0100 Subject: [PATCH 2/2] Added polyfill for IE --- Source/AlphaTab.JavaScript/Environment.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/AlphaTab.JavaScript/Environment.cs b/Source/AlphaTab.JavaScript/Environment.cs index c542800d5..3167ebf08 100644 --- a/Source/AlphaTab.JavaScript/Environment.cs +++ b/Source/AlphaTab.JavaScript/Environment.cs @@ -32,8 +32,9 @@ private static void PlatformInit() RegisterJQueryPlugin(); - Script.Write( - "untyped __js__(\"Math.log2 = Math.log2 || function(x) { return Math.log(x) * Math.LOG2E; };\");"); + // polyfills + Script.Write("untyped __js__(\"Math.log2 = Math.log2 || function(x) { return Math.log(x) * Math.LOG2E; };\");"); + Script.Write("untyped __js__(\"Int32Array.prototype.slice = Int32Array.prototype.slice || function(begin, end) { return new Int32Array(Array.prototype.slice.call(this, begin, end)) };\");"); // try to build the find the alphaTab script url in case we are not in the webworker already if (Lib.Global.document)