Fix audio params variation (#4699)

This commit is contained in:
metalgearsloth
2023-12-12 20:16:43 +11:00
committed by GitHub
parent 04b6d60d76
commit bfe8e687da
3 changed files with 25 additions and 6 deletions

View File

@@ -423,7 +423,7 @@ public sealed partial class AudioSystem : SharedAudioSystem
/// <inheritdoc />
public override (EntityUid Entity, AudioComponent Component)? PlayPredicted(SoundSpecifier? sound, EntityUid source, EntityUid? user, AudioParams? audioParams = null)
{
if (Timing.IsFirstTimePredicted || sound == null)
if (Timing.IsFirstTimePredicted && sound != null)
return PlayEntity(sound, Filter.Local(), source, false, audioParams);
return null; // uhh Lets hope predicted audio never needs to somehow store the playing audio....
@@ -431,7 +431,7 @@ public sealed partial class AudioSystem : SharedAudioSystem
public override (EntityUid Entity, AudioComponent Component)? PlayPredicted(SoundSpecifier? sound, EntityCoordinates coordinates, EntityUid? user, AudioParams? audioParams = null)
{
if (Timing.IsFirstTimePredicted || sound == null)
if (Timing.IsFirstTimePredicted && sound != null)
return PlayStatic(sound, Filter.Local(), coordinates, false, audioParams);
return null;
@@ -618,8 +618,7 @@ public sealed partial class AudioSystem : SharedAudioSystem
source.PlaybackPosition = offset;
// For server we will rely on the adjusted one but locally we will have to adjust it ourselves.
ApplyAudioParams(audioP, comp);
comp.Params = audioP;
ApplyAudioParams(comp.Params, comp);
source.StartPlaying();
return (entity, comp);
}

View File

@@ -157,7 +157,22 @@ internal abstract class BaseAudioSource : IAudioSource
}
/// <inheritdoc />
public float Pitch { get; set; }
public float Pitch
{
get
{
_checkDisposed();
AL.GetSource(SourceHandle, ALSourcef.Pitch, out var value);
Master._checkAlError();
return value;
}
set
{
_checkDisposed();
AL.Source(SourceHandle, ALSourcef.Pitch, value);
Master._checkAlError();
}
}
/// <inheritdoc />
public float Volume
@@ -189,7 +204,7 @@ internal abstract class BaseAudioSource : IAudioSource
{
AL.GetSource(SourceHandle, ALSourcef.Gain, out var priorGain);
// Default to 0 to avoid spiking audio, just means it will be muted for a frame in this case.
priorOcclusion = _gain == 0 ? 0f : priorGain / _gain;
priorOcclusion = _gain == 0 ? 1f : priorGain / _gain;
}
_gain = value;

View File

@@ -141,6 +141,11 @@ public abstract partial class SharedAudioSystem : EntitySystem
despawn.Lifetime = (float) length.TotalSeconds + 0.01f;
}
if (comp.Params.Variation != null && comp.Params.Variation.Value != 0f)
{
comp.Params.Pitch *= (float) RandMan.NextGaussian(1, comp.Params.Variation.Value);
}
return comp;
}