Ok so I've got everything set up properly now (I think).
This conditional:
while (Bass.BASS_ChannelIsActive(streamFX) == BASSActive.BASS_ACTIVE_PLAYING)
evaluates false at the initial iteration. My code prior to your sample is as follows:
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
int stream = Bass.BASS_StreamCreateFile(track.location, 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
int streamFX = BassFx.BASS_FX_TempoCreate(stream, BASSFlag.BASS_FX_FREESOURCE);
Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO, 0.2f);
I'm assuming that I need to do something to make the channel "play" or make it active so the conditional while returns true, but there's a lot I don't understand here.
If the code you supplied iterates through the channel and writes data to file, then I'm guessing that
Bass.BASS_ChannelGetData()
advances the current position in stream, which causes the encoder to write stuff? Is that at all correct?