Do you need this block?
[pascal]if (j < Samples[i].SampleLength div 2 - 1) then[/pascal]
It isn't needed in my opinion and actually should make buffers reading samples partially overlapped.

Other than that, what happens before the big loop? It's also important to know how pointers are tied to or which are direct parameters.