Merge pull request #362 from frosty-dev/tts_xrenoidUpdate

[Feat] TTS 15 new voices + effects
This commit is contained in:
Valtos
2023-09-06 16:54:44 +07:00
committed by Aviu00
parent bc75064fc6
commit 6b1f5be5a7
4 changed files with 117 additions and 5 deletions

View File

@@ -55,7 +55,7 @@ public sealed class TTSManager
/// <param name="text">SSML formatted text</param>
/// <returns>OGG audio bytes</returns>
/// <exception cref="Exception">Throws if url or token CCVar not set or http request failed</exception>
public async Task<byte[]?> ConvertTextToSpeech(string speaker, string text, string pitch, string rate)
public async Task<byte[]?> ConvertTextToSpeech(string speaker, string text, string pitch, string rate, string? effect = null)
{
var url = _cfg.GetCVar(WhiteCVars.TtsApiUrl);
var maxCacheSize = _cfg.GetCVar(WhiteCVars.TtsMaxCacheSize);
@@ -78,7 +78,8 @@ public sealed class TTSManager
Text = text,
Speaker = speaker,
Pitch = pitch,
Rate = rate
Rate = rate,
Effect = effect
};
var request = CreateRequestLink(url, body);
@@ -132,6 +133,9 @@ public sealed class TTSManager
query["rate"] = body.Rate;
query["file"] = "1";
query["ext"] = "ogg";
if (body.Effect != null)
query["effect"] = body.Effect;
uriBuilder.Query = query.ToString();
return uriBuilder.ToString();
}
@@ -164,6 +168,9 @@ public sealed class TTSManager
[JsonPropertyName("rate")]
public string Rate { get; set; } = default!;
[JsonPropertyName("effect")]
public string? Effect { get; set; }
}
private struct GenerateVoiceResponse

View File

@@ -58,7 +58,7 @@ public sealed partial class TTSSystem : EntitySystem
return;
var message = FormattedMessage.RemoveMarkup(ev.Message);
var soundData = await GenerateTTS(null, message, ttsPrototype.Speaker);
var soundData = await GenerateTTS(null, message, ttsPrototype.Speaker, speechRate: "slow", effect: "announce");
if (soundData == null)
return;
@@ -211,7 +211,7 @@ public sealed partial class TTSSystem : EntitySystem
_ttsManager.ResetCache();
}
private async Task<byte[]?> GenerateTTS(EntityUid? uid, string text, string speaker, string? speechPitch = null, string? speechRate = null)
private async Task<byte[]?> GenerateTTS(EntityUid? uid, string text, string speaker, string? speechPitch = null, string? speechRate = null, string? effect = null)
{
var textSanitized = Sanitize(text);
if (textSanitized == "")
@@ -238,7 +238,7 @@ public sealed partial class TTSSystem : EntitySystem
rate = speechRate;
}
return await _ttsManager.ConvertTextToSpeech(speaker, textSanitized, pitch, rate);
return await _ttsManager.ConvertTextToSpeech(speaker, textSanitized, pitch, rate, effect);
}
}

View File

@@ -39,3 +39,18 @@ tts-voice-name-sheogorath = Шеогорат
tts-voice-name-turret-floor = Турель
tts-voice-name-cirilla = Цири
tts-voice-name-lambert = Ламберт
tts-voice-name-polina = Полина
tts-voice-name-arthas = Артас
tts-voice-name-xrenoid = Хреноид
tts-voice-name-azir = Азир
tts-voice-name-caitlyn = Кэйтлин
tts-voice-name-ekko = Экко
tts-voice-name-twitch = Твич
tts-voice-name-strelok = Стрелок
tts-voice-name-ziggs = Зиггс
tts-voice-name-tracer = Трейсер
tts-voice-name-illidan = Иллидан
tts-voice-name-rexxar = Рексар
tts-voice-name-voljin = Вол'джин
tts-voice-name-forester = Лесник
tts-voice-name-sidorovich = Сидорович

View File

@@ -254,3 +254,93 @@
name: tts-voice-name-lambert
sex: Male
speaker: lambert
- type: ttsVoice
id: Polina
name: tts-voice-name-polina
sex: Female
speaker: polina
- type: ttsVoice
id: Arthas
name: tts-voice-name-arthas
sex: Male
speaker: arthas
- type: ttsVoice
id: Xrenoid
name: tts-voice-name-xrenoid
sex: Male
speaker: xrenoid
- type: ttsVoice
id: Azir
name: tts-voice-name-azir
sex: Male
speaker: azir
- type: ttsVoice
id: Caitlyn
name: tts-voice-name-caitlyn
sex: Female
speaker: caitlyn
- type: ttsVoice
id: Ekko
name: tts-voice-name-ekko
sex: Male
speaker: ekko
- type: ttsVoice
id: Twitch
name: tts-voice-name-twitch
sex: Male
speaker: twitch
- type: ttsVoice
id: Strelok
name: tts-voice-name-strelok
sex: Male
speaker: strelok
- type: ttsVoice
id: Ziggs
name: tts-voice-name-ziggs
sex: Male
speaker: ziggs
- type: ttsVoice
id: Tracer
name: tts-voice-name-tracer
sex: Female
speaker: tracer
- type: ttsVoice
id: Illidan
name: tts-voice-name-illidan
sex: Male
speaker: illidan
- type: ttsVoice
id: Rexxar
name: tts-voice-name-rexxar
sex: Male
speaker: rexxar
- type: ttsVoice
id: Voljin
name: tts-voice-name-voljin
sex: Male
speaker: voljin
- type: ttsVoice
id: Forester
name: tts-voice-name-forester
sex: Male
speaker: forester
- type: ttsVoice
id: Sidorovich
name: tts-voice-name-sidorovich
sex: Male
speaker: sidorovich