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
{
}
-
+
}
}
}