Я правильно указал:
IntPtr buffer
Буфер - указатель на массив из 2 указателей на массивы с соответствующими данными.
Проблема в том, что я получаю неточные данные, например, если что-то отсутствует в извлеченных данных (например, отсутствует выборка из потока аудиоданных).
// length is parameter
IntPtr[] temp = new IntPtr[2];
Marshal.Copy(buffer, temp, 0, 2);
bufferedData = new byte[bufferSize];
byte[] a = new byte[length];
byte[] b = new byte[length];
Marshal.Copy(temp[0], a, 0, length);
Marshal.Copy(temp[1], b, 0, length);
edit: извините, я забыл написать эти 2 строки:)