ZoeRobotIngles/Assets/Scripts/Conversation/CheckVolumeChanges.cs

108 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CheckVolumeChanges : MonoBehaviour
{
public float testSound;
public static float MicLoudness;
private string _device;
private AudioClip _clipRecord;
private int _sampleWindow = 128;
private bool _isInitialized;
private float levelmic;
private void Awake()
{
StartCoroutine(checklevel());
}
void InitMic()
{
if (_device == null)
{
_device = Microphone.devices[0];
_clipRecord = Microphone.Start(_device, true, 999, 44100);
Debug.Log(_clipRecord);
}
}
void StopMicrophone()
{
Microphone.End(_device);
}
float LevelMax()
{
float levelMax = 0;
float[] waveData = new float[_sampleWindow];
int micPosition = Microphone.GetPosition(null) - (_sampleWindow + 1);
if (micPosition < 0)
{
return 0;
}
_clipRecord.GetData(waveData, micPosition);
for (int i = 0; i < _sampleWindow; ++i)
{
float wavePeak = waveData[i] * waveData[i];
if (levelMax < wavePeak)
{
levelMax = wavePeak;
}
}
return levelMax;
}
void Update()
{
MicLoudness = LevelMax();
testSound = MicLoudness;
levelmic += testSound;
}
IEnumerator checklevel() {
while (true)
{
yield return new WaitForSecondsRealtime(0.5f);
levelmic = 0;
}
}
void OnEnable()
{
InitMic();
_isInitialized = true;
}
void OnDisable()
{
StopMicrophone();
}
void OnDestory()
{
StopMicrophone();
}
void OnApplicationFocus(bool focus)
{
if (focus)
{
if (!_isInitialized)
{
InitMic();
_isInitialized = true;
}
}
if (!focus)
{
StopMicrophone();
_isInitialized = false;
}
}
}