//Event, cleanup for playback static void PlayBackStopped(object sender, StoppedEventArgs e) { WaveOutModEvent wo = (WaveOutModEvent)sender; if (wo.Stoppable) { TimeSpan ts = new TimeSpan(0, 0, 0); float volume = Config.CurrentConfig.CurrentVolume / 10.0f; for (int i = 0; i < stoppablePlayers.Length; i++) { if (stoppablePlayers[i] == wo) { if (Config.CurrentConfig.InputMode == SoundMode.Loop) { stoppableReaders[i].CurrentTime = ts; stoppablePlayers[i].Volume = volume; stoppablePlayers[i].Play(); } else { DisposeSound(i); } break; } } } else { int index = players.FindIndex(a => a == wo); if (index != -1) { DisposeSound(index); } } }
private static void StackSound(int number) { if (SoundProfile.CurrentSoundProfile.Sounds[number] == null) { return; } string fi = SoundProfile.SoundDirectory + SoundProfile.CurrentSoundProfile.Sounds[number]; //gets location+filename of sound from config determined by numpad number WaveOutModEvent wo = new WaveOutModEvent(); wo.DeviceNumber = Config.CurrentConfig.CurrentOutputDevice; wo.PlaybackStopped += new EventHandler <StoppedEventArgs>(PlayBackStopped); //To cleanup resources when done string ext = fi.Substring(fi.LastIndexOf(".")).ToLower(); if (ext == ".mp3" || ext == ".wav") { WaveFileReader reader; try { reader = new WaveFileReader(fi); } catch (Exception e) { MessageBox.Show(e.Message); return; } try { wo.Init(reader); } catch (MmException e) { MessageBox.Show("Error!\n" + e.Message + "\n\nCan't play audio:\nSelected audio device is already in use!"); return; } wo.Volume = Config.CurrentConfig.CurrentVolume / 10.0f; wo.Play(); if (Config.CurrentConfig.SoundPlaybackEnabled) { PlaySoundToDefaultOutput(number, fi); } AddResourcesToPool(number, reader, wo, false); } }
public static void PlaySoundToDefaultOutput(int number, string fi) { WaveOutModEvent listenWo = new WaveOutModEvent(); listenWo.DeviceNumber = -1; listenWo.PlaybackStopped += new EventHandler <StoppedEventArgs>(PlayBackStopped); listenWo.Volume = Config.CurrentConfig.CurrentVolume / 10.0f; WaveFileReader reader = new WaveFileReader(fi); AddResourcesToPool(number, reader, listenWo, true); listenWo.Init(reader); listenWo.Play(); }
private static void AddResourcesToPool(int number, WaveFileReader reader, WaveOutModEvent player, bool isPlayback) { if (Config.CurrentConfig.InputMode == SoundMode.StartStop || Config.CurrentConfig.InputMode == SoundMode.Loop) { player.SoundNumber = number; player.Stoppable = true; stoppableState[number] = SoundState.Started; if (isPlayback) { number += Config.CurrentConfig.MaxSounds; } stoppablePlayers[number] = player; stoppableReaders[number] = reader; } else { player.SoundNumber = number; readers.Add(reader); players.Add(player);//To find the resources again } }