Sync sequencer tick correctly

This commit is contained in:
zumorica
2020-05-21 17:39:48 +02:00
parent 78aa4fb872
commit 0235f6096e
2 changed files with 4 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ namespace Content.Client.GameObjects.Components.Instruments
[CanBeNull] [CanBeNull]
private IMidiRenderer _renderer; private IMidiRenderer _renderer;
private byte _instrumentProgram = 1; private byte _instrumentProgram = 1;
private uint _syncSequencerTick;
/// <summary> /// <summary>
/// A queue of MidiEvents to be sent to the server. /// A queue of MidiEvents to be sent to the server.
@@ -161,8 +162,7 @@ namespace Content.Client.GameObjects.Components.Instruments
for (var i = 0; i < midiEventMessage.MidiEvent.Length; i++) for (var i = 0; i < midiEventMessage.MidiEvent.Length; i++)
{ {
var ev = midiEventMessage.MidiEvent[i]; var ev = midiEventMessage.MidiEvent[i];
var delta = ((uint)TimeBetweenNetMessages*1250) + ev.Timestamp; var delta = ((uint)TimeBetweenNetMessages*1250) + ev.Timestamp - _syncSequencerTick;
_renderer?.ScheduleMidiEvent(ev, delta, true); _renderer?.ScheduleMidiEvent(ev, delta, true);
} }
break; break;
@@ -178,7 +178,7 @@ namespace Content.Client.GameObjects.Components.Instruments
{ {
Logger.Info($"WE GOT STATE: {state.Playing} {state.SequencerTick}"); Logger.Info($"WE GOT STATE: {state.Playing} {state.SequencerTick}");
SetupRenderer(); SetupRenderer();
if (_renderer != null) _renderer.SequencerTick = state.SequencerTick; _syncSequencerTick = state.SequencerTick;
} }
else else
EndRenderer(); EndRenderer();

View File

@@ -95,7 +95,7 @@ namespace Content.Server.GameObjects.Components.Instruments
if(++_midiEventCount <= MaxMidiEventsPerSecond) if(++_midiEventCount <= MaxMidiEventsPerSecond)
SendNetworkMessage(midiEventMsg); SendNetworkMessage(midiEventMsg);
_lastSequencerTick = midiEventMsg.MidiEvent[-1].Timestamp; _lastSequencerTick = midiEventMsg.MidiEvent[^1].Timestamp;
break; break;
case InstrumentStartMidiMessage startMidi: case InstrumentStartMidiMessage startMidi:
Playing = true; Playing = true;