mirror of
https://github.com/9ParsonsB/Pulsar.git
synced 2025-04-11 14:34:44 -04:00
* Add speech rate setting * Add volume slider * New speech manager skeleton * User API key from resx * Implement voice list retrieve via new api * Rewrite to use ObAPI, remove all dependancies * Use volume setting * Clean up using statements * Volume and timing adjustments * Lookup rate value * Use numeric rates for tighter spread * Manage plugin data folder via core interface * Add check that nullable settings are not null. * Get file size before it's deleted. * Improve old settings migration. * Ignore cache sizes below 1MB * Re-index orphaned files in cache, purge legacy wav files. * Call top level error logging for native voice exception. * Async title and detail requests to remove pause * Remove NetCoreAudio use of temp files. * Remove orphan using.
106 lines
3.6 KiB
C#
106 lines
3.6 KiB
C#
using Observatory.Framework;
|
|
using Observatory.Framework.Interfaces;
|
|
using System.Text.Json;
|
|
|
|
namespace Observatory.Herald
|
|
{
|
|
public class HeraldNotifier : IObservatoryNotifier
|
|
{
|
|
public HeraldNotifier()
|
|
{
|
|
heraldSettings = DefaultSettings;
|
|
}
|
|
|
|
private static HeraldSettings DefaultSettings
|
|
{
|
|
get => new HeraldSettings()
|
|
{
|
|
SelectedVoice = "American - Christopher",
|
|
SelectedRate = "Default",
|
|
Volume = 75,
|
|
Enabled = false,
|
|
ApiEndpoint = "https://api.observatory.xjph.net/AzureVoice",
|
|
CacheSize = 100
|
|
};
|
|
}
|
|
|
|
public string Name => "Observatory Herald";
|
|
|
|
public string ShortName => "Herald";
|
|
|
|
public string Version => typeof(HeraldNotifier).Assembly.GetName().Version.ToString();
|
|
|
|
public PluginUI PluginUI => new (PluginUI.UIType.None, null);
|
|
|
|
public object Settings
|
|
{
|
|
get => heraldSettings;
|
|
set
|
|
{
|
|
// Need to perform migration here, older
|
|
// version settings object not fully compatible.
|
|
var savedSettings = (HeraldSettings)value;
|
|
if (string.IsNullOrWhiteSpace(savedSettings.SelectedRate))
|
|
{
|
|
heraldSettings.SelectedVoice = savedSettings.SelectedVoice;
|
|
heraldSettings.Enabled = savedSettings.Enabled;
|
|
}
|
|
else
|
|
{
|
|
heraldSettings = savedSettings;
|
|
}
|
|
}
|
|
}
|
|
public void Load(IObservatoryCore observatoryCore)
|
|
{
|
|
var speechManager = new SpeechRequestManager(heraldSettings, observatoryCore.HttpClient, observatoryCore.PluginStorageFolder);
|
|
heraldSpeech = new HeraldQueue(speechManager);
|
|
heraldSettings.Test = TestVoice;
|
|
}
|
|
|
|
private void TestVoice()
|
|
{
|
|
heraldSpeech.Enqueue(
|
|
new NotificationArgs()
|
|
{
|
|
Title = "Herald voice testing",
|
|
Detail = $"This is {heraldSettings.SelectedVoice.Split(" - ")[1]}."
|
|
},
|
|
GetAzureNameFromSetting(heraldSettings.SelectedVoice),
|
|
GetAzureStyleNameFromSetting(heraldSettings.SelectedVoice),
|
|
heraldSettings.Rate[heraldSettings.SelectedRate].ToString(),
|
|
heraldSettings.Volume);
|
|
}
|
|
|
|
public void OnNotificationEvent(NotificationArgs notificationEventArgs)
|
|
{
|
|
if (heraldSettings.Enabled)
|
|
heraldSpeech.Enqueue(
|
|
notificationEventArgs,
|
|
GetAzureNameFromSetting(heraldSettings.SelectedVoice),
|
|
GetAzureStyleNameFromSetting(heraldSettings.SelectedVoice),
|
|
heraldSettings.Rate[heraldSettings.SelectedRate].ToString(),
|
|
heraldSettings.Volume);
|
|
}
|
|
|
|
private string GetAzureNameFromSetting(string settingName)
|
|
{
|
|
var voiceInfo = (JsonElement)heraldSettings.Voices[settingName];
|
|
return voiceInfo.GetProperty("ShortName").GetString();
|
|
}
|
|
|
|
private string GetAzureStyleNameFromSetting(string settingName)
|
|
{
|
|
string[] settingParts = settingName.Split(" - ");
|
|
|
|
if (settingParts.Length == 3)
|
|
return settingParts[2];
|
|
else
|
|
return string.Empty;
|
|
}
|
|
|
|
private HeraldSettings heraldSettings;
|
|
private HeraldQueue heraldSpeech;
|
|
}
|
|
}
|