void createPlayer(SongEntry entry) { tryStop(); source = new AudioFileReader(entry.Path); SpectrumSampler = new SampleAggregator(source, 512); meter = new BetterMeteringSampleProvider(SpectrumSampler); meter.StreamVolume += Meter_StreamVolume; SpectrumSampler.FftCalculated += ((sender, earg) => { }); SpectrumSampler.PerformFFT = true; output = new WaveOut() { DesiredLatency = 1, NumberOfBuffers = meter.WaveFormat.SampleRate / 256 }; output.Init(meter); output.PlaybackStopped += Output_PlaybackStopped; totalPosition = source.TotalTime; output.Volume = volume / 100f; onPlayPauseChanged?.Invoke(this, EventArgs.Empty); clearSongInfo(entry); onInfoLoaded?.Invoke(null, new SongCallbackEventArgs(entry)); Task getTask = new Task <SongEntry>(() => readAsync(entry)); getTask.Start(); getTask.ContinueWith(t => { onInfoLoaded?.Invoke(null, new SongCallbackEventArgs(entry)); }); onNewSong?.Invoke(null, EventArgs.Empty); }
void tryStop() { try { if (null != output) { output.Dispose(); output = null; } } catch { } try { if (null != meter) { meter = null; } } catch { } try { if (null != source) { source.Dispose(); source = null; } } catch { } }