public void GenerateDummyData() { using (var nativeDrive = CdDrive.Create("f")) { var toc = nativeDrive.ReadTableOfContents().Result; foreach (var track in toc.Tracks) { Console.WriteLine("new Track({0}, {1}, {2}),", track.TrackNumber, track.Offset, track.Sectors); } Console.WriteLine("MusicBrainzDiscId= " + MusicBrainzDiscIdCalculator.CalculateDiscId(toc)); } }
public async void IdentifyAlbum(DriveInfo drive, bool autoStart) { using (var cdDrive = CdDrive.Create(drive)) { var albums = _tagSource.GetTags(await cdDrive.ReadTableOfContents()).ToList(); _tracker.AlbumsIdentified(albums); if (autoStart && albums.Count == 1) { SelectAlbum(albums.Single().Id); } } }
private async Task RipAlbum(DriveInfo drive, AlbumIdentification album, CancellationToken token) { using (var cdDrive = CdDrive.Create(drive)) { var toc = await cdDrive.ReadTableOfContents(); foreach (var track in toc.Tracks) { if (token.IsCancellationRequested) { break; } var trackid = album.Tracks.Single(t => t.TrackNumber == track.TrackNumber); await RipTrack(cdDrive, track, trackid, token); } await cdDrive.Eject(); } }
public void TestDummyData() { var dummyToc = DummyData.MuchAgainstEveryonesAdvice.TableOfContents; using (var drive = CdDrive.Create("f")) { var realToc = drive.ReadTableOfContents().Result; for (var i = 0; i < realToc.Tracks.Count; i++) { var realTrack = realToc.Tracks[i]; var dummyTrack = dummyToc.Tracks[i]; Assert.That(realTrack.TrackNumber, Is.EqualTo(dummyTrack.TrackNumber), "Tracknumber"); Assert.That(realTrack.Offset, Is.EqualTo(dummyTrack.Offset), "Offset of track " + realTrack.TrackNumber); Assert.That(realTrack.Sectors, Is.EqualTo(dummyTrack.Sectors), "Sectors of track " + realTrack.TrackNumber); Assert.That(realTrack.Length, Is.EqualTo(dummyTrack.Length), "Length of track " + realTrack.TrackNumber); } } }
static async Task RipWithMusicBrainz(string driveletter) { using (var drive = CdDrive.Create(driveletter)) { var toc = await drive.ReadTableOfContents(); if (toc == null) { Console.WriteLine("No CD in drive!"); return; } var discId = TagSource.GetTags(toc).ToList(); if (discId.Count == 0) { Console.WriteLine("No matching cd found in MusicBrainz"); return; } var discNumber = 0; if (discId.Count > 1) { Console.WriteLine("Multiple matching CD's found in MusicBrainz"); for (int i = 0; i < discId.Count; i++) { Console.WriteLine("{0}: {1} - {2} (Coverart: {3})", i + 1, discId[i].AlbumArtist, discId[i].AlbumTitle, discId[i].AlbumArt == null ? "no" : "yes"); } Console.WriteLine("Enter the number of the correct cd"); discNumber = Convert.ToInt32(Console.ReadLine()) - 1; } foreach (var track in toc.Tracks) { Console.WriteLine("track {0}: {1} (lenth={2}-{3})", track.TrackNumber, discId[discNumber].Tracks.First(s => s.TrackNumber == track.TrackNumber).Title, track.Offset, track.Offset + track.Sectors); } Console.WriteLine("Enter tracknumber to rip"); var trackNumber = Convert.ToInt32(Console.ReadLine()); using (var trackReader = new TrackReader(drive)) { using (var encoder = new LameMp3Encoder(new EncoderSettings { Output = new OutputLocationBuilder( Environment.GetFolderPath(Environment.SpecialFolder.Desktop), @"encoding\{albumartist}\{albumtitle}\{tracknumber}-{title}.mp3"), Mp3Settings = new Mp3Settings(), Track = discId[discNumber].Tracks.First(s => s.TrackNumber == trackNumber) })) { var cts = new CancellationTokenSource(); trackReader.Progress += (i, a) => Console.WriteLine("{0} of {1} read", i, a); var track = toc.Tracks.First(t => t.TrackNumber == trackNumber); await trackReader.ReadTrack(track, b => encoder.Write(b), cts.Token); } } await drive.Eject(); } }