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);
    }