mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 10:21:18 +03:00
Move TTS preview to server
This commit is contained in:
parent
6625e91ee1
commit
4b39cd85a8
5 changed files with 36 additions and 43 deletions
|
|
@ -1,37 +1,18 @@
|
|||
using Content.Client.Corvax.TTS;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Client.Lobby;
|
||||
|
||||
public sealed partial class LobbyUIController
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _rng = default!;
|
||||
[UISystemDependency] private readonly TTSSystem _tts = default!;
|
||||
|
||||
private readonly List<string> _sampleText =
|
||||
new()
|
||||
{
|
||||
"Съешь же ещё этих мягких французских булок, да выпей чаю.",
|
||||
"Клоун, прекрати разбрасывать банановые кожурки офицерам под ноги!",
|
||||
"Капитан, вы уверены что хотите назначить клоуна на должность главы персонала?",
|
||||
"Эс Бэ! Тут человек в сером костюме, с тулбоксом и в маске! Помогите!!",
|
||||
"Учёные, тут странная аномалия в баре! Она уже съела мима!",
|
||||
"Я надеюсь что инженеры внимательно следят за сингулярностью...",
|
||||
"Вы слышали эти странные крики в техах? Мне кажется туда ходить небезопасно.",
|
||||
"Вы не видели Гамлета? Мне кажется он забегал к вам на кухню.",
|
||||
"Здесь есть доктор? Человек умирает от отравленного пончика! Нужна помощь!",
|
||||
"Вам нужно согласие и печать квартирмейстера, если вы хотите сделать заказ на партию дробовиков.",
|
||||
"Возле эвакуационного шаттла разгерметизация! Инженеры, нам срочно нужна ваша помощь!",
|
||||
"Бармен, налей мне самого крепкого вина, которое есть в твоих запасах!"
|
||||
};
|
||||
|
||||
public void PlayTTS()
|
||||
{
|
||||
// Test moment
|
||||
if (_profile == null || _stateManager.CurrentState is not LobbyState)
|
||||
return;
|
||||
|
||||
_tts.RequestGlobalTTS(_rng.Pick(_sampleText), _profile.Voice);
|
||||
_tts.RequestPreviewTTS(_profile.Voice);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,9 +53,9 @@ public sealed class TTSSystem : EntitySystem
|
|||
_contentRoot.Dispose();
|
||||
}
|
||||
|
||||
public void RequestGlobalTTS(string text, string voiceId)
|
||||
public void RequestPreviewTTS(string voiceId)
|
||||
{
|
||||
RaiseNetworkEvent(new RequestGlobalTTSEvent(text, voiceId));
|
||||
RaiseNetworkEvent(new RequestPreviewTTSEvent(voiceId));
|
||||
}
|
||||
|
||||
private void OnTtsVolumeChanged(float volume)
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using Content.Shared.GameTicking;
|
|||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.Corvax.TTS;
|
||||
|
||||
|
|
@ -16,6 +17,24 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly TTSManager _ttsManager = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _xforms = default!;
|
||||
[Dependency] private readonly IRobustRandom _rng = default!;
|
||||
|
||||
private readonly List<string> _sampleText =
|
||||
new()
|
||||
{
|
||||
"Съешь же ещё этих мягких французских булок, да выпей чаю.",
|
||||
"Клоун, прекрати разбрасывать банановые кожурки офицерам под ноги!",
|
||||
"Капитан, вы уверены что хотите назначить клоуна на должность главы персонала?",
|
||||
"Эс Бэ! Тут человек в сером костюме, с тулбоксом и в маске! Помогите!!",
|
||||
"Учёные, тут странная аномалия в баре! Она уже съела мима!",
|
||||
"Я надеюсь что инженеры внимательно следят за сингулярностью...",
|
||||
"Вы слышали эти странные крики в техах? Мне кажется туда ходить небезопасно.",
|
||||
"Вы не видели Гамлета? Мне кажется он забегал к вам на кухню.",
|
||||
"Здесь есть доктор? Человек умирает от отравленного пончика! Нужна помощь!",
|
||||
"Вам нужно согласие и печать квартирмейстера, если вы хотите сделать заказ на партию дробовиков.",
|
||||
"Возле эвакуационного шаттла разгерметизация! Инженеры, нам срочно нужна ваша помощь!",
|
||||
"Бармен, налей мне самого крепкого вина, которое есть в твоих запасах!"
|
||||
};
|
||||
|
||||
private const int MaxMessageChars = 100 * 2; // same as SingleBubbleCharLimit * 2
|
||||
private bool _isEnabled = false;
|
||||
|
|
@ -28,7 +47,7 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
SubscribeLocalEvent<TTSComponent, EntitySpokeEvent>(OnEntitySpoke);
|
||||
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnRoundRestartCleanup);
|
||||
|
||||
SubscribeNetworkEvent<RequestGlobalTTSEvent>(OnRequestGlobalTTS);
|
||||
SubscribeNetworkEvent<RequestPreviewTTSEvent>(OnRequestPreviewTTS);
|
||||
}
|
||||
|
||||
private void OnRoundRestartCleanup(RoundRestartCleanupEvent ev)
|
||||
|
|
@ -36,14 +55,14 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
_ttsManager.ResetCache();
|
||||
}
|
||||
|
||||
private async void OnRequestGlobalTTS(RequestGlobalTTSEvent ev, EntitySessionEventArgs args)
|
||||
private async void OnRequestPreviewTTS(RequestPreviewTTSEvent ev, EntitySessionEventArgs args)
|
||||
{
|
||||
if (!_isEnabled ||
|
||||
ev.Text.Length > MaxMessageChars ||
|
||||
!_prototypeManager.TryIndex<TTSVoicePrototype>(ev.VoiceId, out var protoVoice))
|
||||
return;
|
||||
|
||||
var soundData = await GenerateTTS(ev.Text, protoVoice.Speaker);
|
||||
var previewText = _rng.Pick(_sampleText);
|
||||
var soundData = await GenerateTTS(previewText, protoVoice.Speaker);
|
||||
if (soundData is null)
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Corvax.TTS;
|
||||
|
||||
// ReSharper disable once InconsistentNaming
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class RequestGlobalTTSEvent : EntityEventArgs
|
||||
{
|
||||
public string Text { get; }
|
||||
public string VoiceId { get; }
|
||||
|
||||
public RequestGlobalTTSEvent(string text, string voiceId)
|
||||
{
|
||||
Text = text;
|
||||
VoiceId = voiceId;
|
||||
}
|
||||
}
|
||||
10
Content.Shared/Corvax/TTS/RequestPreviewTTSEvent.cs
Normal file
10
Content.Shared/Corvax/TTS/RequestPreviewTTSEvent.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Corvax.TTS;
|
||||
|
||||
// ReSharper disable once InconsistentNaming
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class RequestPreviewTTSEvent(string voiceId) : EntityEventArgs
|
||||
{
|
||||
public string VoiceId { get; } = voiceId;
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue