private async Task RipTrack(ICdDrive cdDrive, Track track, TrackIdentification trackIdentification, CancellationToken token) { var currentTrackNumber = track.TrackNumber; using (var reader = new TrackReader(cdDrive)) { var settings = _settings.Get(); using (var lame = new LameMp3Encoder(new EncoderSettings { Track = trackIdentification, Mp3Settings = new Mp3Settings { Bitrate = settings.BitRate, Type = settings.BitRateType }, Output = new OutputLocationBuilder(settings.MusicCollectionRoot, settings.FileNameMask) })) { reader.Progress += (read, bytes) => { var percentageComplete = Math.Round(((double)read / (double)bytes) * 100d, 0); _tracker.RippingProgress(currentTrackNumber, percentageComplete); }; await reader.ReadTrack(track, lame.Write, token); } } }
public void Dispose() { if (_drive != null) { if (_isLocked) { _isLocked = !_drive.UnLock().Result; } } _drive = null; }
public TrackReader(ICdDrive drive) { _drive = drive; _isLocked = drive.Lock().Result; }