Example #1
0
 private static void CdReadProgress(object sender, ReadProgressEventArgs ea)
 {
   ulong Percent = ((ulong)ea.BytesRead * 100) / ea.Bytes2Read;
   if (!mp3Background)
   {
     dlgProgress.SetPercentage((int)Percent);
     if (dlgProgress.IsCanceled)
     {
       m_CancelRipping = true;
     }
   }
   ea.CancelRead |= m_CancelRipping;
 }
Example #2
0
 /// <summary>
 /// Read the digital data of the track
 /// </summary>
 /// <param name="track">Track to read</param>
 /// <param name="OnDataRead">Call each time data is read</param>
 /// <param name="StartSecond">First second of the track to read, 0 means to start at beginning of the track</param>
 /// <param name="Seconds2Read">Number of seconds to read, 0 means to read until the end of the track</param>
 /// <param name="OnProgress">Delegate to indicate the reading progress</param>
 /// <returns>Negative value means an error. On success returns the number of bytes read</returns>
 public int ReadTrack(int track, CdDataReadEventHandler DataReadEvent, uint StartSecond, uint Seconds2Read,
                      CdReadProgressEventHandler ProgressEvent)
 {
   if (TocValid && (track >= Toc.FirstTrack) && (track <= Toc.LastTrack) && (DataReadEvent != null))
   {
     int StartSect = GetStartSector(track);
     int EndSect = GetEndSector(track);
     if ((StartSect += (int)StartSecond * 75) >= EndSect)
     {
       StartSect -= (int)StartSecond * 75;
     }
     if ((Seconds2Read > 0) && ((int)(StartSect + Seconds2Read * 75) < EndSect))
     {
       EndSect = StartSect + (int)Seconds2Read * 75;
     }
     uint Bytes2Read = (uint)(EndSect - StartSect) * CB_AUDIO;
     uint BytesRead = 0;
     byte[] Data = new byte[CB_AUDIO * NSECTORS];
     bool Cont = true;
     bool ReadOk = true;
     if (ProgressEvent != null)
     {
       ReadProgressEventArgs rpa = new ReadProgressEventArgs(Bytes2Read, 0);
       ProgressEvent(this, rpa);
       Cont = !rpa.CancelRead;
     }
     for (int sector = StartSect; (sector < EndSect) && (Cont) && (ReadOk); sector += NSECTORS)
     {
       int Sectors2Read = ((sector + NSECTORS) < EndSect) ? NSECTORS : (EndSect - sector);
       ReadOk = ReadSector(sector, Data, Sectors2Read);
       if (ReadOk)
       {
         DataReadEventArgs dra = new DataReadEventArgs(Data, (uint)(CB_AUDIO * Sectors2Read));
         DataReadEvent(this, dra);
         BytesRead += (uint)(CB_AUDIO * Sectors2Read);
         if (ProgressEvent != null)
         {
           ReadProgressEventArgs rpa = new ReadProgressEventArgs(Bytes2Read, BytesRead);
           ProgressEvent(this, rpa);
           Cont = !rpa.CancelRead;
         }
       }
     }
     if (ReadOk)
     {
       return (int)BytesRead;
     }
     else
     {
       return -1;
     }
   }
   else
   {
     return -1;
   }
 }