Пример #1
0
        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
                       ));
        }
Пример #2
0
 public override AnalyzedAudio Copy()
 {
     return(new WorldAnalyzedAudio(F0.BlockClone(), FramePeriod, SampleRate, SampleCount, BeginFrame, Elements));
 }