One PCM Sample does NOT equal one FFT Bin/Value, so you cannot get the "same" amount of Samples, you also Request FFT in a fixed Size like 1024,2048 etc.
If you want to not "loose" Data and Process after receiving samples from the Microphone, you can try to look at the following Quotes from the Code which was created when I was facing a simular situation with the Help of Ian from Bass Forums.
It has one Push Stream where data gets pushed to from the Recording Callback.
int fftneed = fft_size * chans * 2;
private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
int got = Bass.BASS_StreamPutData(fftstream, buffer, length); // feed the recorded data to the push stream
while (got >= fftneed)
// got enough data to process
float fft = new float[fft_size / 2];
Bass.BASS_ChannelGetData(fftstream, fft, fft_size_const);
// process the FFT data here
got -= fftneed;
int fftstream = Bass.BASS_StreamCreate(_sampleRate, chans, BASSFlag.BASS_STREAM_DECODE, BASSStreamProc.STREAMPROC_PUSH); // create a push stream with same format as recording