/*
* 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.Events;
using Meta.WitAi.Events.UnityEventListeners;
using Meta.WitAi.Interfaces;
using UnityEngine.Events;
namespace Meta.WitAi.ServiceReferences
{
///
/// Finds all audio event listeners in the scene and subscribes to them.
/// This is good for creating generic attention systems that are shown for
/// the same way for any voice based service active in the scene.
///
//[Tooltip("Finds all voice based services and listens for changes in their audio input state.")]
public class CombinedAudioEventReference : AudioInputServiceReference, IAudioInputEvents
{
public override IAudioInputEvents AudioEvents => this;
private WitMicLevelChangedEvent _onMicAudioLevelChanged = new WitMicLevelChangedEvent();
private UnityEvent _onMicStartedListening = new UnityEvent();
private UnityEvent _onMicStoppedListening = new UnityEvent();
private AudioEventListener[] _sourceListeners;
private void Awake()
{
#if UNITY_2020_1_OR_NEWER
_sourceListeners = FindObjectsOfType(true);
#else
_sourceListeners = FindObjectsOfType();
#endif
}
private void OnEnable()
{
foreach (var listener in _sourceListeners)
{
listener.OnMicAudioLevelChanged.AddListener(OnMicAudioLevelChanged.Invoke);
listener.OnMicStartedListening.AddListener(OnMicStartedListening.Invoke);
listener.OnMicStoppedListening.AddListener(OnMicStoppedListening.Invoke);
}
}
private void OnDisable()
{
foreach (var listener in _sourceListeners)
{
listener.OnMicAudioLevelChanged.RemoveListener(OnMicAudioLevelChanged.Invoke);
listener.OnMicStartedListening.RemoveListener(OnMicStartedListening.Invoke);
listener.OnMicStoppedListening.RemoveListener(OnMicStoppedListening.Invoke);
}
}
public WitMicLevelChangedEvent OnMicAudioLevelChanged => _onMicAudioLevelChanged;
public UnityEvent OnMicStartedListening => _onMicStartedListening;
public UnityEvent OnMicStoppedListening => _onMicStoppedListening;
}
}