При обычной нелинейной,например,циклической записи каждый айтем или тейк(в зависимости от режима) в цикле отличается только тем,что Start in source и Length точки имеет разные значения для каждого цикла.
Исходный файл ОДИН и содержит в себе полную запись без остановки.Это видно на рисунке,если растянуть края-получается полный файл в каждом из записанных в цикле айтемов.
Чтобы получить такой же результат при записи в буферы,нужно последовательно заполняя буферы,запоминать в JS все точки смены позиций.Потом,при запуске скрипта нужно сначала разложить буферы последовательно и собрать в один файл.
Дальше разложить по тейкам этот файл и установить по сохраненным точкам Start in source и Length.И дело в шляпе,результат будет абсолютно идентичным обычной записи.
Но это делает невозможным собрать все буферы в тейки при произвольной смене позиции!
В айтемы приблизительно можно(но это неудобно для дальнейшего использования)-в тейки нельзя,поскольку при смене Start in source и Length вылазят ненужные части аудио-файла.
Возможно,это одна из причин,почему обычная запись не позволяет произвольно менять позицию проигрывания.
При произвольной записи недостаточно смены точек Start in source и Length,нужно,чтобы сам исходный файл имел реальные края.
Было бы проще всего скопировать принцип обычной записи,но так как у нас аудио-данные все-равно пишутся в буфер JS,а буфер JS позволяет извлекать их с любым смещением и любой длиной указанной в семплах,грубо говоря,то грех отказываться от дополнительной возможности записывать все что угодно,свободно перемещаясь по проекту.
====================================
Короче,общий принцип такой.
По мере проигрывания Аудио-данные записываются в буфер.
При каждой смене позиции предыдущая и текущая позиции проигрывания тоже записываются в буфер(в верхнюю область),в дальнейшем эти точки используются для правильной расстановки сегментов буфера.
Когда буфер текущего JS заполняется до определенного значения(maxmem-8192*2),он пропускает сигнал на следующий,а сам дополнительно дописывает еще 8192*2 семплов,это пригодится в дальнейшем.
И далее по цепочке:JS1>JS2>JS3 и т.д.
В принципе кол-во JS не ограничено(ограничено только доступной RAM),потому общий буфер может быть любой длины.
=====
При запуске скрипта аудио из буферов каждого JS выкладывается по сегментам уже со строго определенными параметрами,которые скрипт считывает из самого JS,то есть,в определенную позицию проекта,с четко указанным смещением и с указанной длиной.
Смещение используется и для компенсации задержки,и здесь как раз понадобится тот резервный кусочек в 8192*2 семплов,из которого можно взять нужное кол-во сэмплов,чтоб не возникало разрывов.
Потом айтемы переименовываются,распределяются по тейкам и т.д,но это уже не интересно.