public virtual void HandleWorkerMessage(DOMEvent e)
{
var data = e.As<MessageEvent>().data;
var cmd = data.Member("cmd").As<string>();
switch (cmd)
{
// responses
case "isReadyForPlay":
case "getState":
case "getMasterVolume":
case "isSoundFontLoaded":
case "isMidiLoaded":
TriggerEvent(cmd, new[] { data.Member("value") });
break;
// events
case "ready":
_isWorkerReady = true;
CheckForReadyState();
break;
case "positionChanged":
TriggerEvent(cmd, new[] { data.Member("currentTime"), data.Member("endTime"), data.Member("currentTick"), data.Member("endTick") });
break;
case "playerStateChanged":
TriggerEvent(cmd, new[] { data.Member("state") });
break;
case "finished":
TriggerEvent(cmd);
break;
case "soundFontLoad":
TriggerEvent(cmd, new[] { data.Member("loaded"), data.Member("total") });
break;
case "soundFontLoaded":
TriggerEvent(cmd);
break;
case "soundFontLoadFailed":
TriggerEvent(cmd);
break;
case "midiLoad":
TriggerEvent(cmd, new[] { data.Member("loaded"), data.Member("total") });
break;
case "midiFileLoaded":
TriggerEvent(cmd);
break;
case "midiFileLoadFailed":
TriggerEvent(cmd);
break;
case "readyForPlay":
TriggerEvent(cmd, new[] { data.Member("value") });
break;
case "log":
Log(data.Member("level").As<LogLevel>(), data.Member("message").As<string>());
break;
// js player communication
case "playerSequencerFinished":
_player.SequencerFinished();
break;
case "playerAddSamples":
_player.AddSamples(data.Member("samples").As<SampleArray>());
break;
case "playerPlay":
_player.Play();
break;
case "playerPause":
_player.Pause();
break;
case "playerStop":
_player.Stop();
break;
case "playerSeek":
_player.Seek(data.Member("pos").As<int>());
break;
case "setPlaybackSpeed":
_player.SetPlaybackSpeed(data.Member("value").As<float>());
break;
}
}