Wit.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. * Copyright (c) Meta Platforms, Inc. and affiliates.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the license found in the
  6. * LICENSE file in the root directory of this source tree.
  7. */
  8. using Meta.WitAi.Configuration;
  9. using Meta.WitAi.Data;
  10. using Meta.WitAi.Interfaces;
  11. using Meta.WitAi.Requests;
  12. using UnityEngine;
  13. namespace Meta.WitAi
  14. {
  15. public class Wit : VoiceService, IWitRuntimeConfigProvider
  16. {
  17. [SerializeField] private WitRuntimeConfiguration witRuntimeConfiguration;
  18. public WitRuntimeConfiguration RuntimeConfiguration
  19. {
  20. get => witRuntimeConfiguration;
  21. set => witRuntimeConfiguration = value;
  22. }
  23. private WitService witService;
  24. #region Voice Service Properties
  25. public override bool Active => base.Active || (null != witService && witService.Active);
  26. public override bool IsRequestActive => base.IsRequestActive || (null != witService && witService.IsRequestActive);
  27. public override ITranscriptionProvider TranscriptionProvider
  28. {
  29. get => witService.TranscriptionProvider;
  30. set => witService.TranscriptionProvider = value;
  31. }
  32. public override bool MicActive => null != witService && witService.MicActive;
  33. protected override bool ShouldSendMicData => witRuntimeConfiguration.sendAudioToWit ||
  34. null == TranscriptionProvider;
  35. #endregion
  36. #region Voice Service Methods
  37. protected override string GetSendError()
  38. {
  39. if (!RuntimeConfiguration?.witConfiguration)
  40. {
  41. return $"Your {GetType().Name} \"{gameObject.name}\" does not have a wit configuration assigned. Voice interactions are not possible without the configuration.";
  42. }
  43. if (string.IsNullOrEmpty(RuntimeConfiguration.witConfiguration.GetClientAccessToken()))
  44. {
  45. return $"The configuration \"{RuntimeConfiguration.witConfiguration.name}\" is not setup with a valid client access token. Voice interactions are not possible without the token.";
  46. }
  47. return base.GetSendError();
  48. }
  49. protected override string GetActivateAudioError()
  50. {
  51. if (!AudioBuffer.Instance.IsInputAvailable)
  52. {
  53. return "No Microphone(s)/recording devices found. You will be unable to capture audio on this device.";
  54. }
  55. return string.Empty;
  56. }
  57. public override VoiceServiceRequest Activate(string text, WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
  58. {
  59. VoiceServiceRequest request = witService.Activate(text, requestOptions, requestEvents);
  60. OnTextRequestCreated(request);
  61. return request;
  62. }
  63. public override VoiceServiceRequest Activate(WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
  64. {
  65. VoiceServiceRequest request = witService.Activate(requestOptions, requestEvents);
  66. OnAudioRequestCreated(request);
  67. return request;
  68. }
  69. public override VoiceServiceRequest ActivateImmediately(WitRequestOptions requestOptions, VoiceServiceRequestEvents requestEvents)
  70. {
  71. VoiceServiceRequest request = witService.ActivateImmediately(requestOptions, requestEvents);
  72. OnAudioRequestCreated(request);
  73. return request;
  74. }
  75. public override void Deactivate()
  76. {
  77. witService.Deactivate();
  78. }
  79. public override void DeactivateAndAbortRequest()
  80. {
  81. witService.DeactivateAndAbortRequest();
  82. }
  83. #endregion
  84. protected override void Awake()
  85. {
  86. base.Awake();
  87. // WitService is 1:1 tied to a VoiceService. In the event there
  88. // are multiple voice services on a game object this will ensure
  89. // that this component has its own dedicated WitService
  90. witService = gameObject.AddComponent<WitService>();
  91. witService.VoiceEventProvider = this;
  92. witService.TelemetryEventsProvider = this;
  93. witService.ConfigurationProvider = this;
  94. }
  95. }
  96. }