Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/TextToTalk.Lexicons/LexiconManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public string MakeSsml(
bool includeSpeakAttributes = true)

{
text = System.Security.SecurityElement.Escape(text);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be ignored as it was already added as a bugfix.

foreach (var (_, lexicon) in this.lexicons)
{
foreach (var lexeme in lexicon.Lexemes.Where(lexeme => text.Contains(lexeme.Grapheme)))
Expand Down
192 changes: 132 additions & 60 deletions src/TextToTalk.Tests/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -87,119 +87,114 @@
"resolved": "14.0.1",
"contentHash": "y0WWyUE6dhpGdolK3iKgwys05/nZaVf4ZPtIjpLhJBZvHxkkiE23zYRo7K7uqAgoK/QvK5cqF6l3VG5AbgC6KA=="
},
"Fare": {
"type": "Transitive",
"resolved": "2.2.1",
"contentHash": "21XZo/yuXK1k0EUhdLnjgRD4n0HQYmPFchV6uaORcRc65rasZ1vdm2dmJXPBKZiIBztRRYRmmg/B76W721VWkA=="
},
"Google.Api.CommonProtos": {
"type": "Transitive",
"resolved": "2.16.0",
"contentHash": "37MuZrE9AAqHAdYgFLoTHydAiXDRriQZGVKEg6fr6ASnrY5GtauYXnQrGk5x2K3NmYzEXe+wkpaPVmxjb3NKjg==",
"resolved": "2.17.0",
"contentHash": "elfQPknFr495hm7vdy6ZlgyQh6yzZq9TU7sS35L/Fj/fqjM/mUGau9gVJLhvQEtUlPjtR80hpn/m9HvBMyCXIw==",
"dependencies": {
"Google.Protobuf": "[3.28.2, 4.0.0)"
"Google.Protobuf": "[3.31.1, 4.0.0]"
}
},
"Google.Api.Gax": {
"type": "Transitive",
"resolved": "4.9.0",
"contentHash": "fjHHYcQ99u0ztqwT537rvVtJMdDy6G2VHBZ+F1cBjDGYNVZfrpk40DMQ/OpUGToT9ZGHVirhh3eJ73bw2ANVPQ==",
"resolved": "4.12.1",
"contentHash": "G62dRNOv5DolfRviT6CCrL2a5nZ/CWWdRzhADkGnpCkYSOc3QnH5xxRvZiOKuHU8weJ/pAqAqrj7+T9IWdlu2Q==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"Newtonsoft.Json": "13.0.3"
"Newtonsoft.Json": "13.0.4"
}
},
"Google.Api.Gax.Grpc": {
"type": "Transitive",
"resolved": "4.9.0",
"contentHash": "ToCx/0cs+wJ9j7vzKRcPAKneJVZrz/s9JhW9QsFx1dar9WzTxawQZ8xTjyieSy8tY0UiYCL1qYkn/iRrklYnSA==",
"resolved": "4.12.1",
"contentHash": "W3LjuitOWxWyvbwqeHvpgp0LdshEiTnw/pneDAfAhQ02VgU2gVEzSXfGNPsvL8hDPBXjngR/fWNme8Kungwwkw==",
"dependencies": {
"Google.Api.CommonProtos": "2.16.0",
"Google.Api.Gax": "4.9.0",
"Google.Apis.Auth": "1.68.0",
"Grpc.Auth": "2.66.0",
"Grpc.Core.Api": "2.66.0",
"Grpc.Net.Client": "2.66.0",
"Google.Api.CommonProtos": "2.17.0",
"Google.Api.Gax": "4.12.1",
"Google.Apis.Auth": "1.72.0",
"Grpc.Auth": "[2.71.0, 3.0.0)",
"Grpc.Core.Api": "[2.71.0, 3.0.0)",
"Grpc.Net.Client": "[2.71.0, 3.0.0)",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0"
}
},
"Google.Apis": {
"type": "Transitive",
"resolved": "1.68.0",
"contentHash": "s2MymhdpH+ybZNBeZ2J5uFgFHApBp+QXf9FjZSdM1lk/vx5VqIknJwnaWiuAzXxPrLEkesX0Q+UsiWn39yZ9zw==",
"resolved": "1.72.0",
"contentHash": "QbSJ08W7QuqsfzDPOZDHl1aFzCYwMcfBoHqQRh7koglwDN5WacShCKYMpU/zR1Pf3h3sH6JTGEeM/txAxaJuEg==",
"dependencies": {
"Google.Apis.Core": "1.68.0"
"Google.Apis.Core": "1.72.0"
}
},
"Google.Apis.Auth": {
"type": "Transitive",
"resolved": "1.68.0",
"contentHash": "hFx8Qz5bZ4w0hpnn4tSmZaaFpjAMsgVElZ+ZgVLUZ2r9i+AKcoVgwiNfv1pruNS5cCvpXqhKECbruBCfRezPHA==",
"resolved": "1.72.0",
"contentHash": "RBoFwFKBHKUjuyJf2weEnqICQLaY0TdIrdFv2yC8bsiR2VFYxizOn3C/qN1FWCCb0Uh9GhW+zwAV1yUxPjiocw==",
"dependencies": {
"Google.Apis": "1.68.0",
"Google.Apis.Core": "1.68.0",
"Google.Apis": "1.72.0",
"Google.Apis.Core": "1.72.0",
"System.Management": "7.0.2"
}
},
"Google.Apis.Core": {
"type": "Transitive",
"resolved": "1.68.0",
"contentHash": "pAqwa6pfu53UXCR2b7A/PAPXeuVg6L1OFw38WckN27NU2+mf+KTjoEg2YGv/f0UyKxzz7DxF1urOTKg/6dTP9g==",
"resolved": "1.72.0",
"contentHash": "ZmYX1PU0vTKFT42c7gp4zaYcb/0TFAXrt9qw8yEz0wjvaug85+/WddlPTfT525Qei8iIUsF6t4bHYrsb2O7crg==",
"dependencies": {
"Newtonsoft.Json": "13.0.3"
"Newtonsoft.Json": "13.0.4"
}
},
"Google.Cloud.TextToSpeech.V1": {
"type": "Transitive",
"resolved": "3.9.0",
"contentHash": "JpejhPzzEQ6rdaf0nsjjJwj1CJb8Zs0x+TH27+A17KF2g0NqrgtAbpkUZTiGlQHhOzJSF1lB3amrQhbGjozJ3A==",
"resolved": "3.17.0",
"contentHash": "27vM1NEBmCqAwqagwS0aEHfRBrFy7z6Ef+BblwKMaxtUUY0amdUdeXLY/PU8RSIHtJoan1K6ZKIS6YYqzgp77g==",
"dependencies": {
"Google.Api.Gax.Grpc": "[4.9.0, 5.0.0)",
"Google.LongRunning": "[3.3.0, 4.0.0)"
"Google.Api.Gax.Grpc": "[4.12.1, 5.0.0)",
"Google.LongRunning": "[3.5.0, 4.0.0)"
}
},
"Google.LongRunning": {
"type": "Transitive",
"resolved": "3.3.0",
"contentHash": "F2SZ83Jo466Wj/s1Z7QhIAmWBXxJZQyXZpcx0P8BR7d6s0FAj67vQjeUPESSJcvsy8AqYiYBhkUr2YpZhTQeHg==",
"resolved": "3.5.0",
"contentHash": "W8xO6FA+rG8WjKOsyIjTKjeKLcyCrjBBYeEdZ4QBkKQcxmRczbrfKhKQmdorb2V35CqXeeTbue5Na6Zkgyv8ow==",
"dependencies": {
"Google.Api.Gax.Grpc": "[4.8.0, 5.0.0)"
"Google.Api.Gax.Grpc": "[4.12.1, 5.0.0)"
}
},
"Google.Protobuf": {
"type": "Transitive",
"resolved": "3.28.2",
"contentHash": "Z86ZKAB+v1B/m0LTM+EVamvZlYw/g3VND3/Gs4M/+aDIxa2JE9YPKjDxTpf0gv2sh26hrve3eI03brxBmzn92g=="
"resolved": "3.31.1",
"contentHash": "gSnJbUmGiOTdWddPhqzrEscHq9Ls6sqRDPB9WptckyjTUyx70JOOAaDLkFff8gManZNN3hllQ4aQInnQyq/Z/A=="
},
"Grpc.Auth": {
"type": "Transitive",
"resolved": "2.66.0",
"contentHash": "FRQlhMAcHf0GjAXIfhN6RydfZncLLXNNTOtpLL1bt57kp59vu40faW+dr6Vwl7ef/IUFfF38aiB5jvhAA/9Aow==",
"resolved": "2.71.0",
"contentHash": "t2aGh/pMgqmc3GimtYfC7VcgVY/VSbk6SLH+61wewsgK45tzxxD9nYYItT5bpLn7fbebirmHXfgJcVKIArd0cg==",
"dependencies": {
"Google.Apis.Auth": "1.68.0",
"Grpc.Core.Api": "2.66.0"
"Google.Apis.Auth": "1.69.0",
"Grpc.Core.Api": "2.71.0"
}
},
"Grpc.Core.Api": {
"type": "Transitive",
"resolved": "2.66.0",
"contentHash": "HsjsQVAHe4hqP4t4rpUnmq+MZvPdyrlPsWF4T5fbMvyP3o/lMV+KVJfDlaNH8+v0aGQTVT3EsDFufbhaWb52cw=="
"resolved": "2.71.0",
"contentHash": "QquqUC37yxsDzd1QaDRsH2+uuznWPTS8CVE2Yzwl3CvU4geTNkolQXoVN812M2IwT6zpv3jsZRc9ExJFNFslTg=="
},
"Grpc.Net.Client": {
"type": "Transitive",
"resolved": "2.66.0",
"contentHash": "GwkSsssXFgN9+M2U+UQWdErf61sn1iqgP+2NRBlDXATcP9vlxda0wySxd/eIL8U522+SnyFNUXlvQ5tAzGk9cA==",
"resolved": "2.71.0",
"contentHash": "U1vr20r5ngoT9nlb7wejF28EKN+taMhJsV9XtK9MkiepTZwnKxxiarriiMfCHuDAfPUm9XUjFMn/RIuJ4YY61w==",
"dependencies": {
"Grpc.Net.Common": "2.66.0",
"Grpc.Net.Common": "2.71.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0"
}
},
"Grpc.Net.Common": {
"type": "Transitive",
"resolved": "2.66.0",
"contentHash": "YJpQpIvpo0HKlsG6SHwaieyji08qfv0DdEDIewCAA0egQY08637sHOj1netLGUhzBEsCqlGC3e92TZ2uqhxnvw==",
"resolved": "2.71.0",
"contentHash": "v0c8R97TwRYwNXlC8GyRXwYTCNufpDfUtj9la+wUrZFzVWkFJuNAltU+c0yI3zu0jl54k7en6u2WKgZgd57r2Q==",
"dependencies": {
"Grpc.Core.Api": "2.66.0"
"Grpc.Core.Api": "2.71.0"
}
},
"KokoroSharp": {
Expand Down Expand Up @@ -245,13 +240,16 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg=="
"resolved": "8.0.2",
"contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA=="
"resolved": "8.0.3",
"contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
}
},
"Microsoft.ML.OnnxRuntime": {
"type": "Transitive",
Expand All @@ -261,10 +259,36 @@
"Microsoft.ML.OnnxRuntime.Managed": "1.22.0"
}
},
"Microsoft.ML.OnnxRuntime.Gpu": {
"type": "Transitive",
"resolved": "1.23.2",
"contentHash": "4GNQUc6FHiWHvp95Yhu95SUDa6HVm+RSQxm7QCH3PIlderDhTPdU98fHHKXmLy4xIQikkEraMcGe+KXEQU5tew==",
"dependencies": {
"Microsoft.ML.OnnxRuntime.Gpu.Linux": "1.23.2",
"Microsoft.ML.OnnxRuntime.Gpu.Windows": "1.23.2",
"Microsoft.ML.OnnxRuntime.Managed": "1.23.2"
}
},
"Microsoft.ML.OnnxRuntime.Gpu.Linux": {
"type": "Transitive",
"resolved": "1.23.2",
"contentHash": "bcv2zpP8GNnfdUCkOjE9lzIoslAOCuY0T9QHpI5+Qm6qUcehRPtGC8wF4nvySwyfTe0g3rVINP3SSj1zinkE7Q==",
"dependencies": {
"Microsoft.ML.OnnxRuntime.Managed": "1.23.2"
}
},
"Microsoft.ML.OnnxRuntime.Gpu.Windows": {
"type": "Transitive",
"resolved": "1.23.2",
"contentHash": "qOU3DVcxq4XalFV3wlrNrdatYWufIqvg8FZqVC3LS2rFPoTfl++xpMC2nnaxB2Wc5jrpDb2izrcDsQatCyjVnA==",
"dependencies": {
"Microsoft.ML.OnnxRuntime.Managed": "1.23.2"
}
},
Comment on lines +262 to +287
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought I had removed these before pushing. Was making attempts to utilize CUDA for synth processing but the entire suite was proving to be too bulky/cumbersome for only marginal gains.

"Microsoft.ML.OnnxRuntime.Managed": {
"type": "Transitive",
"resolved": "1.22.0",
"contentHash": "zlG3eY5mJnx1BhYAxRwpuHCGHzl3B+cY5/se0RmlVBw6Yh6QTGjPAXdjhlBIcw6BPFhgMn9lxWPE/U3Fvis+BQ==",
"resolved": "1.23.2",
"contentHash": "HtlQuzmVrqhnkmwfmkQ+2re8xPxtVmeLRQaYSJ3pXfzKs4b36+yBfa/LnDuzfX1bGcyWn/McKxmbY87TCAmo1Q==",
"dependencies": {
"System.Numerics.Tensors": "9.0.0"
}
Expand Down Expand Up @@ -339,14 +363,22 @@
},
"Newtonsoft.Json": {
"type": "Transitive",
"resolved": "13.0.3",
"contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
"resolved": "13.0.4",
"contentHash": "pdgNNMai3zv51W5aq268sujXUyx7SNdE2bj1wZcWjAQrKMFZV260lbqYop1d2GM67JI1huLRwxo9ZqnfF/lC6A=="
},
"NumSharp": {
"type": "Transitive",
"resolved": "0.30.0",
"contentHash": "1f8m2B/m/ZSsICaqLszspCyA9/sTHK7wBKEH5KsxGg/r3QCYTc2HnfYOGMeCytvo8/j0v/umn5umLOLhdExlFA=="
},
"OpenAI": {
"type": "Transitive",
"resolved": "2.8.0",
"contentHash": "KcYpZ9IhuxFD2hGAJlL5vABtkr00CjeJU0SY8CjZQyzvzkzLop8jhdX3iDvteVJg6e3y4TEiY+Kti4gDJAagnA==",
"dependencies": {
"System.ClientModel": "1.8.1"
}
},
"OpenTK.Audio.OpenAL": {
"type": "Transitive",
"resolved": "5.0.0-pre.13",
Expand All @@ -366,16 +398,44 @@
"resolved": "5.0.0-pre.13",
"contentHash": "65qbZS49AfrTM6jtZ2RDTWAzLe13ywCXIiSP5QrAJLmZT6sQqHGd1LfFXLhx8Ccp77qy7qh/LHsxpUOlkgZTCg=="
},
"PiperSharp": {
"type": "Transitive",
"resolved": "1.0.6",
"contentHash": "g68TbampKc0ATx80nur6LHHrhIpXvmioIVuwAuWKcjTXTB2tf+Klk4JPwzWZRo+DRSR4kS370eh+davEQVR0cw==",
"dependencies": {
"NAudio": "2.2.1",
"NAudio.Core": "2.2.1",
"Newtonsoft.Json": "13.0.1",
"SharpCompress": "0.36.0"
}
},
"R3": {
"type": "Transitive",
"resolved": "1.2.9",
"contentHash": "dKMFt90XW+n7JK2P40dx9uuLg57Pcj4cA/9n1NwdKWFcMAM6j49OU8h9EborpVe4KXI+2MV/EjKc1LG7fhQJUA=="
},
"SharpCompress": {
"type": "Transitive",
"resolved": "0.36.0",
"contentHash": "48am//T6Ou+GmyPmBaxaFN1ym0VNidRcBeANr9+OYTzpKRz8QMGzAkHVkCV30lFQ/gnWqGr50AuebahpG1C6xA==",
"dependencies": {
"ZstdSharp.Port": "0.7.4"
}
},
"Standart.Hash.xxHash": {
"type": "Transitive",
"resolved": "4.0.5",
"contentHash": "2QC9zDPFT/SOnP7iFdK3AwakEcJ7D3zDoU7IwIAOyEhY4WQ2GQBvLqZ29/R1BSujPNtGHMITmVW1d+VjvLg6lg=="
},
"System.ClientModel": {
"type": "Transitive",
"resolved": "1.8.1",
"contentHash": "4oUQgw/vaO4FBOk3YsH40hbrjxRED1l95rRLvTMtHXfQxapXya9IfPpm/KgwValFFtYTfYGFOs/qzGmGyexicQ==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.3",
"System.Memory.Data": "8.0.1"
}
},
"System.CodeDom": {
"type": "Transitive",
"resolved": "7.0.0",
Expand All @@ -402,6 +462,11 @@
"System.CodeDom": "7.0.0"
}
},
"System.Memory.Data": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "BVYuec3jV23EMRDeR7Dr1/qhx7369dZzJ9IWy2xylvb4YfXsrUxspWc4UWYid/tj4zZK58uGZqn2WQiaDMhmAg=="
},
"System.Numerics.Tensors": {
"type": "Transitive",
"resolved": "9.0.5",
Expand Down Expand Up @@ -457,17 +522,24 @@
"resolved": "15.3.0",
"contentHash": "F93japYa9YrJ59AZGhgdaUGHN7ITJ55FBBg/D/8C0BDgahv/rQD6MOSwHxOJJpon1kYyslVbeBrQ2wcJhox01w=="
},
"ZstdSharp.Port": {
"type": "Transitive",
"resolved": "0.7.4",
"contentHash": "ziptnotpUJr51afwXJQ5Wc03dvDiZAdmxS08s1g7SHn/VzbyZUXdH6yORk/zaNjzUOEE6pVZ0Nqztab0rYROgQ=="
},
"texttotalk": {
"type": "Project",
"dependencies": {
"AWSSDK.Polly": "[3.7.401.37, )",
"AdysTech.CredentialManager": "[2.6.0, )",
"DalamudPackager": "[14.0.1, )",
"Fare": "[2.2.1, )",
"Google.Cloud.TextToSpeech.V1": "[3.9.0, )",
"Google.Cloud.TextToSpeech.V1": "[3.17.0, )",
"KokoroSharp.CPU": "[0.6.1, )",
"Microsoft.CognitiveServices.Speech": "[1.41.1, )",
"Microsoft.ML.OnnxRuntime.Gpu": "[1.23.2, )",
"NAudio": "[2.2.1, )",
"OpenAI": "[2.8.0, )",
"PiperSharp": "[1.0.6, )",
"R3": "[1.2.9, )",
"Standart.Hash.xxHash": "[4.0.5, )",
"System.Drawing.Common": "[9.0.0, )",
Expand Down
9 changes: 4 additions & 5 deletions src/TextToTalk/Backends/Azure/AzureBackend.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using Dalamud.Bindings.ImGui;
using FFXIVClientStructs.FFXIV.Client.Game.UI;
using System;
using System.Collections.Generic;
using System.Net.Http;
using TextToTalk.Backends.ElevenLabs;
using static TextToTalk.Backends.Azure.AzureClient;

namespace TextToTalk.Backends.Azure;
Expand All @@ -13,18 +11,19 @@ public class AzureBackend : VoiceBackend
private readonly AzureBackendUI ui;
private readonly AzureBackendUIModel uiModel;
public List<VoiceDetails> voices;
private readonly LatencyTracker latencyTracker;

public AzureBackend(PluginConfiguration config, HttpClient http)
public AzureBackend(PluginConfiguration config, HttpClient http, LatencyTracker latencyTracker)
{
TitleBarColor = ImGui.ColorConvertU32ToFloat4(0xFFF96800);

var lexiconManager = new DalamudLexiconManager();
LexiconUtils.LoadFromConfigAzure(lexiconManager, config);

this.uiModel = new AzureBackendUIModel(config, lexiconManager);
this.uiModel = new AzureBackendUIModel(config, lexiconManager, latencyTracker);
this.voices = this.uiModel.voices;
this.ui = new AzureBackendUI(this.uiModel, config, lexiconManager, http, this);

this.latencyTracker = latencyTracker;
}

public override void DrawStyles(IConfigUIDelegates helpers)
Expand Down
Loading