Beispiel #1
0
        //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);
                }
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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
            }
        }