public void StopRecordingVoiceStream()
        {
            if (fileRecordingStream is null)
            {
                return;
            }

            fileRecordingStream.StopRecording();

            MediaFoundationApi.Startup();

            MediaFoundationEncoder.EncodeToMp3(
                fileRecordingStream.ApplyMicrophoneEffects(botConfig.MicConfiguration, new Effects.NoEffect()).ToWaveProvider(),
                fileRecordingPath);

            MediaFoundationApi.Shutdown();

            fileRecordingStream.Dispose();
            fileRecordingStream = null;
        }
        public void ResetVoiceStream()
        {
            if (targetOutputDevice is null)
            {
                //Set up device
#if DEBUG && USE_STANDARD_DEBUG_OUTPUT
                targetOutputDevice = GetDefaultOutputDevice();
#else
                targetOutputDevice = GetOutputDevice(botConfig.VoiceOutputDevice);
#endif
                if (targetOutputDevice is null)
                {
                    targetOutputDevice = GetDefaultOutputDevice();

                    if (targetOutputDevice is null)
                    {
                        //Failed to get a device
                        communication.SendErrorMessage("Unable to initialize voice output device.");
                        return;
                    }
                    else
                    {
                        communication.SendWarningMessage($"Audio output device {botConfig.VoiceOutputDevice} not found. " +
                                                         $"Fell back to default audio output device: {targetOutputDevice.DeviceFriendlyName}");
                    }
                }
            }

            if (targetInputDevice is null)
            {
                //Set up device
                targetInputDevice = GetInputDevice(botConfig.VoiceInputDevice);
                if (targetInputDevice is null)
                {
                    targetInputDevice = GetDefaultInputDevice();

                    if (targetInputDevice is null)
                    {
                        //Failed to get a device
                        communication.SendErrorMessage("Unable to initialize voice input device.");
                        return;
                    }
                    else
                    {
                        communication.SendWarningMessage($"Audio input device {botConfig.VoiceInputDevice} not found. " +
                                                         $"Fell back to default audio input device: {targetInputDevice.DeviceFriendlyName}");
                    }
                }
            }

            CleanUpActiveStream();

            if (botConfig.MicConfiguration.Enabled)
            {
                outputDevice = new WasapiOut(targetOutputDevice, AudioClientShareMode.Shared, true, 10);

                recordingStream = new BufferedWasapiQueuer(targetInputDevice, 1000);
                outputDevice.Init(recordingStream.ApplyMicrophoneEffects(botConfig.MicConfiguration, currentEffect));
                outputDevice.Play();
            }
        }