void setupSingerIcon() { if (ProjectBeeper == null || ProjectBeeper.AllocedObject == null) { return; } if (OAC == null || OAC.AllocedObject == null) { return; } ProjectObject po = (ProjectObject)ProjectBeeper.AllocedObject; PartsObject pt = (PartsObject)OAC.AllocedObject; string avatar = ""; if (po.SingerList.Count > 0) { avatar = po.SingerList[0].Avatar; } foreach (SingerObject so in po.SingerList) { if (so.getGuid() == pt.SingerGUID) { avatar = so.Avatar; break; } } if (System.IO.File.Exists(avatar)) { UtauPic.Image = Image.FromFile(avatar); } else { UtauPic.Image = null; } }
/// <summary> /// パーツオブジェクトのクリック /// </summary> private void OnPartsClicked(PartsObject partsObj) { //選択パーツに設定 select = partsObj; //有効化 owner.ActivateState(this.name); }
public void UpdateLyrics(ref PartsObject parts, int NoteIndex) { int curIndex = NoteIndex; NoteObject[] NoteMap = new NoteObject[] { null, null, null, null, null }; NoteMap[0] = curIndex - 2 >= 0 ? parts.NoteList[curIndex - 2] : null; NoteMap[1] = curIndex - 1 >= 0 ? parts.NoteList[curIndex - 1] : null; NoteMap[2] = parts.NoteList[curIndex]; NoteMap[3] = curIndex + 1 < parts.NoteList.Count ? parts.NoteList[curIndex + 1] : null; NoteMap[4] = curIndex + 2 < parts.NoteList.Count ? parts.NoteList[curIndex + 2] : null; // p2 p1 cur // p1 cur n1 // cur n1 n2 if (NoteMap[1] != null) { SetupCurrentPhonmem(NoteMap[0], NoteMap[1], NoteMap[2], parts.Tempo, parts.UseLyricDicitonary); } if (NoteMap[2] != null) { SetupCurrentPhonmem(NoteMap[1], NoteMap[2], NoteMap[3], parts.Tempo, parts.UseLyricDicitonary); } if (NoteMap[3] != null) { SetupCurrentPhonmem(NoteMap[2], NoteMap[3], NoteMap[4], parts.Tempo, parts.UseLyricDicitonary); } }
void FillObject(ProjectObject source) { if (source == null) { return; } ProjectObject dest = ProjectObject; FillObject(ref dest, source); try { PartsObject po = dest.TrackerList[0].PartList[0]; for (int i = 0; i < dest.TrackerList.Count; i++) { for (int j = 0; j < dest.TrackerList[i].PartList.Count; j++) { if (dest.TrackerList[i].PartList[j].getGuid() == SelectingGUID) { po = dest.TrackerList[i].PartList[j]; break; i = dest.TrackerList.Count; } } } sw.LoadParts(ref po, true); tw.GuiRefresh(); aw.Refresh(); } catch {; } }
public void UpdateOutboundsLyric(ref PartsObject parts, int StartNoteIndex, int EndNoteIndex) { if (EndNoteIndex < 0) { EndNoteIndex = parts.NoteList.Count - 1; } if (StartNoteIndex < 0) { StartNoteIndex = 0; } if (EndNoteIndex > parts.NoteList.Count - 1) { EndNoteIndex = parts.NoteList.Count - 1; } NoteObject[] NoteMap = new NoteObject[] { null, null, null, null, null, null }; NoteMap[0] = StartNoteIndex - 2 >= 0 ? parts.NoteList[StartNoteIndex - 2] : null; NoteMap[1] = StartNoteIndex - 1 >= 0 ? parts.NoteList[StartNoteIndex - 1] : null; NoteMap[2] = parts.NoteList[StartNoteIndex]; NoteMap[3] = parts.NoteList[EndNoteIndex]; NoteMap[4] = EndNoteIndex + 1 < parts.NoteList.Count ? parts.NoteList[EndNoteIndex + 1] : null; NoteMap[5] = EndNoteIndex + 2 < parts.NoteList.Count ? parts.NoteList[EndNoteIndex + 2] : null; if (NoteMap[1] != null) { SetupCurrentPhonmem(NoteMap[0], NoteMap[1], NoteMap[2], parts.Tempo, parts.UseLyricDicitonary); } if (NoteMap[4] != null) { SetupCurrentPhonmem(NoteMap[3], NoteMap[4], NoteMap[5], parts.Tempo, parts.UseLyricDicitonary); } }
void setupSingerIcon() { if (ProjectBeeper == null || ProjectBeeper.AllocedObject == null) { return; } if (OAC == null || OAC.AllocedObject == null) { return; } ProjectObject po = ProjectBeeper.AllocedSource; PartsObject pt = OAC.AllocedSource; string avatar = ""; if (po.SingerList.Count > 0) { avatar = PathUtils.AbsolutePath(po.SingerList[0].getRealSingerFolder(), po.SingerList[0].Avatar); } foreach (SingerObject so in po.SingerList) { if (so.getGuid() == pt.SingerGUID) { avatar = PathUtils.AbsolutePath(so.getRealSingerFolder(), so.Avatar); break; } } if (System.IO.File.Exists(avatar)) { UtauPic.Image = Image.FromFile(avatar); } else { UtauPic.Image = null; } }
static void FitPartsObject(PartsObject proj) { if (proj.BasePitchList == null) { proj.PitchCompiler.InitPitchBase(); } }
ProjectObject LoadUST(string FilePath) { USTOriginalProject USTPO = USTOriginalSerializer.Deserialize(FilePath); PartsObject pro = USTOriginalSerializer.UST2Parts(USTPO); ProjectObject poj = new ProjectObject(); poj.InitEmpty(); poj.TrackerList[1].PartList[0] = pro; foreach (NoteObject po in pro.NoteList) { byte[] bt = System.Text.Encoding.Default.GetBytes(po.Lyric); string Str = System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bt); po.Lyric = Str; } int sg = 1; for (long i = 1; i <= pro.TickLength; i += 32)// { sg = sg * -1; pro.PitchList.Add(new PitchObject(i, sg * 0.5)); } pro.PitchCompiler.FixedPitch(); string abc = ProjectObject.Serializer.Serialize(poj); return(poj); }
List <PitchObject>[] getPitchObjLists(long MinTick = -1, long MaxTick = -1) { long nt = MinTick > 0 ? MinTick : PianoWindow.MinShownTick; long mt = MaxTick > nt ? MaxTick : PianoWindow.MaxShownTick; List <KeyValuePair <long, long> > Partsy = new List <KeyValuePair <long, long> >(); long st = -1; long et = -1; for (int i = 0; i < NoteList.Count; i++) { NoteObject PN = NoteList[i]; if (PN.Tick >= mt) { break; } if (PN.Tick + PN.Length < nt) { continue; } if (et != -1 && PN.Tick - et > AntiBordTick)//AntiBordTick在这里为音符间最大间隔 { if (st != -1) { Partsy.Add(new KeyValuePair <long, long>(st, et)); st = -1; et = -1; } } if (st == -1) { st = PN.Tick; } et = PN.Tick + PN.Length; } if (st != -1 && et != -1) { Partsy.Add(new KeyValuePair <long, long>(st, et)); st = -1; et = -1; } List <List <PitchObject> > Ret = new List <List <PitchObject> >(); foreach (KeyValuePair <long, long> SE in Partsy) { if (SE.Key < SE.Value) { List <PitchObject> PList = new List <PitchObject>(); for (long i = TickSortList <PitchObject> .TickFormat(SE.Key); i <= TickSortList <PitchObject> .TickFormat(SE.Value); i = i + TickSortList <PitchObject> .TickStep) { PartsObject po = PartsObject; PList.Add(new PitchObject(i, po.PitchCompiler.getRealPitch(i))); } Ret.Add(PList); } } return(Ret.ToArray()); }
///<summary>パーツラベル描画</summary> void DrawPartsLabel() { List <enPartsType> drawList = BasePosition.GenGetZSortList(sendMotion_.stPassive.isLeft, sendMotion_.stPassive.isBack); foreach (var item in drawList) { DrawParts(item, false); } const int MAG = 5; foreach (var item in drawList) { PartsObject partsObject = GetPartsObject(item); Vector2 pos = partsObject.pos; pos.y = -pos.y; //上下反転 //bool mirror = partsObject.partsTransform.mirror; Sprite sp = parent_.GetSprite(item, sendMotion_.stPassive.isBack, sendMotion_.stPassive.faceNo); if (sp == null) { break; } Vector2 basepos = new Vector2(-sp.pivot.x, +sp.pivot.y - sp.rect.height); //Vector2 size = new Vector2(sp.rect.width, sp.rect.height); Vector2 labelpos = new Vector2(128, 256) / MAG; Vector2 drawPos = (basepos + labelpos + pos); // GUIの見た目を変える。 GUIStyle guiStyle = new GUIStyle(); GUIStyleState styleState = new GUIStyleState(); string vecstr = ""; if (isSabunPos_) { // テキストの色を設定 styleState.textColor = Color.yellow; vecstr = "(" + ((int)(sendMotion_.stPos.GetPos(item).x)).ToString() + "," + ((int)(sendMotion_.stPos.GetPos(item).y)).ToString() + ")"; } else { // テキストの色を設定 styleState.textColor = Color.white; vecstr = "(" + ((int)(drawPos.x)).ToString() + "," + ((int)(drawPos.y)).ToString() + ")"; } // スタイルの設定。 guiStyle.normal = styleState; guiStyle.alignment = TextAnchor.MiddleCenter; Vector2 labelPos = new Vector2(drawPos.x, drawPos.y); Rect labelRect = new Rect(labelPos * MAG, new Vector2(sp.rect.width, sp.rect.height) * MAG); GUI.Label(labelRect, vecstr, guiStyle); } }
public SplitDictionary GetPhonemesDictionary(PartsObject parts) { //VocalUtau.Program.GlobalPackage string singerGUID = parts.SingerGUID; string folder = SingerFinder.getSingerDir(singerGUID, ProjectBeeper.IntPtr); VocalIndexObject vio = Indexer.getIndex(folder); return(vio.SplitDictionary); }
//サブウインドウのパーツオブジェクト取得 PartsObject GetPartsObject(enPartsType partsType) { if (!partsObjects_.ContainsKey(partsType)) { partsObjects_[partsType] = new PartsObject(partsType); } return(partsObjects_[partsType]); }
public VocalIndexObject GetVocalIndexObject(PartsObject parts) { //VocalUtau.Program.GlobalPackage string singerGUID = parts.SingerGUID; string folder = SingerFinder.getSingerDir(singerGUID, ProjectBeeper.IntPtr); VocalIndexObject vio = Indexer.getIndex(folder); return(vio); }
/// <summary> /// 作成終了 /// </summary> private void OnMakeEnd(List <Vector2> vertices) { if (vertices != null) { //パーツの作成 PartsObject polyObj = database.InstantiateParts(vertices, colorEditField.GetColor()); //無効化 polyObj.Disable(); } }
/// <summary> /// パーツの削除 /// </summary> public void DeleteParts(PartsObject partsObj) { if (partsObjs.Remove(partsObj)) { //コールバック onDeleteParts.Invoke(partsObj); //削除 Destroy(partsObj.gameObject); } }
/// <summary> /// 全てのパーツを有効化する /// </summary> public void EnableParts(PartsObject ignore = null) { for (int i = 0; i < partsObjs.Count; ++i) { if (ignore != partsObjs[i]) { partsObjs[i].Enable(); } } }
public void LoadParts(ref PartsObject parts) { OAC.ReAlloc(parts); Controller.AllocView(OAC.IntPtr); ctl_Scroll_LeftPos.Maximum = (int)parts.TickLength; ctl_Scroll_LeftPos.Value = 0; ctl_Scroll_LeftPos_Scroll(null, null); this.Text = parts.PartName; AttributeWindow.LoadPartsPtr(ref parts); setupSingerIcon(); }
/// <summary> /// パーツの初期化 /// </summary> private void InitializeParts(PartsObject partsObj) { //親の設定 partsObj.transform.SetParent(transform); //追加 partsObjs.Add(partsObj); //コールバックの設定 partsObj.onDown.AddListener(OnPartsDown); partsObj.onUp.AddListener(OnPartsUp); partsObj.onClick.AddListener(OnPartsClick); }
public void UpdateOutboundsLyric_Aysnc(AsyncWorkCallbackHandler CallBack, ref PartsObject parts, int NoteStartIndex = 0, int NoteEndIndex = -1) { PartsObject tParts = parts; System.Threading.Tasks.Task.Factory.StartNew(() => { UpdateLyrics(ref tParts, NoteStartIndex, NoteEndIndex); if (CallBack != null) { CallBack(tParts, NoteStartIndex, NoteEndIndex); } }); }
public void LoadPartsPtr(ref PartsObject PartsObj, bool isCurrentEditing = true) { PartsBinder.ReAlloc(PartsObj); PartAttributes pa = new PartAttributes(PartsBinder.IntPtr, ProjectBinder.IntPtr); pa.setIsCurrent(isCurrentEditing); pa.setSingerDataFinder(SingerDataFinder); this.PropertyViewer.Tag = pa; this.PropertyViewer.SelectedObject = this.PropertyViewer.Tag; }
private void parser() { for (int i = 0; i < jsnData.itens.Length; i++) { partsObject = (PartsObject)ScriptableObject.CreateInstance(typeof(PartsObject)); var clone = Instantiate(partsObject); partsObject.partName = jsnData.itens[i].partName; partsObject.partType = jsnData.itens[i].settings[0].partType; partsObject.typeMovement = jsnData.itens[i].settings[0].typeMovement; partsArray.parts.Add(partsObject); } }
public string GetSingerFolder(PartsObject parts) { //VocalUtau.Program.GlobalPackage string singerGUID = parts.SingerGUID; string folder = SingerFinder.getSingerDir(singerGUID, ProjectBeeper.IntPtr); if (System.IO.Directory.Exists(folder)) { return(folder); } else { return(""); } }
/// <summary> /// パーツの生成 /// </summary> public PartsObject InstantiateParts(List <Vector2> vertices, Color color) { //生成と頂点の設定 PartsObject partsObj = Instantiate <PartsObject>(prefab); partsObj.SetVertices(vertices, color); //初期化 InitializeParts(partsObj); //コールバック onInstantiateParts.Invoke(partsObj); return(partsObj); }
public void UpdateLyrics(ref PartsObject parts, int StartNoteIndex, int EndNoteIndex) { if (EndNoteIndex < 0) { EndNoteIndex = parts.NoteList.Count - 1; } if (StartNoteIndex < 0) { StartNoteIndex = 0; } if (EndNoteIndex > parts.NoteList.Count - 1) { EndNoteIndex = parts.NoteList.Count - 1; } if (StartNoteIndex == EndNoteIndex) { UpdateLyrics(ref parts, StartNoteIndex); return; } Dictionary <int, NoteObject> NoteMap = new Dictionary <int, NoteObject>(); NoteMap.Add(StartNoteIndex - 2, StartNoteIndex - 2 >= 0 ? parts.NoteList[StartNoteIndex - 2] : null); NoteMap.Add(StartNoteIndex - 1, StartNoteIndex - 1 >= 0 ? parts.NoteList[StartNoteIndex - 1] : null); NoteMap.Add(EndNoteIndex + 2, EndNoteIndex + 2 < parts.NoteList.Count ? parts.NoteList[EndNoteIndex + 2] : null); NoteMap.Add(EndNoteIndex + 1, EndNoteIndex + 1 < parts.NoteList.Count ? parts.NoteList[EndNoteIndex + 1] : null); int cnt = 0; for (int i = StartNoteIndex; i <= EndNoteIndex; i++) { if (!NoteMap.ContainsKey(i)) { if (i < parts.NoteList.Count) { NoteMap.Add(i, parts.NoteList[i]); cnt++; } } } double Tempo = parts.Tempo; bool useLyricSplitDic = parts.UseLyricDicitonary; Parallel.For(StartNoteIndex, EndNoteIndex, (i) => { // (int i = StartNoteIndex; i < EndNoteIndex; i++) //{ SetupCurrentPhonmem(NoteMap[i - 1], NoteMap[i], NoteMap[i + 1], Tempo, useLyricSplitDic); //} }); }
public void LoadNotesPtr(ref PartsObject PartsObj, ref NoteObject CurrentNote) { PartsBinder.ReAlloc(PartsObj); NoteBinder.ReAlloc(CurrentNote); NoteAttributes NA = new NoteAttributes(PartsBinder.IntPtr, NoteBinder.IntPtr, ProjectBinder.IntPtr); NA.setSingerDataFinder(SingerDataFinder); NA.PhonemesChanged += NA_PhonemesChanged; this.PropertyViewer.Tag = NA; this.PropertyViewer.SelectedObject = this.PropertyViewer.Tag; }
public static PartsObject UST2Parts(USTOriginalProject ust) { PartsObject po = new PartsObject(ust.ProjectName); po.Tempo = ust.Tempo; long TotalTick = 0; // po.TickLength = 0; po.PartResampler = ust.Tool2; po.Flags = ust.Flags; for (int i = 0; i < ust.Notes.Count; i++) { long stt = TotalTick; long len = ust.Notes[i].Length; if (ust.Notes[i].Lyric != "R") { NoteObject no = new NoteObject(stt, len, ust.Notes[i].NoteNum); no.Lyric = ust.Notes[i].Lyric; no.PhonemeAtoms[0].Flags = ust.Notes[i].Flags; no.PhonemeAtoms[0].Intensity = FormatNan(ust.Notes[i].Intensity); no.PhonemeAtoms[0].Modulation = FormatNan(ust.Notes[i].Modulation); no.PhonemeAtoms[0].Overlap = FormatNan(ust.Notes[i].Overlap); no.PhonemeAtoms[0].PreUtterance = FormatNan(ust.Notes[i].PreUtterance); no.PhonemeAtoms[0].StartPoint = FormatNan(ust.Notes[i].StartPoint); no.PhonemeAtoms[0].Velocity = FormatNan(ust.Notes[i].Velocity); List <KeyValuePair <double, double> > env = ust.Notes[i].EnvelopAnalyse(); try { no.PhonemeAtoms[0].FadeInLengthMs = (long)(env[1].Key); //P2 no.PhonemeAtoms[0].FadeOutLengthMs = (long)(env[2].Key); //P3 no.PhonemeAtoms[0].VolumePercentInt = (long)((env[1].Value + env[2].Value) / 2); //V2+V3/2 } catch {; } po.NoteList.Add(no); TotalTick += ust.Notes[i].Length;// -ust.Notes[i].Overlap; } else { TotalTick += len; } } //po.TickLength = TotalTick; po.PitchCompiler.InitPitchBase(); return(po); }
public override void Enter() { base.Enter(); //選択ポリゴンの取得 select = selectParts.Select; select.Disable(); //編集する頂点の設定 adjuster.SetVertices(select.GetVertices(), true); //状態遷移 polyLine.ActivateState(LINE_COM); //コールバック設定 adjuster.onEndAdjust.AddListener(OnAdjustEnd); adjuster.onChangeVertex.AddListener(OnVertexChanged); }
///<summary>各パーツのギズモ描画</summary> void DrawPartsGizmoPoint(enPartsType partsType) { PartsObject partsObject = GetPartsObject(partsType); Vector2 pos = partsObject.pos; pos.y = -pos.y; //上下反転 Sprite sp = parent_.GetSprite(partsType, sendMotion_.stPassive.isBack, sendMotion_.stPassive.faceNo); if (sp != null) { Vector2 basepos = new Vector2(-sp.pivot.x, +sp.pivot.y - sp.rect.height); Vector2 size = new Vector2(sp.rect.width, sp.rect.height); int MAG = mag_; Vector2 drawPos = (basepos + camPos_ + pos + tempMovePos_); Rect drawRect = new Rect(drawPos * MAG, size * MAG); Handles.color = new Color(1, 1, 1); switch (partsType) { case enPartsType.LeftArm: case enPartsType.LeftHand: case enPartsType.LeftLeg: case enPartsType.LeftFoot: Handles.color = new Color(0, 1, 1); break; case enPartsType.RightArm: case enPartsType.RightHand: case enPartsType.RightLeg: case enPartsType.RightFoot: Handles.color = new Color(1, 0, 1); break; } var rectPos = drawPos; rectPos.x += sp.rect.width / 2; rectPos.y += sp.rect.height / 2; Handles.DrawRectangle((int)partsType, rectPos * MAG, Quaternion.identity, GIZMO_SIZE * MAG); // Handles.DrawLine(drawPos * MAG, drawPos * MAG * 2); } }
public void LoadParts(ref PartsObject parts, bool KeepSelecting = false) { OAC.ReAlloc(parts); Controller.AllocView(OAC.IntPtr); ctl_Scroll_LeftPos.Maximum = (int)parts.TickLength; ctl_Scroll_LeftPos.Value = 0; ctl_Scroll_LeftPos_Scroll(null, null); this.Text = parts.PartName; AttributeWindow.LoadPartsPtr(ref parts); if (KeepSelecting) { Controller.RealaramNoteSelecting(); } else { Controller.Track_NoteView.ClearSelect(); } setupSingerIcon(); }
public void NoteDelete() { if (NoteSelectIndexs.Count > 0) { if (NoteActionBegin != null) { NoteActionBegin(NoteDragingType.NoteDelete); } NoteSelectIndexs.Sort(); int First = NoteSelectIndexs[0]; int Last = NoteSelectIndexs[NoteSelectIndexs.Count - 1]; for (int i = Last; i >= First; i--) { NoteList.RemoveAt(i); } int Sp = First - 1; int Se = First; if (Sp < 0) { Sp = 0; } ClearSelect(); PartsObject.PitchCompiler.SetupBasePitch_Aysnc(new Formats.Model.VocalObject.ParamTranslater.PitchCompiler.AsyncWorkCallbackHandler((F, L) => { this.PianoWindow.Invoke(new Action(() => { this.PianoWindow.RedrawPiano(); })); }), Sp, Se); if (this.SingerDataFinder != null) { PartsObject po = PartsObject; int Lp = Se; if (Sp > 0) { Lp = Sp; } this.SingerDataFinder.GetPhonemesDictionary(PartsObject).UpdateLyrics_Aysnc(new Formats.Model.Database.VocalDatabase.SplitDictionary.AsyncWorkCallbackHandler((P, F, L) => { }), ref po, Lp, Lp);; } if (NoteActionEnd != null) { NoteActionEnd(NoteDragingType.NoteDelete); } } }
internal static void AddItem(int key, PartsObject data) { PartList.Add(key, data); ListUpdate(String.Empty, new EventArgs()); }