Sync sequencer tick correctly
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user