I'm not sure whether increasing the minimum file reading length will help, eg. larger reads could mean larger delays. I think the answer is to have a parallel buffering system like when using BASS output, eg. your own "update thread". For example, you could have a thread that gets data from the mixer and passes it to a "push" stream, and have the ASIOPROC get the data from there. It could look something like this (in C/C++)...
bufstream=BASS_StreamCreate(freq, chans, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE, STREAMPROC_PUSH, 0); // create a push stream with same format as the mixer
bufbytes=BASS_ChannelSeconds2Bytes(bufstream, buftime); // the amount of data wanted in the buffer
...
DWORD CALLBACK AsioProc(BOOL input, DWORD channel, void *buffer, DWORD length, void *user)
{
DWORD c=BASS_ChannelGetData(bufstream, buffer, length); // get data from the buffer stream
if (c==-1) c=0; // an error, no data
return c;
}
...
// in the buffering thread
void *data=malloc(bufbytes); // allocate intermediate buffer
while (!quit) {
DWORD c=BASS_StreamPutData(bufstream, 0, 0); // check how much data is currently buffered
if (bufbytes>c) { // less than wanted
c=BASS_ChannelGetData(mixer, data, bufbytes-c); // get data from the mixer
if (c==-1) break; // error, quit
BASS_StreamPutData(bufstream, data, c); // pass it the buffer stream
}
Sleep(buftime*1000/2); // wait a bit
}
free(data);
I'm not sure whether it'll be possible to create a buffering thread in VB6. If not, you could try using timeSetEvent instead.