public IActionResult SpeakerSetting(SpeakerSettingModel speaker_setting) { if (speaker_setting != null) { string error_message = null; bool saved = false; Setting.Lock(); try { error_message = Setting.ApplySpeakerSetting(speaker_setting); saved = Setting.Save(); } finally { Setting.Unlock(); } if (saved == false) { ViewData["Alert"] = "設定の保存に失敗しました。"; } else if (error_message != null) { ViewData["Alert"] = $"設定は保存されましたがエラーが発生しました。{error_message}"; } else { ViewData["Alert"] = "設定は保存され、設定の有効性が確認されました。"; } } return(SpeakerSetting((string)null)); }
public IActionResult SpeakerSetting(string voice_db) { var model = Setting.Speaker.Clone(); model.VoiceDbName = voice_db ?? Setting.Speaker.VoiceDbName; // 話者名のリストを取得する string[] voice_names = null; Setting.Lock(); try { if ((model.VoiceDbName != null) && (0 < model.VoiceDbName.Length)) { AitalkWrapper.LoadVoice(model.VoiceDbName); voice_names = AitalkWrapper.Parameter.VoiceNames; _ = Setting.ApplySpeakerSetting(Setting.Speaker); } } catch (Exception) { } finally { Setting.Unlock(); } // 音声ライブラリと話者のリストを作成してビューに渡す ViewData["VoiceDbListItems"] = GenerateSelectListItems(AitalkWrapper.VoiceDbList); ViewData["SpeakerListItems"] = GenerateSelectListItems(voice_names); return(View(model)); }
public IActionResult SpeakerSetting(SpeakerSettingModel speaker_setting) { if (speaker_setting != null) { string error_message = null; var saved = false; Setting.Lock(); try { error_message = Setting.ApplySpeakerSetting(speaker_setting); saved = Setting.Save(); } finally { Setting.Unlock(); } if (saved == false) { return(BadRequest("Failed to save")); } else if (error_message != null) { return(BadRequest($"Saved but {error_message}")); } else { return(Ok("OK")); } } return(NotFound()); }
public IActionResult SpeectTextFromPost([FromBody] SpeechModel speech_model) { Setting.Lock(); try { if (speech_model.SpeakerSetting != null && speech_model.SpeakerSetting.VoiceDbName.Length > 0 && speech_model.SpeakerSetting.SpeakerName.Length > 0 && AitalkWrapper.Parameter.CurrentSpeakerName != speech_model.SpeakerSetting.SpeakerName) { var error_message = Setting.ApplySpeakerSetting(speech_model.SpeakerSetting); if (error_message != null) { return(BadRequest($"Saved but {error_message}")); } } // 話者パラメータを設定する var speaker = speech_model.Speaker ?? new SpeakerModel(); AitalkWrapper.Parameter.VoiceVolume = (0 <= speaker.Volume) ? speaker.Volume : Setting.DefaultSpeakerParameter.Volume; AitalkWrapper.Parameter.VoiceSpeed = (0 <= speaker.Speed) ? speaker.Speed : Setting.DefaultSpeakerParameter.Speed; AitalkWrapper.Parameter.VoicePitch = (0 <= speaker.Pitch) ? speaker.Pitch : Setting.DefaultSpeakerParameter.Pitch; AitalkWrapper.Parameter.VoiceEmphasis = (0 <= speaker.Emphasis) ? speaker.Emphasis : Setting.DefaultSpeakerParameter.Emphasis; AitalkWrapper.Parameter.PauseMiddle = (0 <= speaker.PauseMiddle) ? speaker.PauseMiddle : Setting.DefaultSpeakerParameter.PauseMiddle; AitalkWrapper.Parameter.PauseLong = (0 <= speaker.PauseLong) ? speaker.PauseLong : Setting.DefaultSpeakerParameter.PauseLong; AitalkWrapper.Parameter.PauseSentence = (0 <= speaker.PauseSentence) ? speaker.PauseSentence : Setting.DefaultSpeakerParameter.PauseSentence; // テキストが与えられた場合は仮名に変換する string kana = null; if ((speech_model.Kana != null) && (0 < speech_model.Kana.Length)) { kana = speech_model.Kana; } else if ((speech_model.Text != null) && (0 < speech_model.Text.Length)) { kana = AitalkWrapper.TextToKana(speech_model.Text, Setting.System.KanaTimeout); } if ((kana == null) || (kana.Length <= 0)) { return(new NoContentResult()); } // 音声変換して結果を返す var wave_stream = new MemoryStream(); AitalkWrapper.KanaToSpeech(kana, wave_stream, Setting.System.SpeechTimeout); return(new FileContentResult(wave_stream.ToArray(), "audio/wav")); } catch (Exception) { return(new NoContentResult()); } finally { Setting.Unlock(); } }
/// <summary> /// 話者リストを取得する.全ライブラリをロードするので時間がかかる. /// </summary> /// <returns></returns> public IActionResult GetSpeakers() { var libname2speaker = new Dictionary <string, string[]>(); Setting.Lock(); foreach (var libname in AitalkWrapper.VoiceDbList) { AitalkWrapper.LoadVoice(libname); var voice_names = AitalkWrapper.Parameter.VoiceNames; libname2speaker.Add(libname, voice_names); } _ = Setting.ApplySpeakerSetting(Setting.Speaker); Setting.Unlock(); return(Ok(libname2speaker)); }