Ejemplo n.º 1
0
        public async Task DeleteSampleAsync(SoundboardSample soundboardSample)
        {
            try
            {
                // Recursively try to acquire file lock. This can sometimes take a few seconds to release after
                // an audio playback event has ended
                bool success = false;
                while (!success)
                {
                    try
                    {
                        AudioAgent.StopAudioPlayback(SelectedOutputDevicesCollection.ToList());
                        File.Delete(soundboardSample.FilePath);
                        SoundboardSampleCollection.Remove(soundboardSample);

                        success = true;
                    }
                    catch
                    {
                        await Task.Delay(500);
                    }
                }
            }
            catch (Exception ex)
            {
                ApplicationLogger.Log(ex.Message, ex.StackTrace);
            }
        }
Ejemplo n.º 2
0
        public void RegisterHotKeysAndHooks()
        {
            try
            {
                if (RegisterRecordHotKey(ApplicationConfiguration.Instance.RecordHotkey))
                {
                    RecordHotkey = ApplicationConfiguration.Instance.RecordHotkey;
                }

                SoundboardSampleCollection.ToList().ForEach(soundboardSample =>
                {
                    if (soundboardSample.Hotkey != Key.None)
                    {
                        RegisterSoundboardSampleHotKey(soundboardSample.Hotkey, soundboardSample.HotkeyId);
                    }
                });

                // Hooks
                _hwndSource = HwndSource.FromHwnd(WindowHandle);
                _hwndSource.AddHook(HwndHook);
            }
            catch (Exception ex)
            {
                ApplicationLogger.Log(ex.Message, ex.StackTrace);
            }
        }
Ejemplo n.º 3
0
        public void OnWindowClosing(object sender, EventArgs e)
        {
            AudioAgent.StopAudioCapture();
            UnregisterHotKeysAndHooks();

            ApplicationConfiguration.Instance.RecordHotkey = RecordHotkey.Value;
            SoundboardSampleCollection.ToList().ForEach(x => x.SaveMetadataProperties());
        }
Ejemplo n.º 4
0
        public void ClearAllSoundboardSampleHotkeys()
        {
            SoundboardSampleCollection.ToList().ForEach(soundboardSample =>
            {
                soundboardSample.Hotkey = Key.None;
                UnregisterSoundboardSampleHotKey(soundboardSample.HotkeyId);

                SaveSample(soundboardSample);
            });
        }
Ejemplo n.º 5
0
        public void UnregisterHotKeysAndHooks()
        {
            UnregisterRecordHotKey();
            SoundboardSampleCollection.ToList().ForEach(soundboardSample =>
            {
                UnregisterSoundboardSampleHotKey(soundboardSample.HotkeyId);
            });

            // Hooks
            _hwndSource?.RemoveHook(HwndHook);
            _hwndSource?.Dispose();
        }
Ejemplo n.º 6
0
        public void RefreshSoundboardSampleCollection()
        {
            // Unbind shortcuts
            SoundboardSampleCollection.ToList().ForEach(soundboardSample =>
            {
                UnregisterSoundboardSampleHotKey(soundboardSample.HotkeyId);
            });

            SoundboardSampleCollection.Clear();

            LoadAudioSamples();

            // Rebind shortcuts
            SoundboardSampleCollection.ToList().ForEach(soundboardSample =>
            {
                if (soundboardSample.Hotkey != Key.None)
                {
                    RegisterSoundboardSampleHotKey(soundboardSample.Hotkey, soundboardSample.HotkeyId);
                }
            });
        }
Ejemplo n.º 7
0
        public void CreateDuplicate(IEnumerable <SoundboardSample> soundboardSamples)
        {
            foreach (var soundboardSample in soundboardSamples)
            {
                var soundboardSampleClone = soundboardSample.GetShallowCopy();

                // Increment filename if one already exists with the same name
                int sameNameIndex = 1;
                while (File.Exists(Path.Combine(ApplicationConfiguration.Instance.SoundboardSampleDirectory, soundboardSampleClone.GroupName, $"{soundboardSampleClone.Name} Copy {sameNameIndex}.wav")))
                {
                    sameNameIndex++;
                }

                // Change the name and filepath
                soundboardSampleClone.Name     = $"{soundboardSampleClone.Name} Copy {sameNameIndex}";
                soundboardSampleClone.FilePath = soundboardSampleClone.GetVirtualFilePath();

                File.Copy(soundboardSample.FilePath, soundboardSampleClone.FilePath);
                SaveSample(soundboardSampleClone);

                SoundboardSampleCollection.Add(soundboardSampleClone);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Provides application shortcut functions for shortcut events from Windows
        /// </summary>
        /// <param name="hwnd"></param>
        /// <param name="msg"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <param name="handled"></param>
        /// <returns></returns>
        public IntPtr HwndHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            const int WM_HOTKEY = 0x0312;

            switch (msg)
            {
            case WM_HOTKEY:

                // Record button
                int virtualKeyParam = (((int)lParam >> 16) & 0xFFFF);
                if (_recordHotKey != null && _recordHotKey != Key.None)
                {
                    uint keyCode = Convert.ToUInt32(KeyInterop.VirtualKeyFromKey(_recordHotKey.Value).ToString("X"), 16);
                    if (_recordHotkeyId == wParam.ToInt32() && virtualKeyParam == keyCode)
                    {
                        AudioAgent.WriteAudioBufferToFile();
                    }
                }

                // Soundboard samples
                var soundboardSample = SoundboardSampleCollection.Where(x => x.HotkeyId == wParam.ToInt32()).FirstOrDefault();
                if (soundboardSample != null && soundboardSample.Hotkey != Key.None)
                {
                    uint keyCode = Convert.ToUInt32(KeyInterop.VirtualKeyFromKey(soundboardSample.Hotkey).ToString("X"), 16);
                    if (soundboardSample.HotkeyId == wParam.ToInt32() && virtualKeyParam == keyCode)
                    {
                        PlayAudioSample(soundboardSample, PlaybackScope.Global);
                    }
                }

                handled = true;
                break;
            }

            return(IntPtr.Zero);
        }
Ejemplo n.º 9
0
        public void OnFileWritten(object sender, EventArgs e)
        {
            try
            {
                string filePath     = sender as string;
                double totalSeconds = AudioAgent.GetFileAudioDuration(filePath).TotalSeconds;

                SoundboardSample NewSoundboardSample = new SoundboardSample(filePath)
                {
                    GroupName          = "Ungrouped",
                    FileTimeMax        = totalSeconds,
                    FileTimeMin        = 0,
                    FileTimeUpperValue = totalSeconds,
                    FileTimeLowerValue = 0,
                    HotkeyId           = SoundboardSampleCollection.Count
                };

                SoundboardSampleCollection.Add(NewSoundboardSample);
            }
            catch (Exception ex)
            {
                ApplicationLogger.Log(ex.Message, ex.StackTrace);
            }
        }
Ejemplo n.º 10
0
 public void OnAudioPlaybackStopped(object sender, EventArgs e)
 {
     SoundboardSampleCollection.ToList().ForEach(x => x.StopPlaybackTimer());
     ((AudioOutputDevice)sender).PlaybackStopped -= OnAudioPlaybackStopped;
 }