protected byte[] GetTrackData(CDDrive cd, Track track) { uint size = cd.TrackSize(track.Index); byte[] buff = new byte[size]; int x = cd.ReadTrack(track.Index, buff, ref size, null); if (buff == null || buff.Length < 1) throw new InvalidDataException("TXT_INVALID_TRACK_DATA"); return buff; }
private void OnDriveSelected(object sender, EventArgs e) { Wizard.CanMoveNext = false; lvTracks.Items.Clear(); DriveInfoItem item = cmbAudioCDDrives.SelectedItem as DriveInfoItem; if (item != null) { string rootPath = System.IO.Path.GetPathRoot(item.Path); if (!string.IsNullOrEmpty(rootPath)) { CDEntry cdEntry = null; char letter = rootPath.ToUpperInvariant()[0]; using (CDDrive cd = new CDDrive()) { if (cd.Open(letter) && cd.Refresh()) { // Check whether the disc is already added to our persistent storage string discId = cd.GetCDDBDiskID(); cdEntry = CDEntry.LoadPersistentDisc(discId); if (cdEntry == null) { switch (ProTONEConfig.AudioCdInfoSource) { case CddaInfoSource.CdText: cdEntry = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); break; case CddaInfoSource.Cddb: cdEntry = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); break; case CddaInfoSource.CdText_Cddb: { cdEntry = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); CDEntry cde = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); cdEntry = CDAFileInfo.Merge(cdEntry, cde); } break; case CddaInfoSource.Cddb_CdText: { cdEntry = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); CDEntry cde = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); cdEntry = CDAFileInfo.Merge(cdEntry, cde); } break; default: break; } if (cdEntry != null) { // Cache the disk to persistent storage for retrieving it faster later on cdEntry.PersistDisc(); } } } if (cdEntry != null) { for (int i = 1; i <= cdEntry.NumberOfTracks; i++) { double size = cd.TrackSize(i); int duration = cd.GetSeconds(i); ListViewItem lvItem = new ListViewItem(i.ToString()); lvItem.SubItems.Add(TimeSpan.FromSeconds(duration).ToString()); lvItem.SubItems.Add(((size / (1024 * 1024)).ToString("F")) + " MB"); OPMListViewSubItem subItem = new OPMListViewSubItem(tbEditAlbum, lvItem, cdEntry.Tracks[i - 1].Album ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(tbEditArtist, lvItem, cdEntry.Tracks[i - 1].Artist ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(tbEditTitle, lvItem, cdEntry.Tracks[i - 1].Title ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(cmbEditgenre, lvItem, cdEntry.Tracks[i - 1].Genre ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); if (Wizard.RepeatCount == 0) { lvItem.ImageIndex = 1; } else { //lvItem.ImageIndex = ((BkgTask as Task).Tracks.Contains(i)) ? 1 : 0; } lvItem.Tag = cdEntry.Tracks[i - 1]; lvTracks.Items.Add(lvItem); } } } } } CheckNextButton(); }