コード例 #1
0
        private void ProcessAwaitInput(SpectrumProcessor sink)
        {
            CurrentActivityDescription = "Awaiting signal...";

            var allInputSingnalsPresent = _testSignalPresentMap.Values.All(v => v == true);

            if (!allInputSingnalsPresent)
            {
                var expectedLoopbackDelay = Math.Max(
                    (AppSettings.Current.Device.InputDevice.LatencyMilliseconds + AppSettings.Current.Device.OutputDevice.LatencyMilliseconds),
                    2.0 * 1000.0 * Settings.Fft.Value.WindowSize / AppSettings.Current.Device.SampleRate
                    );

                if (Elapsed.TotalMilliseconds > expectedLoopbackDelay)
                {
                    var channel = Sinks.First(s => s.Value == sink).Key;
                    _testSignalPresentMap[channel] = CheckSignalPresent(sink.Data);

                    if (!_testSignalPresentMap[channel])
                    {
                        var channels = _testSignalPresentMap.Where(m => m.Value == false).Select(m => m.Key.ToString()).OrderBy(k => k);

                        var message = $"No test signal detected in channels {channels.Aggregate((a, b) => (a + ", " + b))}.";
                        OnError(new Exception(message));
                        Stop(true);

                        return;
                    }


                    _inputSignalReceivedAt = DateTime.Now;
                    if (Settings is IWarmable warmable)
                    {
                        _phase = Phase.WarmUp;
                    }
                    else
                    {
                        SetGatheringPhase(sink);
                    }

                    sink.Data.Reset();
                }
            }
        }