Initialer Upload neues Unity-Projekt
This commit is contained in:
171
Assets/Oculus/Voice/Scripts/Runtime/Service/AppBuiltIns.cs
Normal file
171
Assets/Oculus/Voice/Scripts/Runtime/Service/AppBuiltIns.cs
Normal file
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Licensed under the Oculus SDK License Agreement (the "License");
|
||||
* you may not use the Oculus SDK except in compliance with the License,
|
||||
* which is provided at the time of installation or download, or which
|
||||
* otherwise accompanies this software in either electronic or hard copy form.
|
||||
*
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://developer.oculus.com/licenses/oculussdk/
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, the Oculus SDK
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Oculus.Voice
|
||||
{
|
||||
public static class AppBuiltIns
|
||||
{
|
||||
public static string builtInPrefix = "builtin:";
|
||||
private static string modelName = "Built-in Models";
|
||||
|
||||
public static readonly Dictionary<string, Dictionary<string, string>>
|
||||
apps = new Dictionary<string, Dictionary<string, string>>
|
||||
{
|
||||
{
|
||||
"Chinese", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_zh"},
|
||||
{"name", modelName},
|
||||
{"lang", "zh"},
|
||||
{"clientToken", "3KQH33637TAT7WD4TG7T65SDRO73WZGY"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Dutch", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_nl"},
|
||||
{"name", modelName},
|
||||
{"lang", "nl"},
|
||||
{"clientToken", "ZCD6HCNCL6GTJKZ3QKWNKQVEDI4GUL7C"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"English", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_en"},
|
||||
{"name", modelName},
|
||||
{"lang", "en"},
|
||||
{"clientToken", "HOKEABS7HPIQVSRSVWRPTTV75TQJ5QBP"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"French", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_fr"},
|
||||
{"name", modelName},
|
||||
{"lang", "fr"},
|
||||
{"clientToken", "7PP7NK2QAH67MREGZV6SB6RIEWAYDNRY"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"German", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_de"},
|
||||
{"name", modelName},
|
||||
{"lang", "de"},
|
||||
{"clientToken", "7LXOOB4JC7MXPUTTGQHDVQMHGEEJT6LE"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Italian", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_it"},
|
||||
{"name", modelName},
|
||||
{"lang", "it"},
|
||||
{"clientToken", "KELCNR4DCCPPOCF2RDFS4M6JOCWWIFII"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Japanese", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_ja"},
|
||||
{"name", modelName},
|
||||
{"lang", "ja"},
|
||||
{"clientToken", "TPJGLBBCHJ5F7BVVN5XLEGP6YDQRUE3P"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Korean", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_ko"},
|
||||
{"name", modelName},
|
||||
{"lang", "ko"},
|
||||
{"clientToken", "NT4WJLL7ACMFBXS4B7W5GRLTKDZQ36R4"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Polish", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_pl"},
|
||||
{"name", modelName},
|
||||
{"lang", "pl"},
|
||||
{"clientToken", "DMDRHGYDYN33D3IKCX5BG5R57EL2IIC4"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Portuguese", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_pt"},
|
||||
{"name", modelName},
|
||||
{"lang", "pt"},
|
||||
{"clientToken", "W4W3BSKL72HZC5MXLILONJUCG732SQQN"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Russian", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_ru"},
|
||||
{"name", modelName},
|
||||
{"lang", "ru"},
|
||||
{"clientToken", "W67HLUWA3MBYVEKRW3VVWUKSNZGAOFBI"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Spanish", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_es"},
|
||||
{"name", modelName},
|
||||
{"lang", "es"},
|
||||
{"clientToken", "YW7AM5OOVSW5XKGYKFE2S2HLC2WHC3UI"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Swedish", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_sv"},
|
||||
{"name", modelName},
|
||||
{"lang", "sv"},
|
||||
{"clientToken", "NPE3UJ7Y4NIVTUOZ7QPPAP3TY6FYPXJY"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Turkish", new Dictionary<string, string>
|
||||
{
|
||||
{"id", "voiceSDK_tr"},
|
||||
{"name", modelName},
|
||||
{"lang", "tr"},
|
||||
{"clientToken", "ZCISEDXESLYJOROLNOODCGGPZXHLUAEE"},
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
public static string[] appNames
|
||||
{
|
||||
get
|
||||
{
|
||||
string[] keys = new string[apps.Keys.Count];
|
||||
apps.Keys.CopyTo(keys, 0);
|
||||
return keys;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6483d6b21054c4e07acfd6c1c43c4e0b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,454 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Licensed under the Oculus SDK License Agreement (the "License");
|
||||
* you may not use the Oculus SDK except in compliance with the License,
|
||||
* which is provided at the time of installation or download, or which
|
||||
* otherwise accompanies this software in either electronic or hard copy form.
|
||||
*
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://developer.oculus.com/licenses/oculussdk/
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, the Oculus SDK
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using Meta.Voice;
|
||||
using Meta.WitAi;
|
||||
using Meta.WitAi.Configuration;
|
||||
using Meta.WitAi.Data;
|
||||
using Meta.WitAi.Data.Configuration;
|
||||
using Meta.WitAi.Interfaces;
|
||||
using Meta.WitAi.Json;
|
||||
using Meta.WitAi.Requests;
|
||||
using Oculus.Voice.Bindings.Android;
|
||||
using Oculus.Voice.Core.Bindings.Android.PlatformLogger;
|
||||
using Oculus.Voice.Core.Bindings.Interfaces;
|
||||
using Oculus.Voice.Interfaces;
|
||||
using Oculus.VoiceSDK.Utilities;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Oculus.Voice
|
||||
{
|
||||
[HelpURL("https://developer.oculus.com/experimental/voice-sdk/tutorial-overview/")]
|
||||
public class AppVoiceExperience : VoiceService, IWitRuntimeConfigProvider, IWitConfigurationProvider
|
||||
{
|
||||
[SerializeField] private WitRuntimeConfiguration witRuntimeConfiguration;
|
||||
[Tooltip("Uses platform services to access wit.ai instead of accessing wit directly from within the application.")]
|
||||
[SerializeField] private bool usePlatformServices;
|
||||
|
||||
[Tooltip("Enables logs related to the interaction to be displayed on console")]
|
||||
[SerializeField] private bool enableConsoleLogging;
|
||||
|
||||
public WitRuntimeConfiguration RuntimeConfiguration
|
||||
{
|
||||
get => witRuntimeConfiguration;
|
||||
set => witRuntimeConfiguration = value;
|
||||
}
|
||||
|
||||
public WitConfiguration Configuration => witRuntimeConfiguration?.witConfiguration;
|
||||
|
||||
private IPlatformVoiceService platformService;
|
||||
private IVoiceService voiceServiceImpl;
|
||||
private IVoiceSDKLogger voiceSDKLoggerImpl;
|
||||
|
||||
private static string PACKAGE_VERSION => VoiceSDKConstants.SdkVersion;
|
||||
|
||||
private bool Initialized => null != voiceServiceImpl;
|
||||
|
||||
public event Action OnInitialized;
|
||||
|
||||
#region Voice Service Properties
|
||||
public override bool Active => base.Active || (null != voiceServiceImpl && voiceServiceImpl.Active);
|
||||
public override bool IsRequestActive => base.IsRequestActive || (null != voiceServiceImpl && voiceServiceImpl.IsRequestActive);
|
||||
public override ITranscriptionProvider TranscriptionProvider
|
||||
{
|
||||
get => voiceServiceImpl?.TranscriptionProvider;
|
||||
set
|
||||
{
|
||||
if (voiceServiceImpl != null)
|
||||
{
|
||||
voiceServiceImpl.TranscriptionProvider = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public override bool MicActive => null != voiceServiceImpl && voiceServiceImpl.MicActive;
|
||||
protected override bool ShouldSendMicData => witRuntimeConfiguration.sendAudioToWit ||
|
||||
null == TranscriptionProvider;
|
||||
#endregion
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
public bool HasPlatformIntegrations => usePlatformServices && voiceServiceImpl is VoiceSDKImpl;
|
||||
#else
|
||||
public bool HasPlatformIntegrations => false;
|
||||
#endif
|
||||
|
||||
public bool EnableConsoleLogging => enableConsoleLogging;
|
||||
|
||||
public override bool UsePlatformIntegrations
|
||||
{
|
||||
get => usePlatformServices;
|
||||
set
|
||||
{
|
||||
// If we're trying to turn on platform services and they're not currently active we
|
||||
// will forcibly reinit and try to set the state.
|
||||
if (usePlatformServices != value || HasPlatformIntegrations != value)
|
||||
{
|
||||
usePlatformServices = value;
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
Debug.Log($"{(usePlatformServices ? "Enabling" : "Disabling")} platform integration.");
|
||||
InitVoiceSDK();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Voice Service Text Methods
|
||||
public override bool CanSend()
|
||||
{
|
||||
return base.CanSend() && null != voiceServiceImpl && voiceServiceImpl.CanSend();
|
||||
}
|
||||
|
||||
public override VoiceServiceRequest Activate(string text, WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
|
||||
{
|
||||
if (CanSend())
|
||||
{
|
||||
return voiceServiceImpl.Activate(text, requestOptions, requestEvents);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Voice Service Audio Methods
|
||||
public override bool CanActivateAudio()
|
||||
{
|
||||
return base.CanActivateAudio() && voiceServiceImpl.CanActivateAudio();
|
||||
}
|
||||
|
||||
protected override string GetActivateAudioError()
|
||||
{
|
||||
if (!HasPlatformIntegrations && !AudioBuffer.Instance.IsInputAvailable)
|
||||
{
|
||||
return "No Microphone(s)/recording devices found. You will be unable to capture audio on this device.";
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public override VoiceServiceRequest Activate(WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
|
||||
{
|
||||
if (CanActivateAudio() && CanSend())
|
||||
{
|
||||
return voiceServiceImpl.Activate(requestOptions, requestEvents);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public override VoiceServiceRequest ActivateImmediately(WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
|
||||
{
|
||||
if (CanActivateAudio() && CanSend())
|
||||
{
|
||||
return voiceServiceImpl.ActivateImmediately(requestOptions, requestEvents);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public override void Deactivate()
|
||||
{
|
||||
voiceServiceImpl.Deactivate();
|
||||
}
|
||||
|
||||
public override void DeactivateAndAbortRequest()
|
||||
{
|
||||
voiceServiceImpl.DeactivateAndAbortRequest();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void InitVoiceSDK()
|
||||
{
|
||||
// Check voice sdk version
|
||||
if (string.IsNullOrEmpty(PACKAGE_VERSION))
|
||||
{
|
||||
VLog.E("No SDK Version Set");
|
||||
}
|
||||
|
||||
// Clean up if we're switching to native C# wit impl
|
||||
if (!UsePlatformIntegrations)
|
||||
{
|
||||
if (voiceServiceImpl is VoiceSDKImpl)
|
||||
{
|
||||
((VoiceSDKImpl) voiceServiceImpl).Disconnect();
|
||||
}
|
||||
|
||||
if (voiceSDKLoggerImpl is VoiceSDKPlatformLoggerImpl)
|
||||
{
|
||||
try
|
||||
{
|
||||
((VoiceSDKPlatformLoggerImpl)voiceSDKLoggerImpl).Disconnect();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
VLog.E($"Disconnection error: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
var loggerImpl = new VoiceSDKPlatformLoggerImpl();
|
||||
loggerImpl.Connect(PACKAGE_VERSION);
|
||||
voiceSDKLoggerImpl = loggerImpl;
|
||||
|
||||
if (UsePlatformIntegrations)
|
||||
{
|
||||
Debug.Log("Checking platform capabilities...");
|
||||
var platformImpl = new VoiceSDKImpl(this);
|
||||
platformImpl.OnServiceNotAvailableEvent += () => RevertToWitUnity();
|
||||
platformImpl.Connect(PACKAGE_VERSION);
|
||||
platformImpl.SetRuntimeConfiguration(RuntimeConfiguration);
|
||||
if (platformImpl.PlatformSupportsWit)
|
||||
{
|
||||
voiceServiceImpl = platformImpl;
|
||||
|
||||
if (voiceServiceImpl is Wit wit)
|
||||
{
|
||||
wit.RuntimeConfiguration = witRuntimeConfiguration;
|
||||
}
|
||||
|
||||
voiceServiceImpl.VoiceEvents = VoiceEvents;
|
||||
voiceServiceImpl.TelemetryEvents = TelemetryEvents;
|
||||
voiceSDKLoggerImpl.IsUsingPlatformIntegration = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Platform registration indicated platform support is not currently available.");
|
||||
RevertToWitUnity();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RevertToWitUnity();
|
||||
}
|
||||
#else
|
||||
voiceSDKLoggerImpl = new VoiceSDKConsoleLoggerImpl();
|
||||
RevertToWitUnity();
|
||||
#endif
|
||||
voiceSDKLoggerImpl.WitApplication = RuntimeConfiguration?.witConfiguration?.GetLoggerAppId();
|
||||
voiceSDKLoggerImpl.ShouldLogToConsole = EnableConsoleLogging;
|
||||
|
||||
OnInitialized?.Invoke();
|
||||
}
|
||||
|
||||
private void RevertToWitUnity()
|
||||
{
|
||||
Wit w = GetComponent<Wit>();
|
||||
if (null == w)
|
||||
{
|
||||
w = gameObject.AddComponent<Wit>();
|
||||
w.hideFlags = HideFlags.HideInInspector;
|
||||
}
|
||||
voiceServiceImpl = w;
|
||||
|
||||
if (voiceServiceImpl is Wit wit)
|
||||
{
|
||||
wit.RuntimeConfiguration = witRuntimeConfiguration;
|
||||
}
|
||||
|
||||
voiceServiceImpl.VoiceEvents = VoiceEvents;
|
||||
voiceServiceImpl.TelemetryEvents = TelemetryEvents;
|
||||
voiceSDKLoggerImpl.IsUsingPlatformIntegration = false;
|
||||
}
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
if (MicPermissionsManager.HasMicPermission())
|
||||
{
|
||||
InitVoiceSDK();
|
||||
}
|
||||
else
|
||||
{
|
||||
MicPermissionsManager.RequestMicPermission();
|
||||
}
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
platformService?.SetRuntimeConfiguration(witRuntimeConfiguration);
|
||||
#endif
|
||||
|
||||
// Listeners
|
||||
VoiceEvents.OnRequestInitialized?.AddListener(OnRequestInit);
|
||||
VoiceEvents.OnResponse?.AddListener(OnWitResponseListener);
|
||||
VoiceEvents.OnStartListening?.AddListener(OnStartedListening);
|
||||
VoiceEvents.OnMinimumWakeThresholdHit?.AddListener(OnMinimumWakeThresholdHit);
|
||||
VoiceEvents.OnStoppedListening?.AddListener(OnStoppedListening);
|
||||
VoiceEvents.OnMicDataSent?.AddListener(OnMicDataSent);
|
||||
VoiceEvents.OnSend?.AddListener(OnSend);
|
||||
VoiceEvents.OnPartialTranscription?.AddListener(OnPartialTranscription);
|
||||
VoiceEvents.OnFullTranscription?.AddListener(OnFullTranscription);
|
||||
VoiceEvents.OnStoppedListeningDueToTimeout?.AddListener(OnStoppedListeningDueToTimeout);
|
||||
VoiceEvents.OnStoppedListeningDueToInactivity?.AddListener(OnStoppedListeningDueToInactivity);
|
||||
VoiceEvents.OnStoppedListeningDueToDeactivation?.AddListener(OnStoppedListeningDueToDeactivation);
|
||||
VoiceEvents.OnComplete?.AddListener(OnRequestComplete);
|
||||
TelemetryEvents.OnAudioTrackerFinished?.AddListener(OnAudioDurationTrackerFinished);
|
||||
}
|
||||
|
||||
protected override void OnDisable()
|
||||
{
|
||||
base.OnDisable();
|
||||
#if UNITY_ANDROID
|
||||
if (voiceServiceImpl is VoiceSDKImpl platformImpl)
|
||||
{
|
||||
platformImpl.Disconnect();
|
||||
}
|
||||
|
||||
if (voiceSDKLoggerImpl is VoiceSDKPlatformLoggerImpl loggerImpl)
|
||||
{
|
||||
loggerImpl.Disconnect();
|
||||
}
|
||||
#endif
|
||||
voiceServiceImpl = null;
|
||||
voiceSDKLoggerImpl = null;
|
||||
|
||||
// Listeners
|
||||
VoiceEvents.OnRequestInitialized?.RemoveListener(OnRequestInit);
|
||||
VoiceEvents.OnResponse?.RemoveListener(OnWitResponseListener);
|
||||
VoiceEvents.OnStartListening?.RemoveListener(OnStartedListening);
|
||||
VoiceEvents.OnMinimumWakeThresholdHit?.RemoveListener(OnMinimumWakeThresholdHit);
|
||||
VoiceEvents.OnStoppedListening?.RemoveListener(OnStoppedListening);
|
||||
VoiceEvents.OnMicDataSent?.RemoveListener(OnMicDataSent);
|
||||
VoiceEvents.OnSend?.RemoveListener(OnSend);
|
||||
VoiceEvents.OnPartialTranscription?.RemoveListener(OnPartialTranscription);
|
||||
VoiceEvents.OnFullTranscription?.RemoveListener(OnFullTranscription);
|
||||
VoiceEvents.OnStoppedListeningDueToTimeout?.RemoveListener(OnStoppedListeningDueToTimeout);
|
||||
VoiceEvents.OnStoppedListeningDueToInactivity?.RemoveListener(OnStoppedListeningDueToInactivity);
|
||||
VoiceEvents.OnStoppedListeningDueToDeactivation?.RemoveListener(OnStoppedListeningDueToDeactivation);
|
||||
VoiceEvents.OnComplete?.RemoveListener(OnRequestComplete);
|
||||
TelemetryEvents.OnAudioTrackerFinished?.RemoveListener(OnAudioDurationTrackerFinished);
|
||||
}
|
||||
|
||||
private void OnApplicationFocus(bool hasFocus)
|
||||
{
|
||||
if (enabled && hasFocus && !Initialized)
|
||||
{
|
||||
if (MicPermissionsManager.HasMicPermission())
|
||||
{
|
||||
InitVoiceSDK();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Event listeners for logging
|
||||
void OnRequestInit(VoiceServiceRequest request)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionStart(request.Options?.RequestId, request.InputType == NLPRequestInputType.Text ? "message" : "speech");
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
voiceSDKLoggerImpl.LogAnnotation("clientSDKVersion", PACKAGE_VERSION);
|
||||
#endif
|
||||
voiceSDKLoggerImpl.LogAnnotation("minWakeThreshold",
|
||||
RuntimeConfiguration?.soundWakeThreshold.ToString(CultureInfo.InvariantCulture));
|
||||
voiceSDKLoggerImpl.LogAnnotation("minKeepAliveTimeSec",
|
||||
RuntimeConfiguration?.minKeepAliveTimeInSeconds.ToString(CultureInfo.InvariantCulture));
|
||||
voiceSDKLoggerImpl.LogAnnotation("minTranscriptionKeepAliveTimeSec",
|
||||
RuntimeConfiguration?.minTranscriptionKeepAliveTimeInSeconds.ToString(CultureInfo.InvariantCulture));
|
||||
voiceSDKLoggerImpl.LogAnnotation("maxRecordingTime",
|
||||
RuntimeConfiguration?.maxRecordingTime.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
|
||||
void OnWitResponseListener(WitResponseNode witResponseNode)
|
||||
{
|
||||
var tokens = witResponseNode?["speech"]?["tokens"];
|
||||
if (tokens != null)
|
||||
{
|
||||
int speechTokensLength = tokens.Count;
|
||||
string speechLength = witResponseNode["speech"]["tokens"][speechTokensLength - 1]?["end"]?.Value;
|
||||
voiceSDKLoggerImpl.LogAnnotation("audioLength", speechLength);
|
||||
}
|
||||
}
|
||||
|
||||
void OnStartedListening()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("startedListening");
|
||||
}
|
||||
|
||||
void OnMinimumWakeThresholdHit()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("minWakeThresholdHit");
|
||||
}
|
||||
|
||||
void OnStoppedListening()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("stoppedListening");
|
||||
}
|
||||
|
||||
void OnStoppedListeningDueToTimeout()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("stoppedListeningTimeout");
|
||||
}
|
||||
|
||||
void OnStoppedListeningDueToInactivity()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("stoppedListeningInactivity");
|
||||
}
|
||||
|
||||
void OnStoppedListeningDueToDeactivation()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("stoppedListeningDeactivate");
|
||||
}
|
||||
|
||||
void OnMicDataSent()
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("micDataSent");
|
||||
}
|
||||
|
||||
void OnSend(VoiceServiceRequest request)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("witRequestCreated");
|
||||
if (request != null)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogAnnotation("requestIdOverride", request.Options?.RequestId);
|
||||
}
|
||||
}
|
||||
|
||||
void OnAudioDurationTrackerFinished(long timestamp, double audioDuration)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogAnnotation("adt_duration", audioDuration.ToString(CultureInfo.InvariantCulture));
|
||||
voiceSDKLoggerImpl.LogAnnotation("adt_finished", timestamp.ToString());
|
||||
}
|
||||
|
||||
void OnPartialTranscription(string text)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogFirstTranscriptionTime();
|
||||
}
|
||||
|
||||
void OnFullTranscription(string text)
|
||||
{
|
||||
voiceSDKLoggerImpl.LogInteractionPoint("fullTranscriptionTime");
|
||||
}
|
||||
|
||||
void OnRequestComplete(VoiceServiceRequest request)
|
||||
{
|
||||
if (request.State == VoiceRequestState.Failed)
|
||||
{
|
||||
VLog.E($"Request Failed\nError: {request.Results.Message}\n{request.Results.ResponseData}");
|
||||
voiceSDKLoggerImpl.LogInteractionEndFailure(request.Results.Message);
|
||||
}
|
||||
else if (request.State == VoiceRequestState.Canceled)
|
||||
{
|
||||
VLog.D($"Request Canceled\nMessage: {request.Results.Message}");
|
||||
voiceSDKLoggerImpl.LogInteractionEndFailure("aborted");
|
||||
}
|
||||
else
|
||||
{
|
||||
VLog.D($"Request Success");
|
||||
voiceSDKLoggerImpl.LogInteractionEndSuccess();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 28779cfed47441a42a6cd4fb49c8dc89
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
using Meta.WitAi.Configuration;
|
||||
using Meta.WitAi.Events;
|
||||
using Meta.WitAi.Requests;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
namespace Oculus.Voice
|
||||
{
|
||||
public class ObjectVoiceExperience : MonoBehaviour
|
||||
{
|
||||
// TODO: T149927662 Clean FormerlySerializedAs in a follow up diff before release.
|
||||
[FormerlySerializedAs("voiceEvents")]
|
||||
[SerializeField] private VoiceEvents _voiceEvents = new VoiceEvents();
|
||||
|
||||
private AppVoiceExperience _voice;
|
||||
private VoiceServiceRequest _activation;
|
||||
private VoiceServiceRequestEvents _events = new VoiceServiceRequestEvents();
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (!_voice) _voice = FindObjectOfType<AppVoiceExperience>();
|
||||
|
||||
_events.OnCancel.AddListener(HandleCancel);
|
||||
_events.OnComplete.AddListener(HandleComplete);
|
||||
_events.OnFailed.AddListener(HandleFailed);
|
||||
_events.OnInit.AddListener(HandleInit);
|
||||
_events.OnSend.AddListener(HandleSend);
|
||||
_events.OnSuccess.AddListener(HandleSuccess);
|
||||
_events.OnAudioActivation.AddListener(HandleAudioActivation);
|
||||
_events.OnAudioDeactivation.AddListener(HandleAudioDeactivation);
|
||||
_events.OnPartialTranscription.AddListener(HandlePartialTranscription);
|
||||
_events.OnFullTranscription.AddListener(HandleFullTranscription);
|
||||
_events.OnStateChange.AddListener(HandleStateChange);
|
||||
_events.OnStartListening.AddListener(HandleStartListening);
|
||||
_events.OnStopListening.AddListener(HandleStopListening);
|
||||
_events.OnDownloadProgressChange.AddListener(HandleDownloadProgressChange);
|
||||
_events.OnUploadProgressChange.AddListener(HandleUploadProgressChange);
|
||||
_events.OnAudioInputStateChange.AddListener(HandleAudioInputStateChange);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
_events.OnCancel.RemoveListener(HandleCancel);
|
||||
_events.OnComplete.RemoveListener(HandleComplete);
|
||||
_events.OnFailed.RemoveListener(HandleFailed);
|
||||
_events.OnInit.RemoveListener(HandleInit);
|
||||
_events.OnSend.RemoveListener(HandleSend);
|
||||
_events.OnSuccess.RemoveListener(HandleSuccess);
|
||||
_events.OnAudioActivation.RemoveListener(HandleAudioActivation);
|
||||
_events.OnAudioDeactivation.RemoveListener(HandleAudioDeactivation);
|
||||
_events.OnFullTranscription.RemoveListener(HandleFullTranscription);
|
||||
_events.OnPartialTranscription.RemoveListener(HandlePartialTranscription);
|
||||
_events.OnStateChange.RemoveListener(HandleStateChange);
|
||||
_events.OnStartListening.RemoveListener(HandleStartListening);
|
||||
_events.OnStopListening.RemoveListener(HandleStopListening);
|
||||
_events.OnDownloadProgressChange.RemoveListener(HandleDownloadProgressChange);
|
||||
_events.OnUploadProgressChange.RemoveListener(HandleUploadProgressChange);
|
||||
_events.OnAudioInputStateChange.RemoveListener(HandleAudioInputStateChange);
|
||||
}
|
||||
|
||||
private void HandleAudioInputStateChange(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnAudioInputStateChange", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleUploadProgressChange(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnUploadProgressChange", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleDownloadProgressChange(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnDownloadProgressChange", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleStopListening(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnStopListening", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleStartListening(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnStartListening", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleStateChange(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnStateChange", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleFullTranscription(string transcription)
|
||||
{
|
||||
SendMessage("OnFullTranscription", transcription, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandlePartialTranscription(string transcription)
|
||||
{
|
||||
SendMessage("OnPartialTranscription", transcription, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleAudioDeactivation(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnAudioDeactivation", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleAudioActivation(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnAudioActivation", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleSuccess(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnSuccess", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleSend(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnSend", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleInit(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnInit", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleFailed(VoiceServiceRequest request)
|
||||
{
|
||||
SendMessage("OnFailed", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleComplete(VoiceServiceRequest request)
|
||||
{
|
||||
_voiceEvents?.OnComplete?.Invoke(request);
|
||||
SendMessage("OnComplete", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
private void HandleCancel(VoiceServiceRequest request)
|
||||
{
|
||||
_voiceEvents?.OnCanceled?.Invoke("");
|
||||
SendMessage("OnCancel", request, SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
_activation = _voice.Activate(new WitRequestOptions(), _events);
|
||||
}
|
||||
|
||||
public void Deactivate()
|
||||
{
|
||||
_activation.Cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fccf0c254a8b42d1bc0cd66655cda486
|
||||
timeCreated: 1678764830
|
||||
Reference in New Issue
Block a user