diff --git a/src/ElectronBot.Braincase/Controls/CompactOverlay/ModelLoadCompactOverlayPage.xaml b/src/ElectronBot.Braincase/Controls/CompactOverlay/ModelLoadCompactOverlayPage.xaml index 17a425b..874fc33 100644 --- a/src/ElectronBot.Braincase/Controls/CompactOverlay/ModelLoadCompactOverlayPage.xaml +++ b/src/ElectronBot.Braincase/Controls/CompactOverlay/ModelLoadCompactOverlayPage.xaml @@ -41,6 +41,10 @@ Foreground="{ThemeResource SystemAccentColor}"> + /// - public static bool IsVioceEnabled() + public static bool IsVoiceEnabled() { // 检测Space + E是否被按下 if ((GetAsyncKeyState(0x20) & 0x8000) != 0 && (GetAsyncKeyState((int)'E') & 0x8000) != 0) diff --git a/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs b/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs index d72c9d9..b16d593 100644 --- a/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs +++ b/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs @@ -29,6 +29,11 @@ public class ElectronBotHelper get; set; } = false; + public bool VoiceLock + { + get; set; + } = false; + public bool UpLock { get; @@ -517,6 +522,7 @@ public class ElectronBotHelper catch (Exception) { PlayEmojisLock = false; + VoiceLock = false; } } } @@ -594,6 +600,7 @@ public class ElectronBotHelper } PlayEmojisLock = false; + VoiceLock = false; } public void ToPlayEmojisRandom() diff --git a/src/ElectronBot.Braincase/Services/SpeechAndTTS/SpeechAndTTSService.cs b/src/ElectronBot.Braincase/Services/SpeechAndTTS/SpeechAndTTSService.cs index ff2b7ad..90e8ff4 100644 --- a/src/ElectronBot.Braincase/Services/SpeechAndTTS/SpeechAndTTSService.cs +++ b/src/ElectronBot.Braincase/Services/SpeechAndTTS/SpeechAndTTSService.cs @@ -335,4 +335,6 @@ public class SpeechAndTTSService : ISpeechAndTTSService isListening = false; } } + + } diff --git a/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs b/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs index b9220a4..09a9a3d 100644 --- a/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs +++ b/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs @@ -111,6 +111,13 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient get; } = new OrthographicCamera() { NearPlaneDistance = 1e-2, FarPlaneDistance = 1e4 }; + private readonly DispatcherTimer _timer = new() + { + Interval = TimeSpan.FromMilliseconds(200) + }; + + [ObservableProperty] private string _voiceResult = string.Empty; + public ModelLoadCompactOverlayViewModel(IEffectsManager effectsManager) { EffectsManager = effectsManager; @@ -124,6 +131,30 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient var filePath = Package.Current.InstalledLocation.Path + "\\Assets\\Cubemap_Grandcanyon.dds"; EnvironmentMap = LoadTextureByFullPath(filePath); + + _timer.Tick += Timer_Tick; + } + + private async void Timer_Tick(object? sender, object e) + { + var resultState = EbHelper.IsVoiceEnabled(); + + if (resultState) + { + VoiceResult = "快捷键按下"; + var voiceLock = ElectronBotHelper.Instance.VoiceLock; + + if (resultState && !voiceLock) + { + await ElectronBotHelper.Instance.MediaPlayerPlaySoundByTtsAsync("主人需要帮忙吗", true); + } + + ElectronBotHelper.Instance.VoiceLock = true; + } + else + { + VoiceResult = "快捷键松开"; + } } [RelayCommand] @@ -418,13 +449,16 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient FocusCameraToScene(); ElectronBotHelper.Instance.ModelActionFrame += Instance_ModelActionFrame; + + + _timer.Start(); } catch (Exception) { ToastHelper.SendToast("模型加载失败", TimeSpan.FromSeconds(3)); } }); - + } public void UnLoaded() @@ -438,6 +472,8 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient EffectsManager.Dispose(); _importer.Dispose(); ElectronBotHelper.Instance.PlayEmojisLock = false; + + _timer.Stop(); } private void Instance_ModelActionFrame(object? sender, Verdure.ElectronBot.Core.Models.ModelActionFrame ex) @@ -491,7 +527,7 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient { } - + } } }