/*
* 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)
{
}
}
}