예제 #1
0
 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));
 }
예제 #2
0
        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());
 }
예제 #4
0
        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));
        }