Just define your SYNCPROC like they do in the Documentation:
private SYNCPROC _mySync;
...
_mySync = new SYNCPROC(EndSync);
Bass.BASS_ChannelSetSync(_stream, BASSSync.BASS_SYNC_END | BASSSync.BASS_SYNC_MIXTIME,
0, _mySync, IntPtr.Zero);
...
private void EndSync(int handle, int channel, int data, IntPtr user)
{
// the 'channel' has ended - jump to the beginning
Bass.BASS_ChannelSetPosition(channel, 0L);
}
So the _mySync is the global variable in this example.
What Problem are you facing that makes you think its a Garbage Collection Problem?