public override AnalyzedAudio Slice(int begin, int count) { if (count < 1) { throw new ArgumentException(nameof(count)); } if (begin < 0 || begin + count >= FrameLength) { throw new ArgumentOutOfRangeException(); } var list = Elements.ToList(); var end = begin + count; var beginElementIndex = Math.Max(list.FindIndex((e) => e.FramePosition > begin) - 1, 0); var elementCount = list.FindLastIndex((e) => e.FramePosition + e.F0.Length > end) + 1; var newElements = Elements.Skip(beginElementIndex).Take(elementCount).ToArray(); return(new WorldAnalyzedAudio( F0.BlockClone(begin, count), FramePeriod, SampleRate, (int)Math.Ceiling((newElements.Last().FramePosition + newElements.Last().F0.Length) * FrameSize) - (int)Math.Ceiling(newElements[0].FramePosition * FrameSize), begin, newElements )); }
public override AnalyzedAudio Copy() { return(new WorldAnalyzedAudio(F0.BlockClone(), FramePeriod, SampleRate, SampleCount, BeginFrame, Elements)); }