ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
15.45k stars 2.3k forks source link

taiko inputs do not play hitsounds right before or during drumrolls and swells #23565

Closed tgi74 closed 1 year ago

tgi74 commented 1 year ago

Type

Game behaviour

Bug description

No hitsounds are produced when pressing inputs in taiko on a drumroll or a swell. Please note the "ghost tapping" in between hitobjects in the video, as hitsounds are also muted before hitting the actual drumroll/swell. Not shown in this video, but big-notes also seem to be affected (somewhat differently) by muting "ghost tapping" hitsounds.

As far as I tested, this seems to occur on all beatmaps (the one in the video is https://osu.ppy.sh/beatmapsets/5774#taiko/36349) and with all built-in skins (Argon / Triangles / Legacy).

This could be related to recent changes in hitsound banks.

This bug first appeared on 2023.511.0

Screenshots or videos

https://github.com/ppy/osu/assets/1854712/1245f4ae-5bac-4c98-86f4-df9ec6266e98

Version

2023.513.0

Logs

performance-input.log performance-update.log runtime.log updater.log database.log network.log performance.log performance-audio.log performance-draw.log

peppy commented 1 year ago

@tgi74 If possible can you test on https://github.com/ppy/osu/pull/23564? I fixed one case there which affects taiko.

bdach commented 1 year ago

I've tested the PR and this seems to be a different regression. Namely a combination of these two things:

https://github.com/ppy/osu/blob/267e63320f5bfa1b83d15c85e9eea62106611a36/osu.Game.Rulesets.Taiko/Objects/DrumRoll.cs#L101

https://github.com/ppy/osu/blob/267e63320f5bfa1b83d15c85e9eea62106611a36/osu.Game.Rulesets.Taiko/UI/DrumSampleTriggerSource.cs#L21-L26

Drum roll ticks have any non-finish sounds filtered out. DrumSampleTriggerSource will retrieve a tick via GetMostValidHitObject(), and then attempt to retrieve a hitnormal sound from it, which can never succeed.

@OliBomby what was the filter there supposed to be doing? It seems wrong. Removing it appears to fix.

OliBomby commented 1 year ago

@bdach The DrumRollTick is a TaikoStrongableHitObject so it should get a finish sample if it is strong, but it makes that without any bank, so I wanted the tick to inherit the bank and volume for that finish sample from the parent hitobject. At the time I didn't find any evidence that it every got a hitnormal sample, so I ignored those.

Adding hitnormal to the DrumRollTick seems like a sensible solution.

peppy commented 1 year ago

I was very hesitant about the taiko changes in that PR as I mentioned when commenting, so I'm kinda annoyed that this slipped through.

@bdach is it fine to leave this fix in your hands?

bdach commented 1 year ago

I'll give it a go tomorrow. I'm not fixing this without going back to code before the PR and getting some sort of test harness in place to make sure what I proposed above will indeed match prior behaviour, as it was mostly an off-the-cuff proposal.