/// <summary>
        /// スピーカー属性ファイルを読み込みキャラクター属性に追加する。
        /// </summary>
        /// <param name="charAttributeFile">キャラクター属性</param>
        /// <param name="path">スピーカー属性ファイル</param>
        public static void AppendSpeakerAttribute(MieCharacterAttributeFile charAttributeFile, string path)
        {
            if (!File.Exists(path))
            {
                var msg = $"File not found.";
                throw new FileNotFoundException("File not found. path", path);
            }

            string jtext = File.ReadAllText(path, Encoding.UTF8);

            //// JSON中の"$type"はデシリアライズできないため、"MieGameDataTypeTag"にリネームして処理する。詳細はwiki参照。
            jtext = jtext.Replace("$type", "MieGameDataTypeTag");

            //// デシリアライズ
            var oeSpeakers = JsonConvert.DeserializeObject <MieOESpeakers>(jtext);

            foreach (var gameDataObject in oeSpeakers.GameDataObjects)
            {
                var tag = GetGameDataTypeTag(gameDataObject.MieGameDataTypeTag);
                switch (tag)
                {
                case "SpeakerGameData":
                    var component = gameDataObject.Components[0];
                    //// スピーカー属性
                    var gender = GetGender(component.Gender);
                    MieSpeakerAttributeEntry attrEntry =
                        new MieSpeakerAttributeEntry(new Guid(gameDataObject.ID), gameDataObject.DebugName, gender);
                    charAttributeFile.AddSpeakerEntry(attrEntry);

                    break;

                default:
                    continue;
                }
            }
        }
        public static void LoadFromSystemDB(MieSystemDB systemDB, MieCharacterAttributeFile charAttr)
        {
            SQLiteCommand command = systemDB.Connection.CreateCommand();

            command.CommandText = @"SELECT * FROM SpeakerAttributes;";
            using (SQLiteDataReader sdr = command.ExecuteReader())
            {
                while (sdr.Read() == true)
                {
                    var byteID    = (byte[])sdr["ID"];
                    var name      = (string)sdr["Name"];
                    var intGender = (long)sdr["Gender"];

                    Guid id = new Guid(byteID);

                    MieCharacterAttributeFile.NGender gender =
                        (MieCharacterAttributeFile.NGender)Enum.ToObject(typeof(MieCharacterAttributeFile.NGender), intGender);

                    MieSpeakerAttributeEntry speakerEntry = new MieSpeakerAttributeEntry(id, name, gender);

                    charAttr.AddSpeakerEntry(speakerEntry);
                }
            }
        }