Ejemplo n.º 1
0
int CDIF_FindTrackByLBA(uint32 LBA)
{
 for(track_t track = CD_Info.FirstTrack; track < CD_Info.FirstTrack + CD_Info.NumTracks; track++)
 {
  if(LBA >= CD_Info.Tracks[track].LSN && LBA < (CD_Info.Tracks[track].LSN + cdrfile_get_track_sec_count(p_cdrfile, track)))
  {
   return(track);
  }
 }
 return(0);
}
Ejemplo n.º 2
0
uint32 CDIF_GetTrackStartPositionLBA(int32 track)
{
 if(track == (CD_Info.FirstTrack + CD_Info.NumTracks)) // Leadout track.
 {
  uint32 lba = CD_Info.Tracks[track - 1].LSN + cdrfile_get_track_sec_count(p_cdrfile, track - 1);
  //printf("GTSPLBA Leadout: %d\n", lba);
  return(lba);
 }
 else if(track < CD_Info.FirstTrack || track >= (CD_Info.FirstTrack + CD_Info.NumTracks))
  return(0);
 return(CD_Info.Tracks[track].LSN);
}
Ejemplo n.º 3
0
bool CDIF_GetTrackStartPositionMSF(int32 track, int &min, int &sec, int &frame)
{
 uint32          lba;

 if(track == (CD_Info.FirstTrack + CD_Info.NumTracks)) // Leadout track.
 {
  lba = CD_Info.Tracks[track - 1].LSN + cdrfile_get_track_sec_count(p_cdrfile, track - 1);
  //printf("GTSPMSF Leadout: %d\n", lba);
 }
 else if(track < CD_Info.FirstTrack || track >= (CD_Info.FirstTrack + CD_Info.NumTracks))
  return(0);
 else
  lba   = CD_Info.Tracks[track].LSN;

 lba += 150;
 min   = (uint8)(lba / 75 / 60);
 sec   = (uint8)((lba - min * 75 * 60) / 75);
 frame = (uint8)(lba - (min * 75 * 60) - (sec * 75));

 return(1);
}
Ejemplo n.º 4
0
uint32 CDIF_GetTrackSectorCount(int32 track)
{
 return(cdrfile_get_track_sec_count(p_cdrfile, track));
}
Ejemplo n.º 5
0
static void DumpCUEISOWAV(void)
{
 FILE *cuep = fopen("cd.cue", "wb");

 for(int track = CDIF_GetFirstTrack(); track <= CDIF_GetLastTrack(); track++)
 {
  CDIF_Track_Format format;
  uint32 sectors;

  sectors = cdrfile_get_track_sec_count(p_cdrfile, track);
  CDIF_GetTrackFormat(track, format);

  if(format == CDIF_FORMAT_AUDIO)
  {
   char buf[256];
   sprintf(buf, "%d.wav", track);

   static SNDFILE *sfp;
   SF_INFO slinfo;
   memset(&slinfo, 0, sizeof(SF_INFO));

   fprintf(cuep, "FILE \"%s\" WAVE\n", buf);
   fprintf(cuep, " TRACK %02d AUDIO\n", track);
   fprintf(cuep, "  INDEX 01 00:00:00\n");

   slinfo.samplerate = 44100;
   slinfo.channels = 2;
   slinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;

   sfp = sf_open(buf, SFM_WRITE, &slinfo);
   for(uint32 i = 0; i < sectors; i++)
   {
    uint8 secbuf[2352];

    CDIF_ReadAudioSector((int16*)secbuf, NULL, CDIF_GetTrackStartPositionLBA(track) + i);

    sf_writef_short(sfp, (int16*)secbuf, 2352 / 4);
   }
   sf_close(sfp);
  }
  else
  {
   char buf[256];
   sprintf(buf, "%d.iso", track);
   FILE *fp = fopen(buf, "wb");

   fprintf(cuep, "FILE \"%s\" BINARY\n", buf);
   fprintf(cuep, " TRACK %02d MODE1/2048\n", track);
   fprintf(cuep, "  INDEX 01 00:00:00\n");


   for(uint32 i = 0; i < sectors; i++)
   {
    uint8 secbuf[2048];
    CDIF_ReadSector(secbuf, NULL, CDIF_GetTrackStartPositionLBA(track) + i, 1);
    fwrite(secbuf, 1, 2048, fp);
   }
   fclose(fp);
  }
 }
 fclose(cuep);
}