/// <summary>
        /// コマンドをシリアライズする。
        /// </summary>
        /// <param name="command">コマンド。</param>
        /// <returns>シリアライズ結果。</returns>
        private static string SerializeCommand(LipServiceCommand command)
        {
            var serializer = new DataContractSerializer(command.GetType());

            var output = new StringBuilder();
            var xmlSettings = new XmlWriterSettings { Indent = true };
            using (var writer = XmlWriter.Create(output, xmlSettings))
            {
                serializer.WriteObject(writer, command);
            }

            return output.ToString();
        }
Beispiel #2
0
        /// <summary>
        /// MorphWeights コマンドを設定する。
        /// </summary>
        /// <param name="morphWeights">モーフウェイト列挙。</param>
        public void SetMorphWeightsCommand(IEnumerable<MorphWeightData> morphWeights)
        {
            if (morphWeights == null)
            {
                throw new ArgumentNullException(nameof(morphWeights));
            }

            // モーフ名が空文字列のものは弾く
            var param =
                new MorphWeightDataList(
                    morphWeights.Where(mw => !string.IsNullOrEmpty(mw.MorphName)));

            lock (commandLockObject)
            {
                this.Command =
                    new LipServiceCommand(
                        this.Command.Counter + 1,
                        LipServiceCommandId.MorphWeights,
                        param);
            }
        }
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="command">イベントに紐付くコマンド。</param>
 public LipServiceCommandEventArgs(LipServiceCommand command)
 {
     this.Command = command;
 }
Beispiel #4
0
        /// <summary>
        /// KeyFrames コマンドを設定する。
        /// </summary>
        /// <param name="targetMorphNames">
        /// 操作対象モーフ名配列。 tlTable.MorphNames を用いるならば null 。
        /// </param>
        /// <param name="tlTable">モーフ別タイムラインテーブル。</param>
        /// <param name="unitSeconds">
        /// ユニット基準長(「ア」の長さ)に相当する秒数値。
        /// </param>
        /// <param name="edgeWeightZero">
        /// キーフレームリストの先頭と終端で、
        /// 含まれている全モーフのウェイト値をゼロ初期化するならば true 。
        /// </param>
        /// <param name="naturalLink">
        /// クライアント側が対応していれば、キーフレームリスト挿入位置前後の
        /// ウェイト値から自然に繋ぐならば true 。
        /// </param>
        /// <param name="keyFrameReplacing">
        /// クライアント側が対応していれば、キーフレームリスト挿入範囲の
        /// 既存キーフレームを削除して置き換えるならば true 。
        /// </param>
        public void SetKeyFramesCommand(
            string[] targetMorphNames,
            MorphTimelineTable tlTable,
            decimal unitSeconds,
            bool edgeWeightZero,
            bool naturalLink,
            bool keyFrameReplacing)
        {
            if (tlTable == null)
            {
                throw new ArgumentNullException(nameof(tlTable));
            }
            if (unitSeconds <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(unitSeconds));
            }

            var param =
                new KeyFramesCommandParameter
                {
                    TargetMorphNames = targetMorphNames,
                    TimelineTable = tlTable,
                    UnitSeconds = unitSeconds,
                    IsEdgeWeightZero = edgeWeightZero,
                    IsNaturalLink = naturalLink,
                    IsKeyFrameReplacing = keyFrameReplacing,
                };

            lock (commandLockObject)
            {
                this.Command =
                    new LipServiceCommand(
                        this.Command.Counter + 1,
                        LipServiceCommandId.KeyFrames,
                        param);
            }
        }