To get 2 channels to start playing in sync (there may still be a slight gap on Windows), you can link them, something like this...
BASS_ChannelSetLink(chan1, chan2); // link chan2 to chan1
BASS_ChannelPlay(chan1, FALSE); // start them both
To get a channel to start in sync with another one that is already playing, you could try using the BASS_INFO "latency" value (after adding the BASS_DEVICE_LATENCY flag to your BASS_Init call). Something like this...
BASS_INFO info;
BASS_GetInfo(&info);
QWORD pos=BASS_ChannelGetPosition(chan1, BASS_POS_BYTE); // get position of chan1
pos+=BASS_ChannelSeconds2Bytes(chan1, info.latency/1000.0); // add the device latency to it
BASS_ChannelSetPosition(chan2, pos); // set chan2 to that position
BASS_ChannelPlay(chan2, FALSE); // start playing chan2
But note that the BASS_ChannelPlay call will need to decode some data before beginning playback (there needs to be something to play), so that will add some delay to playback starting.
If there is a gap between the position of 2 playing channels and you would like to bring them closer together, that could be done by slightly adjusting the playback rate (BASS_ATTRIB_FREQ) of one of them.