Exemplo n.º 1
0
        /// <summary>
        /// Starts recording
        /// </summary>
        /// <param name="recordingConfig">Recording configuration</param>
        public void Start(RecordingConfig recordingConfig)
        {
            if (_recordingStatus == RecordingStatus.NotRecording)
            {
                InitAggregator(recordingConfig.SampleRate);
                CheckRecordingDevice(recordingConfig);
                InitFader(recordingConfig.SampleRate);

                _waveSource = new WaveIn
                {
                    WaveFormat   = new WaveFormat(recordingConfig.SampleRate, recordingConfig.ChannelCount),
                    DeviceNumber = recordingConfig.RecordingDevice,
                };

                _waveSource.DataAvailable    += WaveSourceDataAvailableHandler;
                _waveSource.RecordingStopped += WaveSourceRecordingStoppedHandler;

                _mp3Writer = new LameMP3FileWriter(
                    recordingConfig.DestFilePath,
                    _waveSource.WaveFormat,
                    recordingConfig.Mp3BitRate,
                    CreateTag(recordingConfig));

                _waveSource.StartRecording();
                OnRecordingStatusChangeEvent(new RecordingStatusChangeEventArgs(RecordingStatus.Recording));
            }
        }
Exemplo n.º 2
0
 private static ID3TagData CreateTag(RecordingConfig recordingConfig)
 {
     // tag is embedded as MP3 metadata
     return(new()
     {
         Title = recordingConfig.TrackTitle,
         Album = recordingConfig.AlbumName,
         Track = recordingConfig.TrackNumber.ToString(),
         Genre = recordingConfig.Genre,
         Year = recordingConfig.RecordingDate.Year.ToString(),
     });
 }
Exemplo n.º 3
0
 private static ID3TagData CreateTag(RecordingConfig recordingConfig)
 {
     // tag is embeded as MP3 metadata
     return(new ID3TagData
     {
         Title = recordingConfig.TrackTitle,
         Album = recordingConfig.AlbumName,
         Track = recordingConfig.TrackNumber.ToString(),
         Genre = recordingConfig.Genre,
         Year = recordingConfig.RecordingDate.Year.ToString(),
         UserDefinedTags = new string[] { }  // fix bug in naudio.lame
     });
 }
Exemplo n.º 4
0
        private static void CheckRecordingDevice(RecordingConfig recordingConfig)
        {
            int deviceCount = WaveIn.DeviceCount;

            if (deviceCount == 0)
            {
                throw new NoDevicesException();
            }

            if (recordingConfig.RecordingDevice >= deviceCount)
            {
                recordingConfig.RecordingDevice = 0;
            }
        }
Exemplo n.º 5
0
        private static void CheckRecordingDevice(RecordingConfig recordingConfig)
        {
            var deviceCount = WaveIn.DeviceCount;

            if (deviceCount == 0)
            {
                throw new NoDevicesException();
            }

            if (!recordingConfig.UseLoopbackCapture && recordingConfig.RecordingDevice >= deviceCount)
            {
                recordingConfig.RecordingDevice = 0;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Starts recording.
        /// </summary>
        /// <param name="recordingConfig">Recording configuration.</param>
        public void Start(RecordingConfig recordingConfig)
        {
            if (_recordingStatus == RecordingStatus.NotRecording)
            {
                CheckRecordingDevice(recordingConfig);

                if (recordingConfig.UseLoopbackCapture)
                {
                    _waveSource = new WasapiLoopbackCapture();
                    ConfigureSilenceOut();
                }
                else
                {
                    _waveSource = new WaveIn
                    {
                        WaveFormat   = new WaveFormat(recordingConfig.SampleRate, recordingConfig.ChannelCount),
                        DeviceNumber = recordingConfig.RecordingDevice,
                    };
                }

                InitAggregator(_waveSource.WaveFormat.SampleRate);
                InitFader(_waveSource.WaveFormat.SampleRate);

                _waveSource.DataAvailable    += WaveSourceDataAvailableHandler;
                _waveSource.RecordingStopped += WaveSourceRecordingStoppedHandler;

                _mp3Writer = new LameMP3FileWriter(
                    recordingConfig.DestFilePath,
                    _waveSource.WaveFormat,
                    recordingConfig.Mp3BitRate,
                    CreateTag(recordingConfig));

                _waveSource.StartRecording();

                _tempRecordingFilePath  = recordingConfig.DestFilePath;
                _finalRecordingFilePath = recordingConfig.FinalFilePath;

                OnRecordingStatusChangeEvent(new RecordingStatusChangeEventArgs(RecordingStatus.Recording)
                {
                    TempRecordingPath  = _tempRecordingFilePath,
                    FinalRecordingPath = _finalRecordingFilePath
                });
            }
        }