private RenderNote[] BuildRenderNotes(Ust ust, Singer singer) { var renderNotes = new List <RenderNote>(); for (int i = 0; i < ust.Notes.Length; i++) { var renderNote = RenderNote.CreateFromNote(ust.Notes[i]); renderNote.Oto = singer.FindOto(renderNote) ?? Oto.CreateDefault(); renderNotes.Add(renderNote); } for (int i = 0; i < renderNotes.Count; i++) { var note = renderNotes[i]; var next = renderNotes.ElementAtOrDefault(i + 1); note.Envelope = new Envelope(note, next); } var pitchController = new PitchController(ust.Tempo); for (int i = 0; i < renderNotes.Count; i++) { var prev = renderNotes.ElementAtOrDefault(i - 1); var curr = renderNotes.ElementAtOrDefault(i); var next = renderNotes.ElementAtOrDefault(i + 1); pitchController.BuildPitchData(curr, prev, next); } return(renderNotes.ToArray()); }