Channels can be made to use 32-bit floating-point sample data. When a channel uses floating-point sample data, BASS takes full advantage of the extra resolution when generating the decoded sample data; it does not simply convert 16-bit data to floating-point.
The main advantage of floating-point channels, aside from the increased resolution/quality, is that they are not clipped until output. This makes them particularly good for DSP/FX, because the quality is not degraded as the data passes through a chain of DSP/FX. So even if the output device is not capable of outputting the channel in its full quality, the quality is still improved.
Floating-point sample data ranges from -1 to +1, but as mentioned above, it is not clipped to this range until output, so it is possible that DSPPROC callback functions or BASS_ChannelGetData calls could receive data outside of this range.
When a floating-point channel is played, it is converted to whatever resolution the output device supports in the final mix.
DWORD floatable; // floating-point channel support? 0 = no, else yes ... if (BASS_GetConfig(BASS_CONFIG_FLOAT)) { floatable = BASS_StreamCreate(44100, 1, BASS_SAMPLE_FLOAT, NULL, NULL); // try creating a floating-point stream if (floatable) BASS_StreamFree(floatable); // floating-point channels are supported (free the test stream) } else floatable = 0;