using System;
using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class OVRLipSyncContext : OVRLipSyncContextBase
{
	public override void Init()
	{
		base.Init();
	}

	private void Update()
	{
		this.micSensitivity = GameMain.Instance.LipSyncMgr.Variable.MicSensitivity;
		this.audioMute = GameMain.Instance.LipSyncMgr.Variable.Mute;
		this.micVolume = GameMain.Instance.LipSyncMgr.Variable.MicVolume;
	}

	private void OnAudioFilterRead(float[] data, int channels)
	{
		if (OVRLipSync.IsInitialized() != OVRLipSync.Result.Success || this.audioSource == null)
		{
			return;
		}
		for (int i = 0; i < data.Length; i++)
		{
			data[i] *= this.micSensitivity;
		}
		lock (this)
		{
			if (base.Context != 0u)
			{
				OVRLipSync.Flags flags = OVRLipSync.Flags.None;
				if (this.delayCompensate)
				{
					flags |= OVRLipSync.Flags.DelayCompensateAudio;
				}
				OVRLipSync.Frame frame = base.Frame;
				OVRLipSync.ProcessFrameInterleaved(base.Context, data, flags, frame);
			}
		}
		if (this.audioMute)
		{
			for (int j = 0; j < data.Length; j++)
			{
				data[j] *= 0f;
			}
		}
		else
		{
			for (int k = 0; k < data.Length; k++)
			{
				data[k] *= this.micVolume;
			}
		}
	}

	[SerializeField]
	private float micSensitivity = 10f;

	[SerializeField]
	private bool audioMute;

	[SerializeField]
	private float micVolume;

	[SerializeField]
	[Header("遅延対応")]
	private bool delayCompensate = true;
}
