/* * 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 UnityEngine; using Meta.WitAi.TTS.Data; using Meta.WitAi.TTS.Utilities; namespace Meta.Voice.Samples.TTSVoices { /// /// A demo script that provides access to a TTSSpeaker /// and overrides all TTSSpeaker callback events. /// public class TTSSpeakerObserver : MonoBehaviour { [Header("Speaker Settings")] [SerializeField] [Tooltip("TTSSpeaker being observed, if left empty it will grab the speaker from the GameObject")] private TTSSpeaker _speaker; public TTSSpeaker Speaker => _speaker; /// /// Obtains speaker if not set /// protected virtual void Awake() { if (_speaker == null) { _speaker = gameObject.GetComponentInChildren(); } } /// /// On enable, add all callbacks /// protected virtual void OnEnable() { if (_speaker == null) { return; } _speaker.Events.OnPlaybackQueueBegin.AddListener(OnPlaybackQueueBegin); _speaker.Events.OnPlaybackQueueComplete.AddListener(OnPlaybackQueueComplete); _speaker.Events.OnLoadBegin.AddListener(OnLoadBegin); _speaker.Events.OnLoadAbort.AddListener(OnLoadAbort); _speaker.Events.OnLoadFailed.AddListener(OnLoadFailed); _speaker.Events.OnLoadSuccess.AddListener(OnLoadSuccess); _speaker.Events.OnPlaybackReady.AddListener(OnPlaybackReady); _speaker.Events.OnPlaybackStart.AddListener(OnPlaybackStart); _speaker.Events.OnPlaybackCancelled.AddListener(OnPlaybackCancelled); _speaker.Events.OnPlaybackComplete.AddListener(OnPlaybackComplete); } /// /// On disable, remove all callbacks /// protected virtual void OnDisable() { if (_speaker == null) { return; } _speaker.Events.OnPlaybackQueueBegin.RemoveListener(OnPlaybackQueueBegin); _speaker.Events.OnPlaybackQueueComplete.RemoveListener(OnPlaybackQueueComplete); _speaker.Events.OnLoadBegin.RemoveListener(OnLoadBegin); _speaker.Events.OnLoadAbort.RemoveListener(OnLoadAbort); _speaker.Events.OnLoadFailed.RemoveListener(OnLoadFailed); _speaker.Events.OnLoadSuccess.RemoveListener(OnLoadSuccess); _speaker.Events.OnPlaybackReady.RemoveListener(OnPlaybackReady); _speaker.Events.OnPlaybackStart.RemoveListener(OnPlaybackStart); _speaker.Events.OnPlaybackCancelled.RemoveListener(OnPlaybackCancelled); _speaker.Events.OnPlaybackComplete.RemoveListener(OnPlaybackComplete); } /// /// Callback for queue begin /// protected virtual void OnPlaybackQueueBegin() { } /// /// Callback for queue completion /// protected virtual void OnPlaybackQueueComplete() { } /// /// Callback for load begin /// protected virtual void OnLoadBegin(TTSSpeaker speaker, TTSClipData clipData) { } /// /// Callback for load cancelation /// protected virtual void OnLoadAbort(TTSSpeaker speaker, TTSClipData clipData) { } /// /// Callback for load error /// protected virtual void OnLoadFailed(TTSSpeaker speaker, TTSClipData clipData, string error) { } /// /// Callback for load success /// protected virtual void OnLoadSuccess(TTSSpeaker speaker, TTSClipData clipData) { } /// /// Callback for playback is ready for a clip /// protected virtual void OnPlaybackReady(TTSSpeaker speaker, TTSClipData clipData) { } /// /// Callback for playback for a clip has begun /// protected virtual void OnPlaybackStart(TTSSpeaker speaker, TTSClipData clipData) { } /// /// Callback for playback for a clip has been canceled /// protected virtual void OnPlaybackCancelled(TTSSpeaker speaker, TTSClipData clipData, string reason) { } /// /// Callback for playback completion /// protected virtual void OnPlaybackComplete(TTSSpeaker speaker, TTSClipData clipData) { } } }