Exemplo n.º 1
0
        public static CaptureSession FromAudioInput(MMDevice mmDevice)
        {
            var recorder = new WasapiCapture(mmDevice);

            var session = new CaptureSession(mmDevice, recorder);

            recorder.DataAvailable += session.DataAvailableEvent;
            recorder.StartRecording();
            return(session);
        }
        private void UpdateSources()
        {
            _logger.LogInformation("Updating sources.");

            //Do it simple for now, clear and dispose all:
            foreach (var sessionsValue in _sessions)
            {
                sessionsValue.Dispose();
            }

            _sessions.Clear();

            //Then re-add all:
            var sources = _appSettings.CurrentValue.Devices ?? Array.Empty <AppSettings.Capture.Device>();

            foreach (var source in sources)
            {
                var mmDevice = GetDevice(source);

                if (mmDevice is null)
                {
                    var meterValues = new MeterValues(null, source);
                    _sessions.Add(meterValues);
                }
                else
                {
                    var captureSession = mmDevice.DataFlow == DataFlow.Render
                        ? CaptureSession.FromAudioOutput(mmDevice)
                        : CaptureSession.FromAudioInput(mmDevice);

                    var meterValues = new MeterValues(captureSession, source);
                    _sessions.Add(meterValues);
                }
            }

            _dirtySources = false;
        }