Exemplo n.º 1
0
        public WasapiProvider()
        {
            // Init Pipes
            this.recordingStream   = new PipeStream();
            this.LoopbackMp3Stream = new PipeStream();
            this.LoopbackL16Stream = new PipeStream();

            // Init Wave Processor thread
            Thread waveProcessorThread = new Thread(new ThreadStart(this.waveProcessor))
            {
                Priority = ThreadPriority.Highest
            };

            // Init Wasapi Capture
            this.loopbackWaveIn = new WasapiLoopbackCapture();
            this.loopbackWaveIn.DataAvailable += new EventHandler <WaveInEventArgs>(this.loopbackWaveIn_DataAvailable);

            // Init Raw Wav (16bit)
            WaveStream rawWave16b = new Wave32To16Stream(new RawSourceWaveStream(this.recordingStream, NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(this.loopbackWaveIn.WaveFormat.SampleRate, this.loopbackWaveIn.WaveFormat.Channels)));

            // Convert Raw Wav to PCM with audio format in settings
            var audioFormat = AudioSettings.GetAudioFormat();

            if (rawWave16b.WaveFormat.SampleRate == audioFormat.SampleRate &&
                rawWave16b.WaveFormat.BitsPerSample == audioFormat.BitsPerSample &&
                rawWave16b.WaveFormat.Channels == audioFormat.Channels)
            {
                // No conversion !
                this.rawConvertedStream = null;
                this.pcmStream          = WaveFormatConversionStream.CreatePcmStream(rawWave16b);
            }
            else
            {
                // Resampler
                this.rawConvertedStream = new WaveProviderToWaveStream(new MediaFoundationResampler(rawWave16b, audioFormat));
                this.pcmStream          = WaveFormatConversionStream.CreatePcmStream(rawConvertedStream);
            }

            // Init MP3 Encoder
            this.mp3Writer = new LameMP3FileWriter(this.LoopbackMp3Stream, pcmStream.WaveFormat, AudioSettings.GetMP3Bitrate());

            // Start Recording
            this.loopbackWaveIn.StartRecording();

            // Start Wave Processor thread
            waveProcessorThread.Start();
        }
Exemplo n.º 2
0
        public WasapiProvider()
        {
            // Init Pipes
            this.recordingStream   = new PipeStream();
            this.LoopbackMp3Stream = new PipeStream();
            this.LoopbackL16Stream = new PipeStream();

            // Init Wave Processor thread
            Thread waveProcessorThread = new Thread(new ThreadStart(this.waveProcessor))
            {
                Priority = ThreadPriority.Highest
            };

            // Init capture audio device
            MMDevice captureDevice   = null;
            var      enumerator      = new MMDeviceEnumerator();
            string   captureDeviceID = SWYH.Properties.Settings.Default.AudioDevice;

            if (captureDeviceID != "")
            {
                foreach (var wasapi in enumerator.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active))
                {
                    if (wasapi.ID == captureDeviceID)
                    {
                        captureDevice = wasapi;
                    }
                }
            }
            if (captureDevice == null)
            {
                captureDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
            }

            // Init Wasapi Capture
            if (captureDevice.DataFlow == DataFlow.Render)
            {
                this.loopbackWaveIn = new WasapiLoopbackCapture(captureDevice);
            }
            else
            {
                this.loopbackWaveIn = new WasapiCapture(captureDevice);
            }
            this.loopbackWaveIn.DataAvailable += new EventHandler <WaveInEventArgs>(this.loopbackWaveIn_DataAvailable);

            // Init Raw Wav (16bit)
            WaveStream rawWave16b = new Wave32To16Stream(new RawSourceWaveStream(this.recordingStream, NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(this.loopbackWaveIn.WaveFormat.SampleRate, this.loopbackWaveIn.WaveFormat.Channels)));

            // Convert Raw Wav to PCM with audio format in settings
            var audioFormat = AudioSettings.GetAudioFormat();

            if (rawWave16b.WaveFormat.SampleRate == audioFormat.SampleRate &&
                rawWave16b.WaveFormat.BitsPerSample == audioFormat.BitsPerSample &&
                rawWave16b.WaveFormat.Channels == audioFormat.Channels)
            {
                // No conversion !
                this.rawConvertedStream = null;
                this.pcmStream          = WaveFormatConversionStream.CreatePcmStream(rawWave16b);
            }
            else
            {
                // Resampler
                this.rawConvertedStream = new WaveProviderToWaveStream(new MediaFoundationResampler(rawWave16b, audioFormat));
                this.pcmStream          = WaveFormatConversionStream.CreatePcmStream(rawConvertedStream);
            }

            // Init MP3 Encoder
            this.mp3Writer = new LameMP3FileWriter(this.LoopbackMp3Stream, pcmStream.WaveFormat, AudioSettings.GetMP3Bitrate());

            // Start Recording
            this.loopbackWaveIn.StartRecording();

            // Start Wave Processor thread
            waveProcessorThread.Start();
        }