Skip to content

Commit

Permalink
Lower speech noise volume & refactor system (space-wizards#24579)
Browse files Browse the repository at this point in the history
* Lower speech noise sounds & refactor system christ fuck

* MORE
  • Loading branch information
mirrorcult authored Jan 28, 2024
1 parent 804c76f commit 740c298
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 54 deletions.
56 changes: 30 additions & 26 deletions Content.Server/Speech/SpeechNoiseSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,51 +24,55 @@ public override void Initialize()
SubscribeLocalEvent<SpeechComponent, EntitySpokeEvent>(OnEntitySpoke);
}

private void OnEntitySpoke(EntityUid uid, SpeechComponent component, EntitySpokeEvent args)
public SoundSpecifier? GetSpeechSound(Entity<SpeechComponent> ent, string message)
{
if (component.SpeechSounds == null) return;

var currentTime = _gameTiming.CurTime;
var cooldown = TimeSpan.FromSeconds(component.SoundCooldownTime);

// Ensure more than the cooldown time has passed since last speaking
if (currentTime - component.LastTimeSoundPlayed < cooldown) return;
if (ent.Comp.SpeechSounds == null)
return null;

// Play speech sound
string contextSound;
var prototype = _protoManager.Index<SpeechSoundsPrototype>(component.SpeechSounds);
var message = args.Message;
SoundSpecifier? contextSound;
var prototype = _protoManager.Index<SpeechSoundsPrototype>(ent.Comp.SpeechSounds);

// Different sounds for ask/exclaim based on last character
switch (args.Message[^1])
contextSound = message[^1] switch
{
case '?':
contextSound = prototype.AskSound.GetSound();
break;
case '!':
contextSound = prototype.ExclaimSound.GetSound();
break;
default:
contextSound = prototype.SaySound.GetSound();
break;
}
'?' => prototype.AskSound,
'!' => prototype.ExclaimSound,
_ => prototype.SaySound
};

// Use exclaim sound if most characters are uppercase.
int uppercaseCount = 0;
for (int i = 0; i < message.Length; i++)
{
if (char.IsUpper(message[i])) uppercaseCount++;
if (char.IsUpper(message[i]))
uppercaseCount++;
}
if (uppercaseCount > (message.Length / 2))
{
contextSound = contextSound = prototype.ExclaimSound.GetSound();
contextSound = prototype.ExclaimSound;
}

var scale = (float) _random.NextGaussian(1, prototype.Variation);
var pitchedAudioParams = component.AudioParams.WithPitchScale(scale);
contextSound.Params = ent.Comp.AudioParams.WithPitchScale(scale);
return contextSound;
}

private void OnEntitySpoke(EntityUid uid, SpeechComponent component, EntitySpokeEvent args)
{
if (component.SpeechSounds == null)
return;

var currentTime = _gameTiming.CurTime;
var cooldown = TimeSpan.FromSeconds(component.SoundCooldownTime);

// Ensure more than the cooldown time has passed since last speaking
if (currentTime - component.LastTimeSoundPlayed < cooldown)
return;

var sound = GetSpeechSound((uid, component), args.Message);
component.LastTimeSoundPlayed = currentTime;
_audio.PlayPvs(contextSound, uid, pitchedAudioParams);
_audio.PlayPvs(sound, uid);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Server.Chat.Systems;
using Content.Server.Speech;
using Content.Shared.Speech;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
Expand All @@ -14,6 +15,7 @@ namespace Content.Server.SurveillanceCamera;
public sealed class SurveillanceCameraSpeakerSystem : EntitySystem
{
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly SpeechSoundSystem _speechSound = default!;
[Dependency] private readonly ChatSystem _chatSystem = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
Expand All @@ -37,35 +39,12 @@ private void OnSpeechSent(EntityUid uid, SurveillanceCameraSpeakerComponent comp
var cd = TimeSpan.FromSeconds(component.SpeechSoundCooldown);

// this part's mostly copied from speech
// what is wrong with you?
if (time - component.LastSoundPlayed < cd
&& TryComp<SpeechComponent>(args.Speaker, out var speech)
&& speech.SpeechSounds != null
&& _prototypeManager.TryIndex(speech.SpeechSounds, out SpeechSoundsPrototype? speechProto))
&& TryComp<SpeechComponent>(args.Speaker, out var speech))
{
var sound = args.Message[^1] switch
{
'?' => speechProto.AskSound,
'!' => speechProto.ExclaimSound,
_ => speechProto.SaySound
};

var uppercase = 0;
for (var i = 0; i < args.Message.Length; i++)
{
if (char.IsUpper(args.Message[i]))
{
uppercase++;
}
}

if (uppercase > args.Message.Length / 2)
{
sound = speechProto.ExclaimSound;
}

var scale = (float) _random.NextGaussian(1, speechProto.Variation);
var param = speech.AudioParams.WithPitchScale(scale);
_audioSystem.PlayPvs(sound, uid, param);
var sound = _speechSound.GetSpeechSound((args.Speaker, speech), args.Message);
_audioSystem.PlayPvs(sound, uid);

component.LastSoundPlayed = time;
}
Expand Down
2 changes: 1 addition & 1 deletion Content.Shared/Speech/SpeechComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public sealed partial class SpeechComponent : Component
};

[DataField]
public AudioParams AudioParams = AudioParams.Default.WithVolume(6f).WithRolloffFactor(4.5f);
public AudioParams AudioParams = AudioParams.Default.WithVolume(-2f).WithRolloffFactor(4.5f);

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
Expand Down

0 comments on commit 740c298

Please sign in to comment.