void Run(object sender, DoWorkEventArgs e) { Bass.BASS_ChannelSetAttribute(stream, BASSAttribute.BASS_ATTRIB_TEMPO, tempo); while (!(sender as BackgroundWorker).CancellationPending && position < text.Length) { SpeechPart part = GetPart(); if (part != null) { PlayPart(part); position += part.Part.Length; } else { position++; } } }
void PlayPart(SpeechPart part) { int duration = part.Duration * 100 / (100 + tempo); if (part.Start >= 0) { double start = part.Start / 1000.0; Bass.BASS_ChannelSetPosition(stream, start); Bass.BASS_ChannelPlay(stream, false); Thread.Sleep(duration); Bass.BASS_ChannelStop(stream); } else { Thread.Sleep(duration); } }