diff --git a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity index 1bcdc1a3..dc94fd75 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:bf38c29ca03fce360c1a59163bedceb83c2c2c16997d1feada09fbe14fd94ed8 -size 67952102 +oid sha256:af2cb2d25fa33ec8c0ef1ae8718c8f56900e04d2513aad12aba7956f6248e58c +size 67952103 diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ArcheryRange/MicrophoneStand.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ArcheryRange/MicrophoneStand.cs index 820b1cf8..d30fde93 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/ArcheryRange/MicrophoneStand.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ArcheryRange/MicrophoneStand.cs @@ -14,8 +14,6 @@ public class MicrophoneStand : MonoBehaviour // Start is called before the first frame update void Start() { - fmodWhisperBridge.OnWhisperResultProcessed += OnWhisperResult; - microphoneOffStatus.SetActive(true); microphoneOnStatus.SetActive(false); } @@ -33,6 +31,9 @@ public class MicrophoneStand : MonoBehaviour if (controller != null || other.gameObject.tag == "Player Head") { + fmodWhisperBridge.OnWhisperSegmentUpdated += OnWhisperResult; + fmodWhisperBridge.OnWhisperSegmentFinished += OnWhisperResult; + microphoneOffStatus.SetActive(false); microphoneOnStatus.SetActive(true); AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject); @@ -49,6 +50,9 @@ public class MicrophoneStand : MonoBehaviour KbmController controller = other.GetComponent(); if (controller != null | other.gameObject.tag == "Player Head") { + fmodWhisperBridge.OnWhisperSegmentUpdated -= OnWhisperResult; + fmodWhisperBridge.OnWhisperSegmentFinished -= OnWhisperResult; + microphoneOffStatus.SetActive(true); microphoneOnStatus.SetActive(false); AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject); @@ -62,6 +66,10 @@ public class MicrophoneStand : MonoBehaviour private void OnWhisperResult(string result) { + if (string.IsNullOrEmpty(result) || result.Equals("BLANK_AUDIO")) + { + return; + } outputText.text = result; } diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs b/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs index bc3fe3a1..5c122804 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/FMODWhisperBridge.cs @@ -31,8 +31,11 @@ public class FMODWhisperBridge : MonoBehaviour public bool playLoopback = true; [Range(0f, 2f)] public float loopbackVolume = 1.0f; - public delegate void OnWhisperResultProcessedDelegate(string result); - public event OnWhisperResultProcessedDelegate OnWhisperResultProcessed; + public delegate void OnWhisperSegmentUpdatedDelegate(string result); + public event OnWhisperSegmentUpdatedDelegate OnWhisperSegmentUpdated; + + public delegate void OnWhisperSegmentFinishedDelegate(string result); + public event OnWhisperSegmentFinishedDelegate OnWhisperSegmentFinished; // FMOD private FMOD.System _core; @@ -113,7 +116,12 @@ public class FMODWhisperBridge : MonoBehaviour }; _stream.OnSegmentUpdated += (seg) => { - OnWhisperResultProcessed?.Invoke(seg.Result); + 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}"); }; diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs b/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs index ee6a4338..121d4f1c 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/NPCs/CafeWaiterNPC.cs @@ -24,8 +24,6 @@ public class CafeWaiterNPC : NPCController private void Start() { - fmodWhisperBridge.OnWhisperResultProcessed += ProcessPlayerSpeech; - notepadOriginalRotation = notepadTransform.localRotation.eulerAngles; notepadFlippedRotation = notepadOriginalRotation + new Vector3(0, 180, 0); } @@ -33,12 +31,17 @@ public class CafeWaiterNPC : NPCController protected override void OnPlayerApproach() { AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject); + + fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate; + fmodWhisperBridge.OnWhisperSegmentFinished += ProcessPlayerSpeech; fmodWhisperBridge.ActivateRecording(); } protected override void OnPlayerLeave() { //AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject); + fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate; + fmodWhisperBridge.OnWhisperSegmentFinished -= ProcessPlayerSpeech; fmodWhisperBridge.DeactivateRecording(); } @@ -67,4 +70,13 @@ public class CafeWaiterNPC : NPCController } } } + + private void OnPlayerSpeechUpdate(string playerText) + { + if (string.IsNullOrEmpty(playerText) || playerText.Equals("BLANK_AUDIO")) + { + return; + } + notepadText.text = playerText; + } }