1
0
forked from cgvr/DeltaVR

NPC doesnt process player speech when its too soon after last processing

This commit is contained in:
2026-01-29 17:31:59 +02:00
parent 876306a2af
commit 61a81d2728
3 changed files with 21 additions and 9 deletions

View File

@@ -112,17 +112,14 @@ public class FMODWhisperBridge : MonoBehaviour
_stream.OnResultUpdated += (txt) => _stream.OnResultUpdated += (txt) =>
{ {
//OnWhisperResultProcessed?.Invoke(txt); //OnWhisperResultProcessed?.Invoke(txt);
//UnityEngine.Debug.Log($"[Whisper] result updated: {txt}");
}; };
_stream.OnSegmentUpdated += (seg) => _stream.OnSegmentUpdated += (seg) =>
{ {
OnWhisperSegmentUpdated?.Invoke(seg.Result); OnWhisperSegmentUpdated?.Invoke(seg.Result);
//UnityEngine.Debug.Log($"[Whisper] Seg updated: {seg.Result}");
}; };
_stream.OnSegmentFinished += (seg) => _stream.OnSegmentFinished += (seg) =>
{ {
OnWhisperSegmentFinished?.Invoke(seg.Result); 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). // If you want Whisper to respect VAD, enable in manager or set useVad (manager controls stream params).

View File

@@ -16,10 +16,12 @@ public class CafeWaiterNPC : NPCController
// 1 - waiting for player to answer "is this correct?" // 1 - waiting for player to answer "is this correct?"
// 2 - bringing food // 2 - bringing food
private int state; private int state;
private float lastPlayerVoiceUpdateTime;
private void Awake() private void Awake()
{ {
state = 0; state = 0;
lastPlayerVoiceUpdateTime = Time.time;
} }
private void Start() private void Start()
@@ -33,7 +35,7 @@ public class CafeWaiterNPC : NPCController
AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject); AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject);
fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate; fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate;
fmodWhisperBridge.OnWhisperSegmentFinished += ProcessPlayerSpeech; fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished;
fmodWhisperBridge.ActivateRecording(); fmodWhisperBridge.ActivateRecording();
} }
@@ -41,12 +43,25 @@ public class CafeWaiterNPC : NPCController
{ {
//AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject); //AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject);
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate; fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate;
fmodWhisperBridge.OnWhisperSegmentFinished -= ProcessPlayerSpeech; fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
fmodWhisperBridge.DeactivateRecording(); 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) if (state == 0)
{ {
// Show transcription and ask whether it is correct // Show transcription and ask whether it is correct
@@ -73,7 +88,7 @@ public class CafeWaiterNPC : NPCController
private void OnPlayerSpeechUpdate(string playerText) private void OnPlayerSpeechUpdate(string playerText)
{ {
if (string.IsNullOrEmpty(playerText) || playerText.Equals("BLANK_AUDIO")) if (string.IsNullOrEmpty(playerText) || playerText.Contains("BLANK_AUDIO"))
{ {
return; return;
} }