private static string WrapWholeElement(VoicePersona voice, string text) { string template = $"<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"https://www.w3.org/2001/mstts\" xml:lang=\"{langcodestring}\">" + $"<voice name=\"{voice.VoiceName}\">"; template += text; template += "</voice>" + "</speak>"; return(template); }
private void setCurrentVoice(VoicePersona voice) { currentVoice = availableVoices.Where(azv => azv.ShortName == voice.VoiceName).FirstOrDefault(); speed = voice.Speed; semitonePitch = voice.SemitoneAdjust; if (voice.Mood != VoiceMood.Unavailable) { mood = voice.Mood; } }
private static string WrapMood(VoicePersona voice, string text) { if (voice.Mood != VoiceMood.Unavailable) { string template = $"<mstts:express-as style=\"{voice.Mood}\">"; template += text; template += "</mstts:express-as>"; return(template); } return(text); }
private VoicePersona convertAzureVoice(AzureVoice azv) { var voice = new VoicePersona(this, azv.ShortName, charLimit, Enum.Parse <VoiceSex>(azv.Gender), int.Parse(azv.SampleRateHertz)); if (azv.ShortName == "en-US-AriaNeural") { voice.Mood = mood; } voice.SemitoneAdjust = semitonePitch; voice.Speed = speed; return(voice); }
public MultiCloudTTS(IServiceProvider services, ILogger <HomieBot> logger, IConfiguration configuration) { this.logger = logger; this.configuration = configuration; logger.LogInformation("Initializing multicloud provider"); voiceProviders = new List <IVoiceProvider>(); logger.LogInformation("Registering Google Cloud Voice Provider"); AddVoiceProvider(new GoogleCloudVoiceProvider(logger)); logger.LogInformation("Registering Azure Voices"); AddVoiceProvider(new AzureVoiceProvider(logger, configuration)); logger.LogInformation("Registering DeepFake Voices"); AddVoiceProvider(new DeepFakeVoiceProvider(logger)); logger.LogInformation("Setting up current voice"); currentVoice = voiceProviders.FirstOrDefault().ListVoices.FirstOrDefault(); logger.LogInformation("MultiCloud ready with default voice of {voice}", currentVoice.VoiceName); }
private static string WrapProsody(VoicePersona voice, string text) { if (voice.SemitoneAdjust == 0 && voice.Speed == VoiceSpeed.Normal) { return(text); } string template = "<prosody"; if (voice.SemitoneAdjust != 0) { template += $" pitch=\"{voice.SemitoneAdjust}st\""; } if (voice.Speed != VoiceSpeed.Normal) { string voicestring = voice.Speed.ToString(); voicestring = voicestring.Replace("x", "x-"); template += $" rate=\"{voicestring}\""; } template += ">"; template += text; template += "</prosody>"; return(template); }
public static string CreateSSMLString(VoicePersona voice, string text) { return(WrapWholeElement(voice, WrapMood(voice, WrapProsody(voice, EscapeXML(text))))); }