public static List <CdInfo> GetCdInfo(string key) { if (!dict.ContainsKey(key)) { dict[key] = CdDrive.GetCdInfo(key); } return(dict[key]); }
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 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; } }
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(); } }
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(); }
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(); } }