mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-21 18:52:36 +01:00
Work on murf TTS
This commit is contained in:
parent
54d09cfe28
commit
0af4540cdf
@ -2377,6 +2377,24 @@ namespace Nikse.SubtitleEdit.Core.Settings
|
|||||||
settings.Tools.TextToSpeechMurfApiKey = subNode.InnerText;
|
settings.Tools.TextToSpeechMurfApiKey = subNode.InnerText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subNode = node.SelectSingleNode("TextToSpeechMurfVoice");
|
||||||
|
if (subNode != null)
|
||||||
|
{
|
||||||
|
settings.Tools.TextToSpeechMurfVoice = subNode.InnerText;
|
||||||
|
}
|
||||||
|
|
||||||
|
subNode = node.SelectSingleNode("TextToSpeechMurfRate");
|
||||||
|
if (subNode != null)
|
||||||
|
{
|
||||||
|
settings.Tools.TextToSpeechMurfRate = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
|
||||||
|
subNode = node.SelectSingleNode("TextToSpeechMurfPitch");
|
||||||
|
if (subNode != null)
|
||||||
|
{
|
||||||
|
settings.Tools.TextToSpeechMurfPitch = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
|
||||||
subNode = node.SelectSingleNode("TextToSpeechAzureApiKey");
|
subNode = node.SelectSingleNode("TextToSpeechAzureApiKey");
|
||||||
if (subNode != null)
|
if (subNode != null)
|
||||||
{
|
{
|
||||||
@ -9061,6 +9079,9 @@ namespace Nikse.SubtitleEdit.Core.Settings
|
|||||||
xmlWriter.WriteElementString("TextToSpeechElevenLabsStability", settings.Tools.TextToSpeechElevenLabsStability.ToString(CultureInfo.InvariantCulture));
|
xmlWriter.WriteElementString("TextToSpeechElevenLabsStability", settings.Tools.TextToSpeechElevenLabsStability.ToString(CultureInfo.InvariantCulture));
|
||||||
xmlWriter.WriteElementString("TextToSpeechElevenLabsSimilarity", settings.Tools.TextToSpeechElevenLabsSimilarity.ToString(CultureInfo.InvariantCulture));
|
xmlWriter.WriteElementString("TextToSpeechElevenLabsSimilarity", settings.Tools.TextToSpeechElevenLabsSimilarity.ToString(CultureInfo.InvariantCulture));
|
||||||
xmlWriter.WriteElementString("TextToSpeechMurfApiKey", settings.Tools.TextToSpeechMurfApiKey);
|
xmlWriter.WriteElementString("TextToSpeechMurfApiKey", settings.Tools.TextToSpeechMurfApiKey);
|
||||||
|
xmlWriter.WriteElementString("TextToSpeechMurfVoice", settings.Tools.TextToSpeechMurfVoice);
|
||||||
|
xmlWriter.WriteElementString("TextToSpeechMurfRate", settings.Tools.TextToSpeechMurfRate.ToString(CultureInfo.InvariantCulture));
|
||||||
|
xmlWriter.WriteElementString("TextToSpeechMurfPitch", settings.Tools.TextToSpeechMurfPitch.ToString(CultureInfo.InvariantCulture));
|
||||||
xmlWriter.WriteElementString("TextToSpeechAzureApiKey", settings.Tools.TextToSpeechAzureApiKey);
|
xmlWriter.WriteElementString("TextToSpeechAzureApiKey", settings.Tools.TextToSpeechAzureApiKey);
|
||||||
xmlWriter.WriteElementString("TextToSpeechAzureRegion", settings.Tools.TextToSpeechAzureRegion);
|
xmlWriter.WriteElementString("TextToSpeechAzureRegion", settings.Tools.TextToSpeechAzureRegion);
|
||||||
xmlWriter.WriteElementString("TextToSpeechPreview", settings.Tools.TextToSpeechPreview.ToString(CultureInfo.InvariantCulture));
|
xmlWriter.WriteElementString("TextToSpeechPreview", settings.Tools.TextToSpeechPreview.ToString(CultureInfo.InvariantCulture));
|
||||||
|
@ -100,6 +100,9 @@ namespace Nikse.SubtitleEdit.Core.Settings
|
|||||||
public string TextToSpeechLastVoice { get; set; }
|
public string TextToSpeechLastVoice { get; set; }
|
||||||
public string TextToSpeechElevenLabsApiKey { get; set; }
|
public string TextToSpeechElevenLabsApiKey { get; set; }
|
||||||
public string TextToSpeechMurfApiKey { get; set; }
|
public string TextToSpeechMurfApiKey { get; set; }
|
||||||
|
public int TextToSpeechMurfRate { get; set; }
|
||||||
|
public int TextToSpeechMurfPitch { get; set; }
|
||||||
|
public string TextToSpeechMurfVoice { get; set; }
|
||||||
public string TextToSpeechAzureApiKey { get; set; }
|
public string TextToSpeechAzureApiKey { get; set; }
|
||||||
public string TextToSpeechAzureRegion { get; set; }
|
public string TextToSpeechAzureRegion { get; set; }
|
||||||
public string TextToSpeechElevenLabsModel { get; set; }
|
public string TextToSpeechElevenLabsModel { get; set; }
|
||||||
|
@ -142,7 +142,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
{
|
{
|
||||||
if (_whisperChoice == WhisperChoice.PurfviewFasterWhisperXXL)
|
if (_whisperChoice == WhisperChoice.PurfviewFasterWhisperXXL)
|
||||||
{
|
{
|
||||||
UiUtil.OpenUrl("https://github.com/Purfview/whisper-standalone-win/releases/download/Faster-Whisper-XXL/Faster-Whisper-XXL_r192.3.4_windows.7z");
|
UiUtil.OpenUrl("https://github.com/Purfview/whisper-standalone-win/releases/download/Faster-Whisper-XXL/Faster-Whisper-XXL_r193.1_windows.7z");
|
||||||
|
|
||||||
var folder = Path.Combine(Configuration.DataDirectory, "Whisper");
|
var folder = Path.Combine(Configuration.DataDirectory, "Whisper");
|
||||||
if (!Directory.Exists(folder))
|
if (!Directory.Exists(folder))
|
||||||
|
@ -15,6 +15,7 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
private readonly Subtitle _subtitle;
|
private readonly Subtitle _subtitle;
|
||||||
private readonly int _index;
|
private readonly int _index;
|
||||||
private LibMpvDynamic _libMpv;
|
private LibMpvDynamic _libMpv;
|
||||||
|
private TextToSpeech.TextToSpeechEngine _engine;
|
||||||
|
|
||||||
public RegenerateAudioClip(TextToSpeech textToSpeech, Subtitle subtitle, int idx, TextToSpeech.TextToSpeechEngine engine)
|
public RegenerateAudioClip(TextToSpeech textToSpeech, Subtitle subtitle, int idx, TextToSpeech.TextToSpeechEngine engine)
|
||||||
{
|
{
|
||||||
@ -25,6 +26,7 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
_subtitle = subtitle;
|
_subtitle = subtitle;
|
||||||
_textToSpeech = textToSpeech;
|
_textToSpeech = textToSpeech;
|
||||||
_index = idx;
|
_index = idx;
|
||||||
|
_engine = engine;
|
||||||
|
|
||||||
Text = LanguageSettings.Current.ExportCustomText.Edit;
|
Text = LanguageSettings.Current.ExportCustomText.Edit;
|
||||||
labelText.Text = LanguageSettings.Current.General.Text;
|
labelText.Text = LanguageSettings.Current.General.Text;
|
||||||
@ -43,8 +45,25 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
nikseUpDownStability.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsStability * 100.0);
|
nikseUpDownStability.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsStability * 100.0);
|
||||||
nikseUpDownSimilarity.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity * 100.0);
|
nikseUpDownSimilarity.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity * 100.0);
|
||||||
|
|
||||||
if (engine.Id != TextToSpeech.TextToSpeechEngineId.ElevenLabs)
|
if (engine.Id == TextToSpeech.TextToSpeechEngineId.ElevenLabs)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (engine.Id == TextToSpeech.TextToSpeechEngineId.Murf)
|
||||||
|
{
|
||||||
|
labelStability.Text = "Pitch";
|
||||||
|
nikseUpDownStability.Minimum = -49;
|
||||||
|
nikseUpDownStability.Maximum = 50;
|
||||||
|
nikseUpDownStability.Value = Configuration.Settings.Tools.TextToSpeechMurfPitch;
|
||||||
|
|
||||||
|
labelSimilarity.Text = "Speed";
|
||||||
|
nikseUpDownSimilarity.Minimum = -49;
|
||||||
|
nikseUpDownSimilarity.Maximum = 50;
|
||||||
|
nikseUpDownSimilarity.Value = Configuration.Settings.Tools.TextToSpeechMurfRate;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
labelStability.Visible = false;
|
labelStability.Visible = false;
|
||||||
labelSimilarity.Visible = false;
|
labelSimilarity.Visible = false;
|
||||||
nikseUpDownStability.Visible = false;
|
nikseUpDownStability.Visible = false;
|
||||||
@ -52,14 +71,21 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
TextBoxReGenerate.Height = buttonOK.Top - TextBoxReGenerate.Top - 10;
|
TextBoxReGenerate.Height = buttonOK.Top - TextBoxReGenerate.Top - 10;
|
||||||
nikseUpDownSimilarity.Left = labelSimilarity.Right + 3;
|
nikseUpDownSimilarity.Left = labelSimilarity.Right + 3;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonReGenerate_Click(object sender, EventArgs e)
|
private void buttonReGenerate_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
_libMpv?.Stop();
|
_libMpv?.Stop();
|
||||||
|
|
||||||
|
if (_engine.Id == TextToSpeech.TextToSpeechEngineId.ElevenLabs)
|
||||||
|
{
|
||||||
Configuration.Settings.Tools.TextToSpeechElevenLabsStability = (double)nikseUpDownStability.Value / 100.0;
|
Configuration.Settings.Tools.TextToSpeechElevenLabsStability = (double)nikseUpDownStability.Value / 100.0;
|
||||||
Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity = (double)nikseUpDownSimilarity.Value / 100.0;
|
Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity = (double)nikseUpDownSimilarity.Value / 100.0;
|
||||||
|
}
|
||||||
|
else if (_engine.Id == TextToSpeech.TextToSpeechEngineId.Murf)
|
||||||
|
{
|
||||||
|
Configuration.Settings.Tools.TextToSpeechMurfPitch = (int)nikseUpDownStability.Value;
|
||||||
|
Configuration.Settings.Tools.TextToSpeechMurfRate = (int)nikseUpDownSimilarity.Value;
|
||||||
|
}
|
||||||
|
|
||||||
var paragraph = _subtitle.Paragraphs[_index];
|
var paragraph = _subtitle.Paragraphs[_index];
|
||||||
paragraph.Text = TextBoxReGenerate.Text.Trim();
|
paragraph.Text = TextBoxReGenerate.Text.Trim();
|
||||||
|
@ -211,8 +211,6 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
checkBoxShowPreview.Checked = Configuration.Settings.Tools.TextToSpeechPreview;
|
checkBoxShowPreview.Checked = Configuration.Settings.Tools.TextToSpeechPreview;
|
||||||
checkBoxAudioEncoding.Checked = Configuration.Settings.Tools.TextToSpeechCustomAudio;
|
checkBoxAudioEncoding.Checked = Configuration.Settings.Tools.TextToSpeechCustomAudio;
|
||||||
checkBoxAddToVideoFile.Enabled = _videoFileName != null;
|
checkBoxAddToVideoFile.Enabled = _videoFileName != null;
|
||||||
nikseUpDownStability.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsStability * 100.0);
|
|
||||||
nikseUpDownSimilarity.Value = (int)Math.Round(Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity * 100.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetActor(ActorAndVoice actor)
|
private void SetActor(ActorAndVoice actor)
|
||||||
@ -1434,10 +1432,12 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
overrideStyle = "Conversational";
|
overrideStyle = "Conversational";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var rate = Configuration.Settings.Tools.TextToSpeechMurfRate.ToString(CultureInfo.InvariantCulture);
|
||||||
|
var pitch = Configuration.Settings.Tools.TextToSpeechMurfPitch.ToString(CultureInfo.InvariantCulture);
|
||||||
var body = "{ \"voiceId\": \"" + voice.VoiceId + "\", \"style\": \"" + (voice.AvailableStyles.Contains(overrideStyle)
|
var body = "{ \"voiceId\": \"" + voice.VoiceId + "\", \"style\": \"" + (voice.AvailableStyles.Contains(overrideStyle)
|
||||||
? overrideStyle
|
? overrideStyle
|
||||||
: voice.AvailableStyles.FirstOrDefault()) +
|
: voice.AvailableStyles.FirstOrDefault()) +
|
||||||
"\", \"text\": \"" + Json.EncodeJsonText(text) + "\", \"rate\": 0, \"pitch\": 0, \"sampleRate\": 48000, \"format\": \"MP3\", \"channelType\": \"MONO\", \"pronunciationDictionary\": { }, \"encodeAsBase64\": false, \"modelVersion\": \"GEN2\" }";
|
"\", \"text\": \"" + Json.EncodeJsonText(text) + "\", \"rate\": " + rate + ", \"pitch\": " + pitch + ", \"sampleRate\": 48000, \"format\": \"MP3\", \"channelType\": \"MONO\", \"pronunciationDictionary\": { }, \"encodeAsBase64\": false, \"modelVersion\": \"GEN2\" }";
|
||||||
|
|
||||||
var requestMessage = new HttpRequestMessage(HttpMethod.Post, url);
|
var requestMessage = new HttpRequestMessage(HttpMethod.Post, url);
|
||||||
requestMessage.Content = new StringContent(body, Encoding.UTF8, "application/json");
|
requestMessage.Content = new StringContent(body, Encoding.UTF8, "application/json");
|
||||||
@ -1635,8 +1635,19 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
|
|
||||||
nikseComboBoxRegion.Visible = true;
|
nikseComboBoxRegion.Visible = true;
|
||||||
|
|
||||||
|
labelStability.Text = LanguageSettings.Current.TextToSpeech.Stability;
|
||||||
|
labelSimilarity.Text = LanguageSettings.Current.TextToSpeech.Similarity;
|
||||||
labelStability.Visible = true;
|
labelStability.Visible = true;
|
||||||
labelSimilarity.Visible = true;
|
labelSimilarity.Visible = true;
|
||||||
|
|
||||||
|
nikseUpDownStability.Minimum = 0;
|
||||||
|
nikseUpDownStability.Maximum = 100;
|
||||||
|
nikseUpDownStability.Value = (decimal)Configuration.Settings.Tools.TextToSpeechElevenLabsStability;
|
||||||
|
|
||||||
|
nikseUpDownSimilarity.Minimum = 0;
|
||||||
|
nikseUpDownSimilarity.Maximum = 100;
|
||||||
|
nikseUpDownSimilarity.Value = (decimal)Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity;
|
||||||
|
|
||||||
nikseUpDownStability.Visible = true;
|
nikseUpDownStability.Visible = true;
|
||||||
nikseUpDownSimilarity.Visible = true;
|
nikseUpDownSimilarity.Visible = true;
|
||||||
}
|
}
|
||||||
@ -1712,6 +1723,34 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
labelRegion.Visible = true;
|
labelRegion.Visible = true;
|
||||||
nikseComboBoxRegion.Visible = true;
|
nikseComboBoxRegion.Visible = true;
|
||||||
nikseComboBoxRegion.Text = "English (US and Canada)";
|
nikseComboBoxRegion.Text = "English (US and Canada)";
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(Configuration.Settings.Tools.TextToSpeechMurfVoice))
|
||||||
|
{
|
||||||
|
var voice = _murfVoices.FirstOrDefault(p => p.ToString() == Configuration.Settings.Tools.TextToSpeechMurfVoice);
|
||||||
|
if (voice != null)
|
||||||
|
{
|
||||||
|
var murfLanguage = _murfLanguages.FirstOrDefault(p => p.Code == voice.Locale);
|
||||||
|
if (murfLanguage != null)
|
||||||
|
{
|
||||||
|
nikseComboBoxRegion.Text = murfLanguage.Name;
|
||||||
|
}
|
||||||
|
nikseComboBoxVoice.Text = Configuration.Settings.Tools.TextToSpeechMurfVoice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
labelStability.Text = "Pitch";
|
||||||
|
nikseUpDownStability.Minimum = -49;
|
||||||
|
nikseUpDownStability.Maximum = 50;
|
||||||
|
nikseUpDownStability.Value = Configuration.Settings.Tools.TextToSpeechMurfPitch;
|
||||||
|
labelStability.Visible = true;
|
||||||
|
nikseUpDownStability.Visible = true;
|
||||||
|
|
||||||
|
labelSimilarity.Text = "Speed";
|
||||||
|
nikseUpDownSimilarity.Minimum = -49;
|
||||||
|
nikseUpDownSimilarity.Maximum = 50;
|
||||||
|
nikseUpDownSimilarity.Value = Configuration.Settings.Tools.TextToSpeechMurfRate;
|
||||||
|
labelSimilarity.Visible = true;
|
||||||
|
nikseUpDownSimilarity.Visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nikseComboBoxVoice.Items.Count > 0 && nikseComboBoxVoice.SelectedIndex < 0)
|
if (nikseComboBoxVoice.Items.Count > 0 && nikseComboBoxVoice.SelectedIndex < 0)
|
||||||
@ -2580,10 +2619,19 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void SaveConfiguration()
|
private void SaveConfiguration()
|
||||||
|
{
|
||||||
|
var engine = _engines.First(p => p.Index == nikseComboBoxEngine.SelectedIndex);
|
||||||
|
if (engine.Id == TextToSpeechEngineId.ElevenLabs)
|
||||||
{
|
{
|
||||||
Configuration.Settings.Tools.TextToSpeechElevenLabsStability = (double)nikseUpDownStability.Value / 100.0;
|
Configuration.Settings.Tools.TextToSpeechElevenLabsStability = (double)nikseUpDownStability.Value / 100.0;
|
||||||
Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity = (double)nikseUpDownSimilarity.Value / 100.0;
|
Configuration.Settings.Tools.TextToSpeechElevenLabsSimilarity = (double)nikseUpDownSimilarity.Value / 100.0;
|
||||||
}
|
}
|
||||||
|
else if (engine.Id == TextToSpeechEngineId.Murf)
|
||||||
|
{
|
||||||
|
Configuration.Settings.Tools.TextToSpeechMurfPitch = (int)nikseUpDownStability.Value;
|
||||||
|
Configuration.Settings.Tools.TextToSpeechMurfRate = (int)nikseUpDownSimilarity.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void HandleError(Exception ex)
|
private void HandleError(Exception ex)
|
||||||
{
|
{
|
||||||
@ -2620,6 +2668,7 @@ namespace Nikse.SubtitleEdit.Forms.Tts
|
|||||||
else if (engine.Id == TextToSpeechEngineId.Murf)
|
else if (engine.Id == TextToSpeechEngineId.Murf)
|
||||||
{
|
{
|
||||||
Configuration.Settings.Tools.TextToSpeechMurfApiKey = nikseTextBoxApiKey.Text;
|
Configuration.Settings.Tools.TextToSpeechMurfApiKey = nikseTextBoxApiKey.Text;
|
||||||
|
Configuration.Settings.Tools.TextToSpeechMurfVoice = nikseComboBoxVoice.Text;
|
||||||
}
|
}
|
||||||
|
|
||||||
Configuration.Settings.Tools.TextToSpeechEngine = engine.Id.ToString();
|
Configuration.Settings.Tools.TextToSpeechEngine = engine.Id.ToString();
|
||||||
|
Loading…
Reference in New Issue
Block a user