Oh my mistake, didn't notice these:

AudioBuffer_16bit_Signed := @Samples[i].SampleData;
AudioBuffer_16bit_Unsigned := @Samples[i].SampleData;

So ignore my comment about overlapping, but instead noticed a new thing.

So Samples[i].SampleData is pointer already. In that case @Samples[i].SampleData means pointer to pointer... Try instead
[pascal]AudioBuffer_16bit_Signed := Samples[i].SampleData;
AudioBuffer_16bit_Unsigned := Samples[i].SampleData;

or

AudioBuffer_16bit_Signed := @Samples[i].SampleData^;
AudioBuffer_16bit_Unsigned := @Samples[i].SampleData^;[/pascal]