예제 #1
0
        /// <summary>
        /// 口形状キー領域をモーフウェイト値で変換してタイムラインへ追加する。
        /// </summary>
        /// <param name="table">追加先のタイムラインテーブル。</param>
        /// <param name="lipKeyArea">口形状キー領域。</param>
        /// <param name="morphWeight">モーフ名とそのウェイト値。</param>
        /// <param name="morphEtoAI">
        /// "え" から "あ","い" へのモーフ変更を行うならば true 。
        /// </param>
        private void AddMorphKeyArea(
            MorphTimelineTable table,
            KeyArea lipKeyArea,
            MorphWeightData morphWeight,
            bool morphEtoAI)
        {
            // "え" から "あ","い" への変換を行うか?
            bool e2ai = (morphEtoAI && morphWeight.MorphName == "え");

            // キー領域作成
            var area = new KeyArea();
            foreach (var p in lipKeyArea.Points)
            {
                area.AddPointAfter(
                    p.Key,
                    p.Value * morphWeight.Weight * (e2ai ? 0.5f : 1.0f));
            }

            // タイムラインに追加
            if (e2ai)
            {
                table.GetOrAddNew("あ").KeyAreas.Add(area);
                table.GetOrAddNew("い").KeyAreas.Add(area);
            }
            else
            {
                table.GetOrAddNew(morphWeight.MorphName).KeyAreas.Add(area);
            }
        }
예제 #2
0
        /// <summary>
        /// 口形状キー領域をモーフウェイト値で変換してタイムラインへ追加する。
        /// </summary>
        /// <param name="table">追加先のタイムラインテーブル。</param>
        /// <param name="lipKeyArea">口形状キー領域。</param>
        /// <param name="morphWeight">モーフ名とそのウェイト値。</param>
        /// <param name="morphEtoAI">
        /// "え" から "あ","い" へのモーフ変更を行うならば true 。
        /// </param>
        private void AddMorphKeyArea(
            MorphTimelineTable table,
            TimelineKeyArea lipKeyArea,
            MorphWeightData morphWeight,
            bool morphEtoAI)
        {
            // "え" から "あ","い" への変換を行うか?
            bool e2ai = (morphEtoAI && morphWeight.MorphName == "え");

            // キー領域作成
            var area = lipKeyArea.Clone();
            foreach (var p in lipKeyArea.Points.Keys)
            {
                area.Points[p] *= morphWeight.Weight * (e2ai ? 0.5f : 1.0f);
            }

            // タイムラインに追加
            // モーフ名が空文字列のものは弾く
            if (e2ai)
            {
                table.GetOrAddNew("あ").KeyAreas.Add(area);
                table.GetOrAddNew("い").KeyAreas.Add(area);
            }
            else if (!string.IsNullOrEmpty(morphWeight.MorphName))
            {
                table.GetOrAddNew(morphWeight.MorphName).KeyAreas.Add(area);
            }
        }