Quoting the BASS.DLL documentation:
BASS_CONFIG_BUFFER config option
The playback buffer length for HSTREAM and HMUSIC channels.
BASS_SetConfig(
BASS_CONFIG_BUFFER,
DWORD length
);
Parameters
length The buffer length in milliseconds. The minimum length is 1ms above the update period (BASS_CONFIG_UPDATEPERIOD), the maximum is 5000 milliseconds. If the length specified is outside this range, it is automatically capped.
Remarks
The default buffer length is 500 milliseconds. Increasing the length, decreases the chance of the sound possibly breaking-up on slower computers, but also increases the latency for DSP/FX.
Small buffer lengths are only required if the sound is going to be changing in real-time, for example, in a soft-synth. If you need to use a small buffer, then the minbuf member of BASS_INFO should be used to get the recommended minimum buffer length supported by the device and its drivers. Even at this default length, it’s still possible that the sound could break up on some systems, it’s also possible that smaller buffers may be fine. So when using small buffers, you should have an option in your software for the user to finetune the length used, for optimal performance.
Using this config option only affects the HMUSIC/HSTREAM channels that are created afterwards, not any that have already been created. So you can have channels with differing buffer lengths by using this config option each time before creating them.
If automatic updating is disabled, make sure you call BASS_Update frequently enough to keep the buffers updated.
The update period of HSTREAM and HMUSIC channel playback buffers.
BASS_SetConfig(
BASS_CONFIG_UPDATEPERIOD,
DWORD period
);
Parameters
period The update period in milliseconds… 0 = disable automatic updating. The minimum period is 5ms, the maximum is 100ms. If the period specified is outside this range, it is automatically capped.
Remarks
The update period is the amount of time between updates of the playback buffers of HSTREAM/HMUSIC channels. Shorter update periods allow smaller buffers to be set with the BASS_CONFIG_BUFFER config option, but as the rate of updates increases, so the overhead of setting up the updates becomes a greater part of the CPU usage. The update period only affects HSTREAM and HMUSIC channels; it does not affect samples. Nor does it have any effect on decoding channels, as they are not played.
BASS creates one or more threads (determined by BASS_CONFIG_UPDATETHREADS) specifically to perform the updating, except when automatic updating is disabled (period = 0), in which case BASS_Update or BASS_ChannelUpdate should be used instead. This allows BASS’s CPU usage to be synchronized with your software’s. For example, in a game loop you could call BASS_Update once per frame, to keep all the processing in sync so that the frame rate is as smooth as possible.
The update period can be altered at any time, including during playback. The default period is 100ms.
BASS_SAMPLE_SOFTWARE Force the stream to not use hardware mixing.
BASS_SAMPLE_FLOAT Use 32-bit floating-point sample data. See Floating-point channels for info.
Floating-point channels
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. Note that to use DX8 effects (BASS_ChannelSetFX) with floating-point channels requires DirectX 9 or above. BASS_GetInfo can be used to check the DirectX version in use.
The floating-point sample data values range from -1 to +1. Though as mentioned above, it’s not clipped to this range until output, so it’s very possible that DSPPROC callback functions or BASS_ChannelGetData calls could receive data beyond this range.
When a floating-point channel is played, it is output in whatever resolution the output device supports.
Floating-point channels are not supported when using VxD drivers, except for “decoding channels”. For reference… Windows XP/2000 use only WDM drivers. Windows Me/98SE can use either WDM or the older VxD driver model. Windows 98/95 only use VxD drivers.
Windows Vista audio is natively floating-point, so for optimum performance (not to mention quality), channels should also be floating-point. This particularly applies to formats that are decoded in floating-point anyway, ie. lossy formats like MP3 and OGG.