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); } } }
private string CreateFileName(TrackIdentification track) { var replacements = new Dictionary <string, string> { { "{title}", track.Title }, { "{artist}", track.Artist }, { "{genre}", track.Genre }, { "{tracknumber}", track.TrackNumber.ToString("00") }, { "{albumartist}", track.AlbumArtist }, { "{numberoftracks}", track.TotalNumberOfTracks.ToString("00") }, { "{albumtitle}", track.AlbumTitle }, { "{year}", track.Year } }; foreach (var character in Path.GetInvalidFileNameChars()) { if (character != Path.DirectorySeparatorChar && character != Path.AltDirectorySeparatorChar) { replacements.Add(character.ToString(), string.Empty); } } var fileName = CaseInsentiveReplace(FileNameMask, replacements); return(Path.Combine(BaseDirectory, fileName)); }
public OutputLocation PrepareOutput(TrackIdentification track) { var fileName = CreateFileName(track); var directory = CreateDirectory(fileName); var coverFile = CreateCoverFile(directory, track); return(new OutputLocation(fileName, coverFile)); }
private void AddTrackNumber(StringBuilder builder, TrackIdentification track) { if (track.TrackNumber > 0 && track.TotalNumberOfTracks > 0) { AddSwitch(builder, "--tn", string.Format("{0}/{1}", track.TrackNumber, track.TotalNumberOfTracks)); } else if (track.TrackNumber > 0 && track.TotalNumberOfTracks <= 0) { AddSwitch(builder, "--tn", track.TrackNumber.ToString("N")); } }
public void TestIllegalCharactersInFileName() { var output = new OutputLocationBuilder(@"c:\test", @"tr*??// ack.mp3"); var track = new TrackIdentification(); var filename = output.PrepareOutput(track); Assert.That(filename.FileName, Is.EqualTo(@"c:\test\tr//ack.mp3")); }
private void AssertTrack(TrackIdentification actualTrack, TrackIdentification expectedTrack) { Assert.That(actualTrack.Genre, Is.Null, "Genre is not yet implemented"); Assert.That(actualTrack.Title, Is.EqualTo(expectedTrack.Title), "Title"); Assert.That(actualTrack.Artist, Is.EqualTo(expectedTrack.Artist), "Artist"); Assert.That(actualTrack.TrackNumber, Is.EqualTo(expectedTrack.TrackNumber), "TrackNumber"); Assert.That(actualTrack.AlbumArtist, Is.EqualTo(expectedTrack.AlbumArtist), "AlbumArtist on track"); Assert.That(actualTrack.AlbumTitle, Is.EqualTo(expectedTrack.AlbumTitle), "AlbumTitle on track"); Assert.That(actualTrack.Year, Is.EqualTo(expectedTrack.Year), "Year on track"); Assert.That(actualTrack.TotalNumberOfTracks, Is.EqualTo(expectedTrack.TotalNumberOfTracks), "TotalNumberOfTracks on track"); }
private string CreateCoverFile(DirectoryInfo directory, TrackIdentification track) { if (track.AlbumArt == null) { return(null); } var coverFile = Path.Combine(directory.ToString(), "cover.jpg"); if (File.Exists(coverFile)) { return(coverFile); } using (var client = new WebClient()) { client.DownloadFile(track.AlbumArt, coverFile); } return(coverFile); }
public void TestTrackCreatingFakeDLL(string arg, int times) { var data = new List <string>(); for (int i = 0; i < times; i++) { data.Add(arg); } var transData = new RawTransponderDataEventArgs(data); var trackidentifier = new TrackIdentification(_receiver); try { _receiver.TransponderDataReady += Raise.EventWith(new object(), transData); } catch (Exception e) { Console.WriteLine(e); } Assert.AreEqual(times, trackidentifier.Tracks.Count); }
public LameArgumentBuilder(EncoderSettings settings) { _track = settings.Track ?? AlbumIdentification.GetEmpty(1).Tracks.First(); _mp3Settings = settings.Mp3Settings ?? Mp3Settings.Default; _trackLocation = settings.Output.PrepareOutput(_track) ?? OutputLocationBuilder.Default.PrepareOutput(_track); }