denpadokei / HttpSiraStatus

Live game status over web sockets.
MIT License
24 stars 3 forks source link

[7.1.5] Note events delayed/out of sync #27

Closed Protected closed 2 years ago

Protected commented 2 years ago

We were discussing yesterday on the HTTP status repository how note events in your mod sometimes (for certain levels) seem to arrive with a delay, or out of sync, or maybe they are even skipped (once the events arriving stop matching the notes in the game it's hard to tell exactly what's going on since we can't visually match the notes and the events).

This did not use to happen with HTTP status in 1.18 (HTTP status is no longer maintained and doesn't work in the current version). Might it be necessary to improve performance of the HttpSiraStatus stack? How does HttpSiraStatus handle multiple connections?

There is video evidence in that thread from myself and Morgolf. Throughout my video you can see how at the end of a song one of the tracks may appear way behind the other, even though both tracks are using the same code and processing events from HttpSiraStatus in the same way. In Morgolf's video you can see the overlay to keep up, as well.

Certainly more could be done to formally debug the issue, but we would appreciate if you could eventually spend some time looking into it. AFAIK yours is currently the only working overlay solution with note event support. Perhaps it would attract more contributors if you released on the Discord or ModAssistant too!

BeatSaber version: 1.22.1(on my end) HTTP Status version: Sira 7.1.5 Platform: HTC Vive

denpadokei commented 2 years ago

Thanks for the report. I have looked at the archives. In this case, are you using one overlay for the score and four for the note cut?

Protected commented 2 years ago

That sounds correct:

@Morgolf can explain their setup.

Morgolf commented 2 years ago

I have a setup with just 2 overlays where it seems that one (the one that does not depend on note events) does keep up well (this one https://github.com/rynan4818/beat-saber-overlay) while the one that depends on note events to visualize note cuts and hit scores for individual notes seems to not be able to keep up, mostly happens during faster songs but sometimes I noticed it can slow down in slower songs too (this is the one that doesn't keep up: https://github.com/EmilMalanczak/beat-saber-overlay) Here is an example video of it not keeping up, notice how bottom right of the screen overlay slows down while top right seems to be fine: https://www.twitch.tv/videos/1524287990

The bottom right overlay did not struggle to keep up when using the original HTTP-Status on 1.18.3 version of the game but sadly it is no longer updated.

denpadokei commented 2 years ago

It looks like the overlay score doesn't have enough frame rate to spawn. It looks like the depiction process isn't catching up, probably because the browser on OBS is experiencing some processing problems.

Morgolf commented 2 years ago

Well yes, except it works fine while using original http-status hinting Sira status might be at fault here. This overlay also has an option to test it feeding it random data at very high rate and it is working fine while being fed random data.

denpadokei commented 2 years ago

I have built the environment and added the overlay and it appears to be working correctly. https://github.com/denpadokei/beat-saber-overlay-1

In the archive it appears to be working fine after resetting the overlay. Does this happen when the overlay is displayed for an extended period of time?

Morgolf commented 2 years ago

Hmm, you seem to be right, maybe it was somehow related to the fact that I was running the overlay locally instead of having it hosted, which is again surprising since it worked fine locally with the OG http-status. Thanks for the check, I will try to figure out how to host in on github pages like you did (unless you can help me out with it, since I have no idea how to do it myself, my version of this overlay files are a little bit different since I changed some positions of the elements in config so I would preferably like to upload my copy to use)

Morgolf commented 2 years ago

I have tried your hosted version and it seems to perform correctly (usually my benchmark was top 1 play replay on OV since its a block spam and your hosted version seems to be working perfectly stable)

denpadokei commented 2 years ago

It is possible that there are still some problems due to the long time execution, but I am relieved to see that the system seems to be working properly for the time being.

I added the following files to create github.io https://github.com/denpadokei/beat-saber-overlay-1/blob/main/.github/workflows/gh-pages.yml

The following changes were made to ensure the success of the Github Action https://github.com/denpadokei/beat-saber-overlay-1/commit/ff24695d79373d320ca76a378cb5d76415425f5f https://github.com/denpadokei/beat-saber-overlay-1/commit/8e35889a14b94f3f9bce5fd0377a33a9004c6056 https://github.com/denpadokei/beat-saber-overlay-1/commit/d343df63808801af371d4c9a9ceb5c3ea9943834

You can probably now create your own repository page.

Morgolf commented 2 years ago

Alright thanks, I will now go on a journey to try and figure out how to host it myself on a repo page. I allowed myself to fork off of what you have :)

Protected commented 2 years ago

You think there's no issue on the HttpSiraStatus side? My overlay is hosted on github (it must be, in fact, due to a CSS issue explained in the wiki) and I have a pretty beefy CPU.

denpadokei commented 2 years ago

I don't think it is completely bug-free, as I haven't been able to debug much about the Notes event. I will continue to investigate the out-of-sync bug in beatsaber-notehistory.

Protected commented 2 years ago

Thanks. Is there anything you'd like me to test?

(Though I can't test right now, but soon)

denpadokei commented 2 years ago

I would like to know what mods you have installed and I would like the _latest.log file.

It should be in "(InstallFolder)/Logs".

Protected commented 2 years ago

_latest.log Here you go. Line 175

Morgolf commented 2 years ago

@denpadokei Sorry to bother you again, I managed to deploy your version that I forked but I am failing to make changed to the config, I need to make theese changes to get rid of the button that generates data and the borders but whenever I make theese changes it fails to deploy and I have no clue how to get it done properly (as I have no idea what Im doing), here are the changes that I think should work? d5b3791f2907c68b9d9b621fe8b0366c9c27d16a

Protected commented 2 years ago

Instead of commenting out the border style try renaming the key "border" to something meaningless (or delete it entirely)?

denpadokei commented 2 years ago

@Protected Test with this. https://github.com/denpadokei/HttpSiraStatus/releases/tag/8.0.0-rc1

denpadokei commented 2 years ago

@Morgolf Have you tried this? image

Morgolf commented 2 years ago

I managed to solve it like this: image But I am still having issue with getting rid of the button for testing, this part, if I delete or comment it out, deploying fails image

denpadokei commented 2 years ago

I commented out the button and the job still ran. What is the output in the Github Action log?

Morgolf commented 2 years ago

I gave up on it and decided to leave the button in there and just cut it out in OBS browser source, the button might be useful someday, who knows. Thanks for all the help!

Protected commented 2 years ago

Sorry, we're undergoing an insane heat wave and beat saber would be a bad idea but I'll test ASAP

denpadokei commented 2 years ago

No problem, there is plenty of time.

Protected commented 2 years ago

https://www.twitch.tv/videos/1530949958?t=00h06m20s

Everything seems to be in sync with each other now, which is nice. Thanks!

Not nearly as important, but I wonder why the cuts are showing up one beat (ish) above the sabers. The position of the overlay sabers (which are matching the cut position, as detailed in the overlay's wiki) is calculated based on Beat Saber's actual jump distance formulas (unless that changed). I haven't tested thoroughly yet (just this has made me sweat a dozen buckets), but I wonder if the note spawn event is being emitted on a delay, such as on the next beat? This would mean the note spawn and note cut are one beat closer to each other, which would explain why the note cut is displaying higher up than it should.

Protected commented 2 years ago

Nevermind, it seems fine on the other maps. I think it's fixed then?

denpadokei commented 2 years ago

Thank you for the verification. I am not sure, but the reason for the discrepancy in certain maps may be that the calculation of half jump duration has changed in 1.19.0.

The formula used in the overlay is probably based on the V2 in the image below.

image

https://github.com/Protected/beatsaber-notehistory/blob/master/notehistory/notehistory.js#L483

Protected commented 2 years ago

Thanks for verifying that! Guess I'll have to fix it one of these days.