using NAudio.Wave; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Resources; using System.Text; using System.Threading.Tasks; using CDSAE3_Lian_Lian_Kan.Properties; using NAudio.Wave.SampleProviders; namespace CDSAE3_Lian_Lian_Kan.Sound { public class Song_Audio_processer:IDisposable { AudioPlayer? audioPlayer; private List audioFiles = new List(); int next_song = 1; private void OnPlaybackStopped(string s,object? obj) { set_song(get_next_song()); } public void pause_song()=> audioPlayer?.pause_song(); public void resume_song()=> audioPlayer?.resume_song(); public string get_next_song() { string name = audioFiles[next_song]; next_song++; next_song %= audioFiles.Count; return name; } /// /// 调整音乐音量 /// /// 音量大小 1-100 public void volume_change(int val)=> audioPlayer?.volume_change(val); public void set_albums(string s) { var result = Etcs.musics.Where(x => x.Key == s).ToList(); if (result.Count == 0) throw new Exception("no such album"); audioFiles = result.First().Value; } public void set_song(string s) { audioPlayer?.Dispose(); try { audioPlayer = new AudioPlayer(s, Etcs.Song_Volume, OnPlaybackStopped); } catch (Exception e) { MessageBox.Show($"failed to play {s}\n{e.Message}"); return; } audioPlayer.resume_song(); } public void Dispose() { audioPlayer?.Dispose(); GC.SuppressFinalize(this); } ~Song_Audio_processer() => Dispose(); } }