Esempio n. 1
0
        /// <summary>
        /// コンストラクタ。
        /// </summary>
        /// <param name="name">
        /// プリセット名。 null を指定すると既定値になる。
        /// </param>
        /// <param name="value">
        /// プリセットデータ。 null を指定すると既定値になる。
        /// </param>
        public MorphPreset(string name, MorphInfoSet value)
        {
            if (name != null && !IsValidName(name))
            {
                throw new ArgumentException("Invalid preset name.", nameof(name));
            }

            this.Name = name ?? DefaultName;
            this.Value = value ?? new MorphInfoSet();
        }
        /// <summary>
        /// 口形状タイムラインセットとモーフ情報セットから
        /// モーフ別タイムラインテーブルを作成する。
        /// </summary>
        /// <param name="tlSet">口形状タイムラインセット。</param>
        /// <param name="morphSet">モーフ情報セット。</param>
        /// <param name="morphEtoAI">
        /// "え" から "あ","い" へのモーフ変更を行うならば true 。
        /// </param>
        /// <returns>モーフ別タイムラインテーブル。</returns>
        public MorphTimelineTable Make(
            TimelineSet tlSet,
            MorphInfoSet morphSet,
            bool morphEtoAI)
        {
            var table = new MorphTimelineTable();

            foreach (var mt in tlSet)
            {
                var timeline = mt.Value;
                var morphInfo = morphSet[mt.Key];

                timeline.KeyAreas.ForEach(
                    area =>
                    {
                        foreach (var mw in morphInfo.MorphWeights)
                        {
                            AddMorphKeyArea(table, area, mw, morphEtoAI);
                        }
                    });
            }

            return table;
        }
        /// <summary>
        /// モーフ別タイムラインテーブルを作成する。
        /// </summary>
        /// <returns>モーフ別タイムラインテーブル。</returns>
        private static MorphTimelineTable MakeMorphTimelineTableCore(
            IEnumerable<LipSyncUnit> units,
            decimal linkLengthPercent,
            float longSoundLastWeight,
            bool edgeClosed,
            MorphInfoSet morphSet,
            bool morphEtoAI)
        {
            // 口形状別タイムラインセット作成
            TimelineSet tlSet = null;
            {
                var maker = new TimelineSetMaker();
                maker.LinkLengthPercent = linkLengthPercent;
                maker.LongSoundLastWeight = longSoundLastWeight;
                maker.IsEdgeClosed = edgeClosed;
                tlSet = maker.Make(units);
            }

            // モーフ別タイムラインテーブル作成
            MorphTimelineTable dest = null;
            {
                var maker = new MorphTimelineTableMaker();
                dest = maker.Make(tlSet, morphSet, morphEtoAI);
            }

            return dest;
        }
        /// <summary>
        /// コンストラクタ。
        /// </summary>
        /// <param name="src">編集対象の MorphInfoSet 。</param>
        public MorphInfoSetViewModel(MorphInfoSet src)
        {
            if (src == null)
            {
                throw new ArgumentNullException(nameof(src));
            }

            this.Source = src;
            this.Items =
                new ReadOnlyObservableCollection<Item>(
                    new ObservableCollection<Item>
                    {
                        new Item(LipId.A, src.A),
                        new Item(LipId.I, src.I),
                        new Item(LipId.U, src.U),
                        new Item(LipId.E, src.E),
                        new Item(LipId.O, src.O),
                        new Item(LipId.Closed, src.Closed),
                    });
        }