public static VsqCommand generateCommandTrackCurveReplace(int track, string target_curve, VsqBPList bplist) { VsqCommand command = new VsqCommand(); command.Type = VsqCommandType.TRACK_CURVE_REPLACE; command.Args = new Object[3]; command.Args[0] = track; command.Args[1] = target_curve; command.Args[2] = bplist.clone(); return(command); }
public Object clone() { VsqMetaText res = new VsqMetaText(); if (Common != null) { res.Common = (VsqCommon)Common.clone(); } if (master != null) { res.master = (VsqMaster)master.clone(); } if (mixer != null) { res.mixer = (VsqMixer)mixer.clone(); } if (Events != null) { res.Events = new VsqEventList(); foreach (var item in Events.iterator()) { res.Events.add((VsqEvent)item.clone(), item.InternalID); } } if (PIT != null) { res.PIT = (VsqBPList)PIT.clone(); } if (PBS != null) { res.PBS = (VsqBPList)PBS.clone(); } if (DYN != null) { res.DYN = (VsqBPList)DYN.clone(); } if (BRE != null) { res.BRE = (VsqBPList)BRE.clone(); } if (BRI != null) { res.BRI = (VsqBPList)BRI.clone(); } if (CLE != null) { res.CLE = (VsqBPList)CLE.clone(); } if (reso1FreqBPList != null) { res.reso1FreqBPList = (VsqBPList)reso1FreqBPList.clone(); } if (reso2FreqBPList != null) { res.reso2FreqBPList = (VsqBPList)reso2FreqBPList.clone(); } if (reso3FreqBPList != null) { res.reso3FreqBPList = (VsqBPList)reso3FreqBPList.clone(); } if (reso4FreqBPList != null) { res.reso4FreqBPList = (VsqBPList)reso4FreqBPList.clone(); } if (reso1BWBPList != null) { res.reso1BWBPList = (VsqBPList)reso1BWBPList.clone(); } if (reso2BWBPList != null) { res.reso2BWBPList = (VsqBPList)reso2BWBPList.clone(); } if (reso3BWBPList != null) { res.reso3BWBPList = (VsqBPList)reso3BWBPList.clone(); } if (reso4BWBPList != null) { res.reso4BWBPList = (VsqBPList)reso4BWBPList.clone(); } if (reso1AmpBPList != null) { res.reso1AmpBPList = (VsqBPList)reso1AmpBPList.clone(); } if (reso2AmpBPList != null) { res.reso2AmpBPList = (VsqBPList)reso2AmpBPList.clone(); } if (reso3AmpBPList != null) { res.reso3AmpBPList = (VsqBPList)reso3AmpBPList.clone(); } if (reso4AmpBPList != null) { res.reso4AmpBPList = (VsqBPList)reso4AmpBPList.clone(); } if (harmonics != null) { res.harmonics = (VsqBPList)harmonics.clone(); } if (fx2depth != null) { res.fx2depth = (VsqBPList)fx2depth.clone(); } if (GEN != null) { res.GEN = (VsqBPList)GEN.clone(); } if (POR != null) { res.POR = (VsqBPList)POR.clone(); } if (OPE != null) { res.OPE = (VsqBPList)OPE.clone(); } return(res); }
/// <summary> /// このトラックの指定した範囲を削除し,削除範囲以降の部分を削除開始位置までシフトします /// </summary> /// <param name="clock_start"></param> /// <param name="clock_end"></param> public void removePart(int clock_start, int clock_end) { int dclock = clock_end - clock_start; // 削除する範囲に歌手変更イベントが存在するかどうかを検査。 VsqEvent t_last_singer = null; for (Iterator <VsqEvent> itr = getSingerEventIterator(); itr.hasNext();) { VsqEvent ve = itr.next(); if (clock_start <= ve.Clock && ve.Clock < clock_end) { t_last_singer = ve; } if (ve.Clock == clock_end) { t_last_singer = null; // 後でclock_endの位置に補うが、そこにに既に歌手変更イベントがあるとまずいので。 } } VsqEvent last_singer = null; if (t_last_singer != null) { last_singer = (VsqEvent)t_last_singer.clone(); last_singer.Clock = clock_end; } bool changed = true; // イベントの削除 while (changed) { changed = false; int numEvents = getEventCount(); for (int i = 0; i < numEvents; i++) { VsqEvent itemi = getEvent(i); if (clock_start <= itemi.Clock && itemi.Clock < clock_end) { removeEvent(i); changed = true; break; } } } // クロックのシフト if (last_singer != null) { addEvent(last_singer); //歌手変更イベントを補う } int num_events = getEventCount(); for (int i = 0; i < num_events; i++) { VsqEvent itemi = getEvent(i); if (clock_end <= itemi.Clock) { itemi.Clock -= dclock; } } for (int i = 0; i < VsqTrack.CURVES.Length; i++) { string curve = VsqTrack.CURVES[i]; VsqBPList bplist = getCurve(curve); if (bplist == null) { continue; } VsqBPList buf_bplist = (VsqBPList)bplist.clone(); bplist.clear(); int value_at_end = buf_bplist.getValue(clock_end); bool at_end_added = false; foreach (var key in buf_bplist.keyClockIterator()) { if (key < clock_start) { bplist.add(key, buf_bplist.getValue(key)); } else if (clock_end <= key) { if (key == clock_end) { at_end_added = true; } bplist.add(key - dclock, buf_bplist.getValue(key)); } } if (!at_end_added) { bplist.add(clock_end - dclock, value_at_end); } } }