private void _copyFrom(EOSoundManager other) { //shallow copy is intended m_sounds = other.m_sounds; m_guitarSounds = other.m_guitarSounds; m_harpSounds = other.m_harpSounds; m_music = other.m_music; }
public EOSoundManager() { lock (_construction_locker_) { if (inst != null) { _copyFrom(inst); return; } string[] soundFiles = Directory.GetFiles(SFX_DIR, "*.wav"); Array.Sort(soundFiles); string[] musicFiles = Directory.GetFiles(MFX_DIR, "*.mid"); Array.Sort(musicFiles); m_sounds = new List<SoundInfo>(81); m_guitarSounds = new List<SoundInfo>(36); m_harpSounds = new List<SoundInfo>(36); m_music = new List<Uri>(musicFiles.Length); foreach (string sfx in soundFiles) { _correctTheFileLength(sfx); using (FileStream fs = new FileStream(sfx, FileMode.Open, FileAccess.Read, FileShare.Read)) { //Note: this MAY throw InvalidOperationException if the file is invalid. However, _correctTheFileLength fixes // this for the original sfx files. SoundEffect nextEffect = SoundEffect.FromStream(fs); if (sfx.ToLower().Contains("gui")) m_guitarSounds.Add(nextEffect == null ? null : new SoundInfo(nextEffect)); else if (sfx.ToLower().Contains("har")) m_harpSounds.Add(nextEffect == null ? null : new SoundInfo(nextEffect)); else m_sounds.Add(nextEffect == null ? null : new SoundInfo(nextEffect)); } } m_songPlayer = new System.Windows.Media.MediaPlayer(); m_dispatcher = Dispatcher.CurrentDispatcher; m_songPlayer.MediaEnded += (o, e) => m_songPlayer.Position = new TimeSpan(0); foreach (string mfx in musicFiles) m_music.Add(new Uri(mfx, UriKind.Relative)); inst = this; } }