badaix / snapweb

Web interface for Snapcast
GNU General Public License v3.0
86 stars 31 forks source link

Improve audio latency #93

Closed mawe42 closed 1 week ago

mawe42 commented 1 week ago

This PR makes two improvements to the SnapWeb audio stream latency handling.

As the standardized-audio-context doesn't expose the outputLatency property, the first commits adds a getter that tries to fetch the AudioContext.outputLatency from the native AudioContext, if it exists. It improves the sync between SnapWeb and other (non-web) Snapcast clients dramatically.

The second commit sets the latencyHint of the AudioContext to "interactive". This not only reduces the output latency on most systems, but seems to make the output latency also more stable. On some platforms, the output latency varies over time depending on system load and other factors. Using "interactive" seems to make this a little less likely.

Tested on recent Chrome and Firefox on Linux. More tests would probably be a good idea.

badaix commented 1 week ago

Thanks, testing is always a problem without a QA team, most users avoid versions that are tagged as beta... Can you please check what went wrong in the CI?

Property '_nativeAudioContext' does not exist on type 'AudioContextPatched'.
mawe42 commented 1 week ago

The TS error should be resolved by the latest commit.

badaix commented 1 week ago

Thanks