I kept getting AccessViolationException with IntPtr, also I'm not familiar with pointers and unsafe stuff in c#, so I don't know how performant or if it's proper way to do it but here is the final code that gives the array I need.
Thanks all of you again for all the information and support =)
var handle = Bass.BASS_StreamCreateFile(filename, 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
if (handle != 0) {
var length = (int)Bass.BASS_ChannelGetLength(handle, BASSMode.BASS_POS_BYTE);
var data = new List<float>();
int read = 0;
while (read < length) {
var bytesLeft = Math.Min(length - read, 134217728);
var buffer = new float[bytesLeft / 4];
var got = Bass.BASS_ChannelGetData(handle, buffer, bytesLeft);
data.AddRange(buffer);
if (got <= 0)
break;
read += got;
}
Bass.BASS_StreamFree(handle);
return data.ToArray();
}