コード例 #1
0
 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));
     }
 }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
                }
            }
        }
コード例 #5
0
        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();
            }
        }