コード例 #1
0
 /// <summary>
 /// Stops audio from a particular keybind
 /// </summary>
 /// <param name="bindToStop">The keybind to stop</param>
 private void StopAudioIfPlaying(KeybindSound bindToStop)
 {
     if (bindToStop.AudioPlayer != null)
     {
         if (bindToStop.AudioPlayer.PlaybackState == PlaybackState.Playing)
         {
             bindToStop.AudioPlayer.Stop();
             bindToStop.AudioReader.Dispose();
             bindToStop.AudioReader = null;
             bindToStop.AudioPlayer.Dispose();
             bindToStop.AudioPlayer = null;
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// When a hotkey is triggered, play its sound
        /// </summary>
        private void Bind_HotkeyTriggered(object sender, EventArgs e)
        {
            //Get the bind that was triggered
            KeybindSound bindTriggered = (KeybindSound)sender;

            if (!config.KeybindSounds.Contains(bindTriggered))
            {
                return;
            }

            System.Diagnostics.Debug.WriteLine("Triggered: " + bindTriggered.PathToSoundFileOn);

            //Change the toggle state and overwrite the config
            bindTriggered.ToggledOn = !bindTriggered.ToggledOn;
            if (selectedKeybind.Equals(bindTriggered))
            {
                radioButtonToggledOn.Checked  = bindTriggered.ToggledOn;
                radioButtonToggledOff.Checked = !bindTriggered.ToggledOn;
            }
            ConfigParser.SaveFile(Useful.pathToConfig, config);

            //Stop playback if already running
            StopAudioIfPlaying(bindTriggered);

            //Create the file reader
            string pathToUse;

            if (bindTriggered.ToggledOn)
            {
                pathToUse = bindTriggered.PathToSoundFileOn;
            }
            else
            {
                pathToUse = bindTriggered.PathToSoundFileOff;
            }

            try
            {
                switch (Path.GetExtension(pathToUse))
                {
                case ".wav":
                    bindTriggered.AudioReader = new WaveFileReader(pathToUse);
                    break;

                case ".mp3":
                    bindTriggered.AudioReader = new Mp3FileReader(pathToUse);
                    break;

                case ".aiff":
                    bindTriggered.AudioReader = new AiffFileReader(pathToUse);
                    break;

                case ".flac":
                    bindTriggered.AudioReader = new FlacReader(pathToUse);
                    break;

                case ".ogg":
                    bindTriggered.AudioReader = new VorbisWaveReader(pathToUse);
                    break;

                default:
                    return;
                }
            }
            catch (Exception)
            {
                return;
            }


            //Create the playback stream
            bindTriggered.AudioPlayer = new WaveOutEvent();
            bindTriggered.AudioPlayer.PlaybackStopped += (o, args) =>
            {
                if (bindTriggered.AudioReader != null)
                {
                    if (bindTriggered.AudioPlayer.PlaybackState == PlaybackState.Stopped)
                    {
                        bindTriggered.AudioReader.Dispose();
                        bindTriggered.AudioReader = null;
                        bindTriggered.AudioPlayer.Dispose();
                        bindTriggered.AudioPlayer = null;
                    }
                }
            };
            bindTriggered.AudioPlayer.Init(bindTriggered.AudioReader);
            bindTriggered.AudioPlayer.Volume = (float)config.Volume / 100.0f;
            bindTriggered.AudioPlayer.Play();

            //Temporarily disable the hotkey and send the keypress again
            bindTriggered.HotKey.Dispose();
            bindTriggered.HotKey = null;

            InputSimulator sim = new InputSimulator();

            List <VirtualKeyCode> modifiers = new List <VirtualKeyCode>();

            //Check for ctrl
            if ((bindTriggered.KeyModifier & 1) != 0)
            {
                modifiers.Add(VirtualKeyCode.CONTROL);
            }
            //Check for alt
            if ((bindTriggered.KeyModifier & 2) != 0)
            {
                modifiers.Add(VirtualKeyCode.MENU);
            }
            //Check for shift
            if ((bindTriggered.KeyModifier & 4) != 0)
            {
                modifiers.Add(VirtualKeyCode.SHIFT);
            }

            sim.Keyboard.ModifiedKeyStroke(modifiers, (VirtualKeyCode)bindTriggered.Keybind);

            bindTriggered.UpdateHotkey(this.Handle);
        }