コード例 #1
0
ファイル: VsqTrack.cs プロジェクト: scskarsper/Cadencii_UTAU
        /// <summary>
        /// 指定した位置に,指定した量の空白を挿入します
        /// </summary>
        /// <param name="clock_start">空白を挿入する位置</param>
        /// <param name="clock_amount">挿入する空白の量</param>
        public void insertBlank(int clock_start, int clock_amount)
        {
            // イベントをシフト
            for (Iterator <VsqEvent> itr = getEventIterator(); itr.hasNext();)
            {
                VsqEvent item = itr.next();
                if (item.ID.type == VsqIDType.Singer && item.Clock <= 0)
                {
                    continue;
                }
                if (clock_start <= item.Clock)
                {
                    item.Clock += clock_amount;
                }
            }

            // コントロールカーブをシフト
            foreach (string name in CURVES)
            {
                VsqBPList list = getCurve(name);
                if (list == null)
                {
                    continue;
                }

                // 後ろからシフトしないといけない
                int size = list.size();
                for (int i = size - 1; i >= 0; i--)
                {
                    int clock = list.getKeyClock(i);
                    if (clock_start <= clock)
                    {
                        int value = list.getElementA(i);
                        list.move(clock, clock + clock_amount, value);
                    }
                }
            }
        }