/// <summary> /// 設定ファイルを読み込む /// </summary> /// <returns>読み込まれたらtrueを返す</returns> public static bool Load() { bool result; SystemSettingModel system_setting; SpeakerSettingModel speaker_setting; try { using (Stream stream = new FileStream(Path, FileMode.Open, FileAccess.Read)) { var serializer = new DataContractJsonSerializer(typeof(SettingJson)); var setting = (SettingJson)serializer.ReadObject(stream); system_setting = setting.System; speaker_setting = setting.Speaker; } result = true; } catch (Exception) { // 初期値を返す system_setting = new SystemSettingModel(); speaker_setting = new SpeakerSettingModel(); result = false; } ApplySystemSetting(system_setting); ApplySpeakerSetting(speaker_setting); return(result); }
public IActionResult SpeakerSetting(string voice_db) { SpeakerSettingModel 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; } } 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; 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(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()); }
/// <summary> /// 新しい話者設定値を適用する。 /// </summary> /// <param name="setting">新しい話者設定値</param> /// <returns>エラーメッセージ、もしくはnull</returns> public static string ApplySpeakerSetting(SpeakerSettingModel setting) { Speaker = setting; try { // ボイスライブラリを読み込む if (0 < Speaker.VoiceDbName.Length) { // 指定されたボイスライブラリを読み込む string voice_db_name = Speaker.VoiceDbName; AitalkWrapper.LoadVoice(voice_db_name); // 話者が指定されているときはその話者を選択する if (0 < Speaker.SpeakerName.Length) { AitalkWrapper.Parameter.CurrentSpeakerName = Speaker.SpeakerName; } } else { // 未指定の場合、初めに見つけたものを読み込む string voice_db_name = AitalkWrapper.VoiceDbList.FirstOrDefault() ?? ""; AitalkWrapper.LoadVoice(voice_db_name); } // 話者パラメータの初期値を記憶する DefaultSpeakerParameter = new SpeakerModel { Volume = AitalkWrapper.Parameter.VoiceVolume, Speed = AitalkWrapper.Parameter.VoiceSpeed, Pitch = AitalkWrapper.Parameter.VoicePitch, Emphasis = AitalkWrapper.Parameter.VoiceEmphasis, PauseMiddle = AitalkWrapper.Parameter.PauseMiddle, PauseLong = AitalkWrapper.Parameter.PauseLong, PauseSentence = AitalkWrapper.Parameter.PauseSentence }; return(null); } catch (AitalkException ex) { return(ex.Message); } catch (Exception ex) { return(ex.Message); } }