Update SpeechPackage

programming
Nadine Ganz 2025-01-22 13:33:28 +01:00
parent ed7c9b24e8
commit 2bb1202530
5 changed files with 85 additions and 37 deletions

View File

@ -2118,7 +2118,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2c0bfe10253cbe44aa6bdc7526969660, type: 3} m_Script: {fileID: 11500000, guid: 2c0bfe10253cbe44aa6bdc7526969660, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
debugModeIsActive: 1 debugModeIsActive: 0
speechKey: 4e6ecd1ff0b246e5b782b60d9af0514a speechKey: 4e6ecd1ff0b246e5b782b60d9af0514a
speechRegion: westeurope speechRegion: westeurope
initialRecognitionLanguageCode: de-DE initialRecognitionLanguageCode: de-DE
@ -2134,7 +2134,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4d4b95d5c09d8b94f97693df0bf9a567, type: 3} m_Script: {fileID: 11500000, guid: 4d4b95d5c09d8b94f97693df0bf9a567, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
debugModeIsActive: 1 debugModeIsActive: 0
speechOutputType: 0 speechOutputType: 0
speechKey: 01e33976fd254c608f21da343dc5cc01 speechKey: 01e33976fd254c608f21da343dc5cc01
speechRegion: switzerlandnorth speechRegion: switzerlandnorth
@ -2159,7 +2159,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 701f2da9dc1b54cb4b6e765775a54c4c, type: 3} m_Script: {fileID: 11500000, guid: 701f2da9dc1b54cb4b6e765775a54c4c, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
debugModeIsActive: 1 debugModeIsActive: 0
ignoreReplyToStartInstructions: 1 ignoreReplyToStartInstructions: 1
clientInitDelay: 0.5 clientInitDelay: 0.5
responsePollingInterval: 0.5 responsePollingInterval: 0.5
@ -3074,7 +3074,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9c17ebccf009d574598fcda2ad1850db, type: 3} m_Script: {fileID: 11500000, guid: 9c17ebccf009d574598fcda2ad1850db, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
debugModeIsActive: 1 debugModeIsActive: 0
soundEffectsEnabled: 1 soundEffectsEnabled: 1
audioSource: {fileID: 645973765163538692} audioSource: {fileID: 645973765163538692}
servicesContainer: {fileID: 4548206053279514970} servicesContainer: {fileID: 4548206053279514970}

View File

@ -72,7 +72,7 @@ public class OpenAIServices : MonoBehaviour
{ {
if (value != this._openAIServiceState) if (value != this._openAIServiceState)
{ {
Debug.Log($"OpenAIServiceState changed, new value= {value}"); this.logIfInDebugMode($"OpenAIServiceState changed, new value= {value}");
this._openAIServiceState = value; this._openAIServiceState = value;
@ -204,8 +204,10 @@ public class OpenAIServices : MonoBehaviour
private async void init() private async void init()
{ {
this.logIfInDebugMode("Init started"); this.logIfInDebugMode("OpenAIServices Init started");
try
{
this.OpenAIServiceState = EOpenAIServiceState.StartingUp; this.OpenAIServiceState = EOpenAIServiceState.StartingUp;
this.client = new AssistantsClient(new Uri(this.azureResourceUrl), new AzureKeyCredential(this.azureApiKey)); this.client = new AssistantsClient(new Uri(this.azureResourceUrl), new AzureKeyCredential(this.azureApiKey));
@ -240,6 +242,11 @@ public class OpenAIServices : MonoBehaviour
await this.listen(); await this.listen();
} }
catch (Exception ex)
{
this.lastError = ex.ToString();
}
}
private async Task send(string text) private async Task send(string text)
{ {

View File

@ -76,6 +76,7 @@ public class SpeechRecognitionService : MonoBehaviour
private string pendingPartialTranscription; private string pendingPartialTranscription;
private string pendingFullTranscription; private string pendingFullTranscription;
private string invokeUserSpeechInputEndedEventIsPending; private string invokeUserSpeechInputEndedEventIsPending;
private string pendingRecoError;
#endregion #endregion
@ -136,6 +137,8 @@ public class SpeechRecognitionService : MonoBehaviour
public event EventHandler<string> OnUserSpeechInputEndedEvent; public event EventHandler<string> OnUserSpeechInputEndedEvent;
public event EventHandler<string> OnLastRecoErrorChangedEvent;
#endregion #endregion
#region Public Functions #region Public Functions
@ -187,7 +190,7 @@ public class SpeechRecognitionService : MonoBehaviour
else if (result.Reason == ResultReason.Canceled) else if (result.Reason == ResultReason.Canceled)
{ {
var cancellation = CancellationDetails.FromResult(result); var cancellation = CancellationDetails.FromResult(result);
this.logIfInDebugMode($"SpeechIntentService Canceled: Reason={cancellation.Reason} ErrorDetails={cancellation.ErrorDetails}"); this.pendingRecoError = $"SpeechIntentService Canceled: Reason={cancellation.Reason} ErrorDetails={cancellation.ErrorDetails}";
} }
lock (threadLocker) lock (threadLocker)
@ -262,6 +265,12 @@ public class SpeechRecognitionService : MonoBehaviour
this.OnUserSpeechInputEndedEvent?.Invoke(this, invokeUserSpeechInputEndedEventIsPending); this.OnUserSpeechInputEndedEvent?.Invoke(this, invokeUserSpeechInputEndedEventIsPending);
this.invokeUserSpeechInputEndedEventIsPending = null; this.invokeUserSpeechInputEndedEventIsPending = null;
} }
if (this.pendingRecoError != null)
{
this.OnLastRecoErrorChangedEvent?.Invoke(this, this.pendingRecoError);
this.pendingRecoError = null;
}
} }
private void logIfInDebugMode(string message) private void logIfInDebugMode(string message)

View File

@ -122,7 +122,7 @@ public class SpeechSynthesizerService : MonoBehaviour
async void OnDisable() async void OnDisable()
{ {
Debug.Log("SpeechSynthesizerService disposing speechSynthesizer from OnDisable"); this.logIfInDebugMode("SpeechSynthesizerService disposing speechSynthesizer from OnDisable");
await this.disposeSynthesizer(); await this.disposeSynthesizer();
} }
@ -138,6 +138,8 @@ public class SpeechSynthesizerService : MonoBehaviour
public event EventHandler<bool> OnSpeechOutputEndedEvent; public event EventHandler<bool> OnSpeechOutputEndedEvent;
public event EventHandler<string> OnSynthErrorChangedEvent;
#endregion #endregion
#region Public Functions #region Public Functions
@ -164,6 +166,11 @@ public class SpeechSynthesizerService : MonoBehaviour
SpeechSynthesisResult synthesisResult = await this.speechSynthesizer.SpeakTextAsync(text); SpeechSynthesisResult synthesisResult = await this.speechSynthesizer.SpeakTextAsync(text);
if (synthesisResult.Reason == ResultReason.Canceled)
{
this.OnSynthErrorChangedEvent?.Invoke(this, "Speech synthesis failed! Check internet connection");
}
if (this.speechOutputType == ESpeechOutputType.GenerateAudioClip) if (this.speechOutputType == ESpeechOutputType.GenerateAudioClip)
{ {
// Todo add WavUtility // Todo add WavUtility
@ -189,7 +196,7 @@ public class SpeechSynthesizerService : MonoBehaviour
if (this.speechSynthesizer != null) if (this.speechSynthesizer != null)
{ {
Debug.Log("SpeechSynthesizerService disposing speechSynthesizer from initialize"); this.logIfInDebugMode("SpeechSynthesizerService disposing speechSynthesizer from initialize");
await this.disposeSynthesizer(); await this.disposeSynthesizer();
} }

View File

@ -107,7 +107,7 @@ public class ViaggioAIManager : MonoBehaviour
{ {
if (value != this._partialTranscription) if (value != this._partialTranscription)
{ {
//Debug.Log("PartialTranscription changed, new value= " + value); this.LogIfInDebugMode("PartialTranscription changed, new value= " + value);
this._partialTranscription = value; this._partialTranscription = value;
@ -134,7 +134,7 @@ public class ViaggioAIManager : MonoBehaviour
{ {
if (value != this._fullTranscription) if (value != this._fullTranscription)
{ {
//Debug.Log("FullTranscription changed, new value= " + value); this.LogIfInDebugMode("FullTranscription changed, new value= " + value);
this._fullTranscription = value; this._fullTranscription = value;
@ -196,12 +196,14 @@ public class ViaggioAIManager : MonoBehaviour
this.speechRecognitionService.OnPartialTranscriptionChangedEvent += this.onPartialTranscriptionChanged; this.speechRecognitionService.OnPartialTranscriptionChangedEvent += this.onPartialTranscriptionChanged;
this.speechRecognitionService.OnFullTranscriptionChangedEvent += this.onFullTranscriptionChanged; this.speechRecognitionService.OnFullTranscriptionChangedEvent += this.onFullTranscriptionChanged;
this.speechRecognitionService.OnUserSpeechInputEndedEvent += this.onUserSpeechInputEnded; this.speechRecognitionService.OnUserSpeechInputEndedEvent += this.onUserSpeechInputEnded;
this.speechRecognitionService.OnLastRecoErrorChangedEvent += this.onLastRecoErrorChanged;
} }
if (this.speechSynthesizerService != null) if (this.speechSynthesizerService != null)
{ {
this.speechSynthesizerService.OnSpeechOutputStartedEvent += this.onSpeechOutputStarted; this.speechSynthesizerService.OnSpeechOutputStartedEvent += this.onSpeechOutputStarted;
this.speechSynthesizerService.OnSpeechOutputEndedEvent += this.onSpeechOutputEnded; this.speechSynthesizerService.OnSpeechOutputEndedEvent += this.onSpeechOutputEnded;
this.speechSynthesizerService.OnSynthErrorChangedEvent += this.onSynthErrorChanged;
} }
if (this.openAIServices) if (this.openAIServices)
@ -219,12 +221,14 @@ public class ViaggioAIManager : MonoBehaviour
this.speechRecognitionService.OnPartialTranscriptionChangedEvent -= this.onPartialTranscriptionChanged; this.speechRecognitionService.OnPartialTranscriptionChangedEvent -= this.onPartialTranscriptionChanged;
this.speechRecognitionService.OnFullTranscriptionChangedEvent -= this.onFullTranscriptionChanged; this.speechRecognitionService.OnFullTranscriptionChangedEvent -= this.onFullTranscriptionChanged;
this.speechRecognitionService.OnUserSpeechInputEndedEvent -= this.onUserSpeechInputEnded; this.speechRecognitionService.OnUserSpeechInputEndedEvent -= this.onUserSpeechInputEnded;
this.speechRecognitionService.OnLastRecoErrorChangedEvent -= this.onLastRecoErrorChanged;
} }
if (this?.speechSynthesizerService != null) if (this?.speechSynthesizerService != null)
{ {
this.speechSynthesizerService.OnSpeechOutputStartedEvent -= this.onSpeechOutputStarted; this.speechSynthesizerService.OnSpeechOutputStartedEvent -= this.onSpeechOutputStarted;
this.speechSynthesizerService.OnSpeechOutputEndedEvent -= this.onSpeechOutputEnded; this.speechSynthesizerService.OnSpeechOutputEndedEvent -= this.onSpeechOutputEnded;
this.speechSynthesizerService.OnSynthErrorChangedEvent -= this.onSynthErrorChanged;
} }
if (this?.openAIServices) if (this?.openAIServices)
@ -264,6 +268,11 @@ public class ViaggioAIManager : MonoBehaviour
this.sendIntentRequest(fullTranscription); this.sendIntentRequest(fullTranscription);
} }
private void onLastRecoErrorChanged(object sender, string errorText)
{
this.handleError(sender, errorText);
}
private void onSpeechOutputStarted(object sender, bool dummy) private void onSpeechOutputStarted(object sender, bool dummy)
{ {
this.OnSpeechOutputStartedEvent?.Invoke(this, dummy); this.OnSpeechOutputStartedEvent?.Invoke(this, dummy);
@ -274,6 +283,11 @@ public class ViaggioAIManager : MonoBehaviour
this.OnSpeechOutputEndedEvent?.Invoke(this, dummy); this.OnSpeechOutputEndedEvent?.Invoke(this, dummy);
} }
private void onSynthErrorChanged(object sender, string errorText)
{
this.handleError(sender, errorText);
}
private void onLastBotReplyChanged(object sender, string replyText) private void onLastBotReplyChanged(object sender, string replyText)
{ {
this.processBotReply(replyText); this.processBotReply(replyText);
@ -281,7 +295,7 @@ public class ViaggioAIManager : MonoBehaviour
private void onLastBotErrorChanged(object sender, string errorText) private void onLastBotErrorChanged(object sender, string errorText)
{ {
// todo handle error this.handleError(sender, errorText);
} }
#endregion #endregion
@ -301,6 +315,9 @@ public class ViaggioAIManager : MonoBehaviour
public event EventHandler<string> OnIntentRecognitionSucceededEvent; public event EventHandler<string> OnIntentRecognitionSucceededEvent;
public event EventHandler<bool> OnIntentRecognitionFailedEvent; public event EventHandler<bool> OnIntentRecognitionFailedEvent;
// Error Handling
public event EventHandler<string> OnViaggioAIErrorEvent;
#endregion #endregion
#region Public Functions #region Public Functions
@ -417,6 +434,14 @@ public class ViaggioAIManager : MonoBehaviour
this.audioSource.PlayOneShot(clip); this.audioSource.PlayOneShot(clip);
} }
private void handleError(object sender, string errorText)
{
string logText = $"{sender} Error: {errorText}";
Debug.LogError(logText);
this.OnViaggioAIErrorEvent?.Invoke(this, logText);
}
#endregion #endregion
} }