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; } } }