public void SetSasaraSettings(
            SasaraSettings settings)
        {
            this.StartSasara();

            if (string.IsNullOrWhiteSpace(talker.Cast) &&
                Talker.AvailableCasts.Length > 0)
            {
                talker.Cast = Talker.AvailableCasts[0];
            }

            if (talker.Cast != settings.Cast ||
                talker.Volume != settings.Volume ||
                talker.Speed != settings.Speed ||
                talker.Tone != settings.Tone ||
                talker.Alpha != settings.Alpha)
            {
                talker.Cast = settings.Cast;
                talker.Volume = settings.Volume;
                talker.Speed = settings.Speed;
                talker.Tone = settings.Tone;
                talker.Alpha = settings.Alpha;
            }

            if (settings.Components != null)
            {
                foreach (var c in settings.Components)
                {
                    var t = talker.Components
                        .Where(x => x.Id == c.Id)
                        .FirstOrDefault();

                    if (t != null)
                    {
                        if (t.Value != c.Value)
                        {
                            t.Value = c.Value;
                        }
                    }
                }
            }
        }
        public SasaraSettings GetSasaraSettings()
        {
            this.StartSasara();

            var settings = new SasaraSettings();

            settings.Volume = talker.Volume;
            settings.Speed = talker.Speed;
            settings.Tone = talker.Tone;
            settings.Alpha = talker.Alpha;
            settings.Cast = talker.Cast;
            settings.AvailableCasts = Talker.AvailableCasts;

            var compornents = new List<SasaraTalkerComponent>();
            for (int i = 0; i < talker.Components.Count; i++)
            {
                compornents.Add(new SasaraTalkerComponent()
                {
                    Id = talker.Components[i].Id,
                    Name = talker.Components[i].Name,
                    Value = talker.Components[i].Value,
                });
            }

            settings.Components = compornents.ToArray();

            return settings;
        }
        /// <summary>
        /// Load
        /// </summary>
        /// <param name="sender">イベント発生元</param>
        /// <param name="e">イベント引数</param>
        private void SasaraSettingsPanel_Load(object sender, EventArgs e)
        {
            this.talker = TTSServerController.Message.GetSasaraSettings();

            // キャストコンボボックスを設定する
            var casts = this.talker.AvailableCasts;
            this.castComboBox.Items.AddRange(casts);
            this.castComboBox.TextChanged += (s1, e1) =>
            {
                this.talker.Cast = this.castComboBox.Text;

                TTSServerController.Message.SetSasaraSettings(new TTSMessage.SasaraSettingsEventArg() 
                {
                    Settings = this.talker
                });

                this.talker = TTSServerController.Message.GetSasaraSettings();

                var components = this.talker.Components;
                for (int i = 0; i < components.Length; i++)
                {
                    var c = components[i];

                    var component = this.componentsTable
                        .Where(x => x.Id == c.Id)
                        .FirstOrDefault();

                    if (component == null)
                    {
                        this.componentsTable.AddSasaraComponentsRow(
                            c.Id,
                            c.Name,
                            c.Value,
                            this.talker.Cast);
                    }
                }

                this.kanjoDataGridView.AutoGenerateColumns = false;
                this.kanjoDataGridView.DataSource = componentsTable
                    .Where(x => x.Cast == this.talker.Cast)
                    .ToList();

                // 設定を保存する
                this.SaveSettings();
            };

            // 音量関係のテキストボックスを設定する
            this.onryoTextBox.Leave += (s1, e1) =>
            {
                this.ValidateParameter(s1 as TextBox);
            };

            this.hayasaTextBox.Leave += (s1, e1) =>
            {
                this.ValidateParameter(s1 as TextBox);
            };

            this.takasaTextBox.Leave += (s1, e1) =>
            {
                this.ValidateParameter(s1 as TextBox);
            };

            this.seishitsuTextBox.Leave += (s1, e1) =>
            {
                this.ValidateParameter(s1 as TextBox);
            };

            // 設定をロードする
            this.onryoTextBox.Text = TTSYukkuriConfig.Default.SasaraSettings.Onryo.ToString();
            this.hayasaTextBox.Text = TTSYukkuriConfig.Default.SasaraSettings.Hayasa.ToString();
            this.takasaTextBox.Text = TTSYukkuriConfig.Default.SasaraSettings.Takasa.ToString();
            this.seishitsuTextBox.Text = TTSYukkuriConfig.Default.SasaraSettings.Seishitsu.ToString();
            this.componentsTable = TTSYukkuriConfig.Default.SasaraSettings.Components;
            this.castComboBox.Text = TTSYukkuriConfig.Default.SasaraSettings.Cast;

            // ささらを設定する
            TTSYukkuriConfig.Default.SetSasara();
        }