public void DisposeAndCleanUp()
{
// Clean up BASS Resources
try
{
// Some Winamp dsps might raise an exception when closing
BassWaDsp.BASS_WADSP_Free();
}
catch (Exception) { }
if (Config.MusicPlayer == AudioPlayer.Asio)
{
BassAsio.BASS_ASIO_Stop();
BassAsio.BASS_ASIO_Free();
}
if (Config.MusicPlayer == AudioPlayer.WasApi)
{
BassWasapi.BASS_WASAPI_Free();
}
if (_mixer != null)
{
_mixer.Dispose();
}
for (int i = 0; i < _streams.Count; i++)
{
if (_streams[i] != null)
{
_streams[i].Dispose();
}
}
Bass.BASS_Stop();
Bass.BASS_Free();
_bassFreed = true;
foreach (int pluginHandle in DecoderPluginHandles)
{
Bass.BASS_PluginFree(pluginHandle);
}
lock (_commandQueueSync)
{
_commandQueue.Clear();
QueueItem item = new QueueItem();
item.cmd = PlaybackCommand.ExitThread;
_commandQueue.Add(item);
}
_commandNotify.Set();
GUIGraphicsContext.OnNewAction -= new OnActionHandler(OnNewAction);
}