From 740c298d2fb5ec5fb74ded3eee667251c613fd64 Mon Sep 17 00:00:00 2001 From: Kara Date: Sun, 28 Jan 2024 03:49:55 -0700 Subject: [PATCH] Lower speech noise volume & refactor system (#24579) * Lower speech noise sounds & refactor system christ fuck * MORE --- Content.Server/Speech/SpeechNoiseSystem.cs | 56 ++++++++++--------- .../SurveillanceCameraSpeakerSystem.cs | 33 ++--------- Content.Shared/Speech/SpeechComponent.cs | 2 +- 3 files changed, 37 insertions(+), 54 deletions(-) diff --git a/Content.Server/Speech/SpeechNoiseSystem.cs b/Content.Server/Speech/SpeechNoiseSystem.cs index 4f66a0828b..5530f3fe57 100644 --- a/Content.Server/Speech/SpeechNoiseSystem.cs +++ b/Content.Server/Speech/SpeechNoiseSystem.cs @@ -24,51 +24,55 @@ namespace Content.Server.Speech SubscribeLocalEvent(OnEntitySpoke); } - private void OnEntitySpoke(EntityUid uid, SpeechComponent component, EntitySpokeEvent args) + public SoundSpecifier? GetSpeechSound(Entity 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(component.SpeechSounds); - var message = args.Message; + SoundSpecifier? contextSound; + var prototype = _protoManager.Index(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); } } } diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs index ce3d8568ab..7544fc376b 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs @@ -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; @@ -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!; @@ -37,35 +39,12 @@ public sealed class SurveillanceCameraSpeakerSystem : EntitySystem var cd = TimeSpan.FromSeconds(component.SpeechSoundCooldown); // this part's mostly copied from speech + // what is wrong with you? if (time - component.LastSoundPlayed < cd - && TryComp(args.Speaker, out var speech) - && speech.SpeechSounds != null - && _prototypeManager.TryIndex(speech.SpeechSounds, out SpeechSoundsPrototype? speechProto)) + && TryComp(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; } diff --git a/Content.Shared/Speech/SpeechComponent.cs b/Content.Shared/Speech/SpeechComponent.cs index 96e05502ad..272d9ef8ca 100644 --- a/Content.Shared/Speech/SpeechComponent.cs +++ b/Content.Shared/Speech/SpeechComponent.cs @@ -41,7 +41,7 @@ namespace Content.Shared.Speech }; [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] -- 2.52.0