diff --git a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity index dc94fd75..d9c7b234 100644 --- a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity +++ b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af2cb2d25fa33ec8c0ef1ae8718c8f56900e04d2513aad12aba7956f6248e58c -size 67952103 +oid sha256:3bba46d5de0e186b27be15ecf21dd2088cd8f54a4159048dba8aa119cb6e3aa0 +size 67952595 diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs b/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs index 5c122804..b75d02a7 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs @@ -112,17 +112,14 @@ public class FMODWhisperBridge : MonoBehaviour _stream.OnResultUpdated += (txt) => { //OnWhisperResultProcessed?.Invoke(txt); - //UnityEngine.Debug.Log($"[Whisper] result updated: {txt}"); }; _stream.OnSegmentUpdated += (seg) => { OnWhisperSegmentUpdated?.Invoke(seg.Result); - //UnityEngine.Debug.Log($"[Whisper] Seg updated: {seg.Result}"); }; _stream.OnSegmentFinished += (seg) => { OnWhisperSegmentFinished?.Invoke(seg.Result); - //UnityEngine.Debug.Log($"[Whisper] Seg finished: {seg.Result}"); }; // If you want Whisper to respect VAD, enable in manager or set useVad (manager controls stream params). diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs b/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs index 121d4f1c..3fe8802a 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs @@ -16,10 +16,12 @@ public class CafeWaiterNPC : NPCController // 1 - waiting for player to answer "is this correct?" // 2 - bringing food private int state; + private float lastPlayerVoiceUpdateTime; private void Awake() { state = 0; + lastPlayerVoiceUpdateTime = Time.time; } private void Start() @@ -33,7 +35,7 @@ public class CafeWaiterNPC : NPCController AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject); fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate; - fmodWhisperBridge.OnWhisperSegmentFinished += ProcessPlayerSpeech; + fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished; fmodWhisperBridge.ActivateRecording(); } @@ -41,12 +43,25 @@ public class CafeWaiterNPC : NPCController { //AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject); fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate; - fmodWhisperBridge.OnWhisperSegmentFinished -= ProcessPlayerSpeech; + fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished; fmodWhisperBridge.DeactivateRecording(); } - private void ProcessPlayerSpeech(string playerText) + private void OnPlayerSpeechFinished(string playerText) { + if (Time.time < lastPlayerVoiceUpdateTime + 0.5f) + { + Debug.Log("voiceline: player said '" + playerText + "' but not enough time passed"); + return; + } + if (string.IsNullOrEmpty(playerText) || playerText.Contains("BLANK_AUDIO")) + { + Debug.Log("player speech event but result empty"); + return; + } + lastPlayerVoiceUpdateTime = Time.time; + Debug.Log("state = " + state.ToString() + ", voiceline: player text: " + playerText); + if (state == 0) { // Show transcription and ask whether it is correct @@ -73,7 +88,7 @@ public class CafeWaiterNPC : NPCController private void OnPlayerSpeechUpdate(string playerText) { - if (string.IsNullOrEmpty(playerText) || playerText.Equals("BLANK_AUDIO")) + if (string.IsNullOrEmpty(playerText) || playerText.Contains("BLANK_AUDIO")) { return; }