public PhonemeBuffer(float bufferLength, int numberOfBuffers) { this.phonemeBuffers = new List <InternalBuffer>(numberOfBuffers); //Create buffers; for (int i = 0; i < numberOfBuffers; i++) { InternalBuffer buffer = new InternalBuffer(bufferLength, 4); phonemeBuffers.Add(buffer); } //First buffer added get lowest possible starttime. Then we work ourself up to 0 from there. int timeScale = -numberOfBuffers; //Create cyclic buffer pointers. for (int i = 0; i < numberOfBuffers; i++) { InternalBuffer buffer = phonemeBuffers[i]; //loop back to first index when at the end. buffer.SetNextBuffer(phonemeBuffers[i < numberOfBuffers - 1 ? i + 1 : 0]); //The time at which this buffer will start. float startTime = timeScale * bufferLength; //All buffers are filled with silent phonemes. buffer.SetDefaultValues(startTime, bufferLength, 4); //Make sure all buffers have different default times stretching back. timeScale += 1; } //Clear this index since its going to be our frontbuffer. this.phonemeBuffers[0].Clear(); this.currentBuffer = this.phonemeBuffers[0]; //This buffer will eat all incoming phonemes even when it gets full. this.completeBuffer = new InternalBuffer(bufferLength, 100); }