1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-17 02:12:54 +08:00
Commit Graph

146 Commits

Author SHA1 Message Date
Bartłomiej Dach
e8a394f894
Fix argon volume-aware hitsounds not correctly playing immediately after object placement
Closes https://github.com/ppy/osu/issues/29832.

The underlying reason for the incorrect sample playback was an equality
comparer failure.

Samples are contained in several pools which are managed by the
playfield. In particular, the pools are keyed by `ISampleInfo`
instances. This means that for correct operation, `ISampleInfo` has to
implement `IEquatable<ISampleInfo>` and also provide an appropriately
correct `GetHashCode()` implementation. Different audible samples must
not compare equal to each other when represented by `ISampleInfo`.

As it turns out, `VolumeAwareHitSampleInfo` failed on this, due to not
overriding equality members. Therefore, a `new
HitSampleInfo(HitSampleInfo.HIT_NORMAL, HitSampleInfo.BANK_NORMAL,
volume: 70)` was allowed to compare equal to a
`VolumeAwareHitSampleInfo` wrapping it, *even though they correspond to
completely different sounds and go through entirely different lookup
path sequences*.

Therefore, to fix, provide more proper equality implementations for
`VolumeAwareHitSampleInfo`.

When testing note that this issue *only occurs immediately after
placing an object*. Saving and re-entering editor makes this issue go
away. I haven't looked too long into why, but the general gist of it is
ordering; it appears that a `normal-hitnormal` pool exists at point
of query of a new object placement, but does not seem to exist when
entering editor afresh. That said I'm not sure that ordering aspect of
this bug matters much if at all, since the two `IHitSampleInfo`s should
never be allowed to alias with each other at all wrt equality.
2024-09-23 13:38:26 +02:00
Bartłomiej Dach
7f08008059
Adjust AudioFilter to framework-side changes
Co-authored-by: Dan Balasescu <smoogipoo@smgi.me>
2024-06-18 07:30:46 +02:00
Jamie Taylor
27d78fdb08
Add fallback to find spinner samples without a bank prefix 2024-03-09 01:10:28 +09:00
Dean Herbert
7a96cf1289
Expose AudioFilter.IsAttached publicly 2024-02-26 21:15:44 +08:00
Dean Herbert
998d820666
Ensure audio filters can't be attached before load (or post-disposal)
Will probably fix https://github.com/ppy/osu/issues/27225?
2024-02-19 00:25:01 +08:00
Dean Herbert
b18b5b9977
Add inline note about deadlock 2023-12-26 12:06:56 +09:00
Bartłomiej Dach
f84b07e71a
Do not attempt to stop preview tracks when arriving from a "track completed" sync
This fixes an issue identified with the WASAPI implementation in
https://github.com/ppy/osu-framework/pull/6088. It has no real effect
on current `master`, but fixes a deadlock that occurs with the
aforementioned framework branch when one lets a preview track play out
to the end - at this point all audio will stop and an attempt to perform
any synchronous BASS operation (playing another track, seeking) will
result in a deadlock.

It isn't terribly clear as to why this is happening precisely, but
there does not appear to be any need to stop and seek at that point,
so this feels like a decent workaround even if the actual issue is
upstream (and will unblock pushing out WASAPI support to users).
2023-12-25 19:01:06 +01:00
Dean Herbert
27af07b74b Add basic implementation of argon osu!taiko hitsounds (volume / flourish / strong) 2023-07-05 18:44:27 +09:00
Dean Herbert
298989ffd2 Merge branch 'master' into sample-set-controls 2023-05-24 14:03:04 +09:00
Dean Herbert
510ebe1f23 Fix weird optional usage in HitSampleInfo.With 2023-05-17 14:11:52 +09:00
Dean Herbert
a8bc337006 Change default volume when constructing a HitSampleInfo to non-zero 2023-05-17 14:06:02 +09:00
Dean Herbert
83dcd78826 Make HitSampleInfo.Bank non-nullable 2023-05-16 18:12:56 +09:00
Joseph Madamba
ea624b8ad0 Reset preview track when stopping instead 2023-02-13 22:39:34 -08:00
Dean Herbert
27c497145f Fix the MOTHERLOAD of undetected issues that are now visible thanks to net6.0 2022-12-16 18:16:26 +09:00
Salman Ahmed
a457a2fbbf Fix disposal of playing preview track not unmuting game track 2022-12-05 14:45:32 +03:00
Dan Balasescu
7bc8908ca9 Partial everything 2022-11-27 00:00:27 +09:00
Dean Herbert
579d5b51eb Add and consume sample bank constants 2022-10-19 20:47:58 +09:00
Dean Herbert
786af81274 Fix PreviewTrack not disposing its owned audio Track 2022-08-05 14:15:01 +09:00
andy840119
6cccb6b848 Remove canBeNull: true. 2022-08-01 19:45:15 +08:00
andy840119
094793bbe3 Mark the GetTrack() return type as nullable. 2022-07-31 22:01:30 +08:00
andy840119
6c964dee30 Rename the nullable disable annotation in the Audio namespace and mark some properties as nullable. 2022-07-31 22:00:14 +08:00
Dean Herbert
25028bb7fa Fix editor clap/finish buttons being ordered against expectations 2022-07-19 22:36:11 +09:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Bartłomiej Dach
b92d95a17a
Fix mod panels playing samples when hidden at a higher level 2022-05-08 10:39:49 +02:00
Bartłomiej Dach
cbd1169495
Move cache declarations of ISamplePlaybackDisabler to interface 2022-05-08 10:38:58 +02:00
Bartłomiej Dach
9ae019eb39
Move ISamplePlaybackDisabler to more general namespace 2022-05-08 10:38:58 +02:00
Dean Herbert
1eed2436e6 Clean up unused resolved properties 2021-12-03 18:49:49 +09:00
Dean Herbert
7f9cc4d5ff Fix incorrect logging of preview tracks without track owner 2021-11-26 21:37:43 +09:00
Dean Herbert
3b485b5f37 Rewrite PreviewTrackManager to avoid constructing TrackBass locally
This paves the way for the framework code quality change
(https://github.com/ppy/osu-framework/pull/4873) which stops exposing
the constructor.

Most of the restructuring here is required to give `PreviewTrackManager`
an adjustable target to apply the global mute.
2021-11-09 17:38:12 +09:00
Dean Herbert
6944151486 Apply batch fixing of built-in types using var 2021-10-27 13:04:41 +09:00
Dean Herbert
5d1170aaf4 Remove unnecessary null check 2021-10-26 11:57:51 +09:00
Dean Herbert
94175bfb4a Update PreviewTrackManager to use IBeatmapSetInfo 2021-10-25 14:25:01 +09:00
Dean Herbert
29dfe33465 Rewrite AudioFilter to be easier to follow (and fix tests) 2021-10-13 15:17:20 +09:00
Dean Herbert
b37096f440 Avoid using bindable for AudioFilter cutoff
It doesn't play nicely with screen exiting, as it is automatically
unbound during the exit process. Easiest to just avoid using this for
now.
2021-10-13 13:25:55 +09:00
Dean Herbert
e578046b20 Rename Filter -> AudioFilter 2021-10-07 18:50:08 +09:00
Dean Herbert
0348c6c7e5 Apply some renaming and code quality fixes 2021-10-07 18:49:22 +09:00
Jamie Taylor
99fb86878e
Only detach filter on disposal if attached 2021-10-06 18:31:56 +09:00
Jamie Taylor
bd0c986144
Add asserts to ensure correct state when attaching/detaching the filter 2021-10-06 17:34:24 +09:00
Jamie Taylor
df182ba92b
Set fQ to recommended value from BASS developer to prevent filter calculations from overflowing when approaching nyquist 2021-10-06 11:29:03 +09:00
Jamie Taylor
2a4a376b87
Refactor Filter to behave closer to a Transformable 2021-10-02 01:32:47 +09:00
Jamie Taylor
968826c9e7
Fix typo 2021-09-30 15:17:39 +09:00
Jamie Taylor
2608d193a9
Refactor Filter component to be more re-usable 2021-09-29 20:30:01 +09:00
Jamie Taylor
94e2dbd7e7
Add a low-pass filter effect to music when certain popup dialogs are shown 2021-09-29 20:30:00 +09:00
Dean Herbert
804ca88d63 Update framework 2021-08-27 19:52:45 +09:00
smoogipoo
89f0739a4a Update with framework changes 2021-07-28 21:54:11 +09:00
smoogipoo
5b06a9d120 Apply changes required for AudioMixer 2021-07-27 03:55:49 +09:00
Dean Herbert
172e2e9b3f Fix audio previews not being adjusted in volume correctly 2021-02-17 20:51:17 +09:00
Bartłomiej Dach
15d9147edd Ensure equality member consistency for SampleInfo
The previous implementation of `SampleInfo`'s equality members was not
completely correct in its treatment of the `sampleNames` array. While
`Equals()` compared the values of `sampleNames` using `SequenceEqual()`,
therefore performing a structural check that inspects the contents of
both arrays, `GetHashCode()` used `HashCode.Combine()` directly on the
arrays, therefore operating on reference equality. This could cause the
pooling mechanism of samples to fail, as pointed out in #11079.

To resolve, change the `GetHashCode()` implementation such that it also
considers the contents of the array rather than just the reference to
the array itself. This is achieved by leveraging
`StructuralEqualityComparer`.

Additionally, as a bonus, an array sort was added to the constructor of
`SampleInfo`. This is intended to be a "canonicalisation" processing
step for the array of sample names. Thanks to that sort, two instances
of `SampleInfo` that have the same sample names but permutated will also
turn out to be equal and have the same hash codes, given the
implementation of both equality members. This gives `SampleInfo`
set-like semantics.
2020-12-03 23:25:53 +01:00
smoogipoo
e831c797f3 Merge branch 'master' into hit-sample-pooling 2020-12-02 14:45:24 +09:00
smoogipoo
2150cf1c52 Rename parameters 2020-12-02 10:55:48 +09:00