コード例 #1
0
ファイル: MainForm.cs プロジェクト: svetakorn/DtWPF
 public static List <CdInfo> GetCdInfo(string key)
 {
     if (!dict.ContainsKey(key))
     {
         dict[key] = CdDrive.GetCdInfo(key);
     }
     return(dict[key]);
 }
コード例 #2
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));
     }
 }
コード例 #3
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);
                }
            }
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: svetakorn/DtWPF
 private void MainWindow_Load(object sender, System.EventArgs e)
 {
     cda = new CdDrive();
     char[] Drives = CdDrive.GetCdDrives();
     foreach (char drive in Drives)
     {
         comboBoxDrives.Items.Add(drive.ToString());
     }
     if (comboBoxDrives.Items.Count > 0)
     {
         comboBoxDrives.SelectedIndex = 0;
     }
 }
コード例 #5
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();
            }
        }
コード例 #6
0
ファイル: MainForm.cs プロジェクト: svetakorn/DtWPF
 private void buttonSaveAs_Click(object sender, System.EventArgs e)
 {
     if (listViewTracks.SelectedIndices.Count > 0)
     {
         int    ndx   = listViewTracks.SelectedIndices[0];
         string title = string.Format("track{0:00}", ndx + 1);
         saveFileDialog.FileName = string.Format("{0}.wav", title);
         if (saveFileDialog.ShowDialog() == DialogResult.OK)
         {
             ripping = true;
             try
             {
                 statusBar.Text = string.Format("Reading track {0}", ndx + 1);
                 UpdateVisualControls();
                 IntPtr     format = CdDrive.GetFormat();
                 WaveWriter ww     = new WaveWriter(File.Create(saveFileDialog.FileName),
                                                    AudioCompressionManager.FormatBytes(format));
                 CdReader cr           = cda.GetReader(ndx);
                 int      durationInMS = cr.GetDurationInMS();
                 int      max          = durationInMS / 1000;
                 progressBar1.Minimum = 0;
                 progressBar1.Value   = 0;
                 progressBar1.Maximum = max + 1;
                 for (int i = 0; i <= max; i++)
                 {
                     byte[] data = cr.ReadData(i, 1);
                     ww.WriteData(data);
                     progressBar1.Value = i + 1;
                     Application.DoEvents();
                 }
                 cr.Close();
                 ww.Close();
                 DsConvert.ToWma(saveFileDialog.FileName, saveFileDialog.FileName + ".wma",
                                 DsConvert.WmaProfile.Stereo128);
             }
             finally
             {
                 ripping = false;
             }
         }
     }
     UpdateVisualControls();
 }
コード例 #7
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);
                }
            }
        }
コード例 #8
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();
            }
        }