public override void Init() { if (_hasInit) { return; } base.Init(); _spectrumAnalyzer = GameObject.Find(Constants.AbjectAudioInputs).GetComponent <SpectrumAnalyzer>(); _audioLevelTracker = GameObject.Find(Constants.AbjectAudioInputs).GetComponent <AudioLevelTracker>(); _mainIcon = GameObject.Find("MainIcon").GetComponent <SpriteRenderer>(); _singleTapSpawn = GameObject.Find("SingleTapSpawn").transform; _customTapSpawn = GameObject.Find("CustomTapSpawn").transform; _heldSpawn = GameObject.Find("HeldSpawn").transform; _timeHeldSpawn = GameObject.Find("TimeHeldSpawn").transform; //PlayerPrefs _lastSavedDeviceName = PlayerPrefHelper.GetLastSavedDeviceDefault(); _currentChannel = PlayerPrefHelper.GetCurrentChannel(); HzOffset = PlayerPrefHelper.GetHzOffset(); RequiredFrames = PlayerPrefHelper.GetRequiredFrames(); PeaksPriority = PlayerPrefHelper.GetPeaksPriority(); HeldReset = PlayerPrefHelper.GetHeldReset(); SingleTapReset = PlayerPrefHelper.GetSingleTapReset(); _levelDynamicRange = PlayerPrefHelper.GetLevelDynamicRange(); _levelGain = PlayerPrefHelper.GetLevelGain(); _spectrumDynamicRange = PlayerPrefHelper.GetSpectrumDynamicRange(); _spectrumGain = PlayerPrefHelper.GetSpectrumGain(); SpectrumThreshold = PlayerPrefHelper.GetSpectrumThreshold(); //FieldsData _idData = Helper.GetFieldData("Id"); _channelData = Helper.GetFieldData("Channel"); _hzOffsetData = Helper.GetFieldData("HzOffset"); _requiredFramesData = Helper.GetFieldData("RequiredFrames"); _peaksPriorityData = Helper.GetFieldData("PeaksPriority"); _heldResetData = Helper.GetFieldData("HeldReset"); _singleTapResetData = Helper.GetFieldData("TapReset"); _levelDynamicRangeData = Helper.GetFieldData("LevelDynamicRange"); _levelGainData = Helper.GetFieldData("LevelGain"); _spectrumDynamicRangeData = Helper.GetFieldData("SpectrumDynamicRange"); _spectrumGainData = Helper.GetFieldData("SpectrumGain"); _spectrumThresholdData = Helper.GetFieldData("SpectrumThreshold"); Devices = AudioSystem.InputDevices; _hasInit = true; }
public bool Draw(AudioLevelTracker tracker, float heldReset, float singleTapReset) { if (!_hasInit) { Init(); } const float kMeterRange = 60; var amp = 1 + tracker.inputLevel / kMeterRange; var peak = 1 - tracker.currentGain / kMeterRange; var dr = tracker.dynamicRange / kMeterRange; var drStart = peak - dr; DrawRect(drStart, peak, _dynamicRange); var y1 = Mathf.Min(amp, drStart); var y2 = Mathf.Min(peak, amp); DrawRect(0, y1, _levelLower); DrawRect(y1, y2, _levelInside); DrawRect(y2, amp, _levelOver); //var y3 = peak + dr * (tracker.normalizedLevel - 1); var held = (heldReset / 100) * dr; var singleTap = (singleTapReset / 100) * dr; DrawRect(drStart + held, drStart + held, _levelHeldReset, constantsScale: true); DrawRect(drStart + singleTap, drStart + singleTap, _levelSingleTapReset, constantsScale: true); if (y2 > y1) { return(y2 < drStart + held); } else { return(y1 < drStart + held); } }
// Draw a level meter with a given AudioLevelTracker instance. public static void DrawMeter(AudioLevelTracker tracker) { var rect = GUILayoutUtility.GetRect(128, 10); const float kMeterRange = 60; var amp = 1 + tracker.inputLevel / kMeterRange; var peak = 1 - tracker.currentGain / kMeterRange; var dr = tracker.dynamicRange / kMeterRange; // Background DrawRect(0, 0, 1, 1, rect, Styles.Background); // Dynamic range indicator DrawRect(peak - dr, 0, peak, 1, rect, Styles.Gray); // Amplitude bar var x1 = Mathf.Min(amp, peak - dr); var x2 = Mathf.Min(peak, amp); DrawRect(0, 0, x1, 1, rect, Styles.Green1); // Lower than floor DrawRect(x1, 0, x2, 1, rect, Styles.Green2); // Inside the range DrawRect(x2, 0, amp, 1, rect, Styles.Red); // Higher than nominal // Output level bar var x3 = peak + dr * (tracker.normalizedLevel - 1); DrawRect(x3 - 3 / rect.width, 0, x3, 1, rect, Color.green); // Label: -60dB var pm60 = new Vector2(rect.xMin + 1, rect.yMax - 8); Handles.Label(pm60, "-60dB", EditorStyles.miniLabel); // Label: 0dB var p0 = new Vector2(rect.xMin + rect.width - 22, rect.yMax - 8); Handles.Label(p0, "0dB", EditorStyles.miniLabel); }