@@ -43,8 +43,8 @@ private void load(OsuConfigManager config, OsuGame? game)
4343 Caption = "Audio output backend" ,
4444 HintText = "Selects how BASS audio is delivered to the hardware.\n "
4545 + "• AudioTrack — default BASS backend, maximum compatibility (~80–120 ms latency).\n "
46- + "• AAudio — BASS uses Android's AAudio API directly; lower latency on Android 8.0+ . Takes effect after restart.\n "
47- + "• Oboe — routes BASS through Google's Oboe library with AAudio Exclusive + MMAP; lowest latency (~5–15 ms) on supported devices. Recommended." ,
46+ + "• AAudio — BASS uses Android's AAudio API; provides similar latency to AudioTrack with no measurable improvement . Takes effect after restart.\n "
47+ + "• Oboe — routes BASS through Google's Oboe library with AAudio Exclusive + MMAP; lowest latency (~4–8 ms) on supported devices. Recommended." ,
4848 Current = config . GetBindable < AndroidAudioOutput > ( OsuSetting . AndroidAudioOutput ) ,
4949 } )
5050 {
@@ -56,43 +56,30 @@ private void load(OsuConfigManager config, OsuGame? game)
5656 // audio device changed), making the offset feel "jittery". Hardware-latency
5757 // measurement is now exclusively triggered by clicking the button below: it
5858 // runs a 2 s sampling window, drops the warm-up samples, and applies the
59- // median of the remaining AAudio readings to AudioOffset. The button no-ops
59+ // full median of the Oboe readings as a negative AudioOffset. The button no-ops
6060 // (logging "already measuring") if clicked again within the active window,
6161 // so users can mash it without producing partial measurements.
6262 //
6363 // After a resync the restore button below becomes active so users can undo
6464 // if the hardware measurement doesn't match their perception.
6565 //
66- // HITSOUND-MUSIC ALIGNMENT NOTE:
67- // AudioOffset shifts the VISUAL timing of hit objects relative to the audio
68- // track. Because hitsound samples fire at the moment of player input (not
69- // at a pre-scheduled beatmap time), a non-zero offset shifts WHEN inputs
70- // arrive in the audio timeline: every 1 ms of negative AudioOffset creates
71- // 1 ms of hitsound-after-music lag. AudioOffset = 0 gives perfect
72- // hitsound-music synchronisation.
73- //
74- // Resync caps the applied value at 15 ms (the typical MMAP output-latency
75- // ceiling) to keep any hitsound-music desync below the human audibility
76- // threshold (~20 ms), even on devices whose DSP reports higher latency.
77- // If you find hitsounds still feel late relative to the music after Resync,
78- // lower the offset toward 0 using the slider in Settings → Audio. For the
79- // most accurate per-song tuning, use the in-game "Audio offset (this
80- // beatmap)" control during gameplay — the real-time hit-error bar gives
81- // direct feedback.
66+ // Both music and hitsounds travel through the same BASS → Oboe pipeline, so
67+ // they both experience the same hardware latency offset. AudioOffset corrects
68+ // the visual timing so notes appear when they should be hit; the audio output
69+ // for both music and hitsounds shifts together.
8270 //
8371 // IMPORTANT — Bluetooth speakers/headphones:
84- // The AAudio measurement captures the WIRED audio pipeline only. Bluetooth
85- // A2DP adds a further ~100–300 ms of wireless transmission delay that AAudio
72+ // The Oboe measurement captures the WIRED audio pipeline only. Bluetooth
73+ // A2DP adds a further ~100–300 ms of wireless transmission delay that Oboe
8674 // cannot see. For BT output, Resync will set a small wired-path value;
8775 // you must further adjust AudioOffset manually (positive = sounds arrive
8876 // late; negative = sounds arrive early) until music and hitsounds feel right.
8977 new SettingsButtonV2
9078 {
9179 Text = "Resync hardware audio offset" ,
92- TooltipText = "Measures the device's AAudio pipeline latency over 2 s and applies the result (capped at 15 ms) to the audio offset. "
93- + "Shifts VISUAL hit-object timing to match when you hear the music. "
94- + "HITSOUND NOTE: any non-zero offset creates an equal hitsound-after-music lag; AudioOffset = 0 keeps hitsounds perfectly in sync with the music. "
95- + "If hitsounds feel off after Resync, lower the offset toward 0 manually. "
80+ TooltipText = "Measures the device's Oboe pipeline latency over 2 s and applies the full result as a negative AudioOffset. "
81+ + "Shifts VISUAL hit-object timing so notes appear on screen when they should be hit. "
82+ + "Both music and hitsounds travel through the same BASS → Oboe pipeline, so audio timing shifts together. "
9683 + "For per-song tuning, use the in-game beatmap offset control during gameplay. "
9784 + "Does NOT include Bluetooth A2DP delay (~100–300 ms extra) — fine-tune manually for BT output." ,
9885 Action = ( ) => game ? . ResyncHardwareAudioOffset ( ) ,
0 commit comments