The "Simple" example doesn't address looping and dsps with a "resampling" stream, that is a stream created with BASS_FX_TempoCreate.
Looping, setting DSPs, getting and setting the current position etc is simple when using only one stream, but gets a little complicated when you add the resampling stream. I'm not exactly sure which stream to use when I apply DSPs, get and set positions, and loop so that what you hear stays in sync with what you see (the waveform display), and the looping is accurate and precise.
stream1 = Bass.BASS_StreamCreateFile(
filename, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_STREAM_PRESCAN);
stream2 = BassFx.BASS_FX_TempoCreate(
stream1, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
Assume loopStart and loopEnd have been set to some position:
hLoopSync = Bass.BASS_ChannelSetSync(
stream?

, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, LoopEnd, loopSyncProc, IntPtr.Zero);
In the loop sync proc:
Bass.BASS_ChannelSetPosition(stream???, loopStart, BASSMode.BASS_POS_BYTES);
Using the WaveForm:
waveform.SyncPlayback(stream???)
long pos = Bass.BASS_ChannelGetPosition(stream???);
long len = Bass.BASS_ChannelGetLength(stream???);
DrawWavePosition(pos, len);
Thanks