/// <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)); } }
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(), }); }
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 }); }
private static void CheckRecordingDevice(RecordingConfig recordingConfig) { int deviceCount = WaveIn.DeviceCount; if (deviceCount == 0) { throw new NoDevicesException(); } if (recordingConfig.RecordingDevice >= deviceCount) { recordingConfig.RecordingDevice = 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; } }
/// <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 }); } }