Tracks[0].MSF.S = 2; // seconds
Tracks[0].MSF.F = 0; // frames
- elprintf(EL_STATUS, "Track 0: %02d:%02d:%02d %9i DATA",
+ elprintf(EL_STATUS, "Track 1: %02d:%02d:%02d %9i DATA",
Tracks[0].MSF.M, Tracks[0].MSF.S, Tracks[0].MSF.F, Tracks[0].Length);
Cur_LBA = Tracks[0].Length = cd_img_sectors;
if (cue_data->tracks[2].fname == NULL) { // NULL means track2 is in same file as track1
Cur_LBA = Tracks[0].Length = cue_data->tracks[2].sector_offset;
}
+ i = 100 / cue_data->track_count+1;
for (num_track = 2; num_track <= cue_data->track_count; num_track++)
{
+ if (PicoCDLoadProgressCB != NULL) PicoCDLoadProgressCB(i * num_track);
index = num_track - 1;
Cur_LBA += cue_data->tracks[num_track].pregap;
if (cue_data->tracks[num_track].type == CT_MP3) {
Tracks[index].ftype = cue_data->tracks[num_track].type;
if (cue_data->tracks[num_track].fname != NULL)
{
- Tracks[index].F = fopen(cue_data->tracks[num_track].fname, "rb");
- elprintf(EL_STATUS, "track %2i (%s): can't determine length",
- cue_data->tracks[num_track].fname);
- Tracks[index].Length = 2*75;
- Tracks[index].Offset = 0;
- } else {
+ pm_file *pmfn = pm_open(cue_data->tracks[num_track].fname);
+ if (pmfn != NULL)
+ {
+ // addume raw, ignore header for wav..
+ Tracks[index].F = pmfn;
+ Tracks[index].Length = pmfn->size / 2352;
+ Tracks[index].Offset = cue_data->tracks[num_track].sector_offset;
+ }
+ else
+ {
+ elprintf(EL_STATUS, "track %2i (%s): can't determine length",
+ num_track, cue_data->tracks[num_track].fname);
+ Tracks[index].Length = 2*75;
+ Tracks[index].Offset = 0;
+ }
+ }
+ else
+ {
if (num_track < cue_data->track_count)
Tracks[index].Length = cue_data->tracks[num_track+1].sector_offset -
cue_data->tracks[num_track].sector_offset;
}
}
+ if (cue_data->tracks[num_track].sector_xlength != 0)
+ // overriden by custom cue command
+ Tracks[index].Length = cue_data->tracks[num_track].sector_xlength;
+
LBA_to_MSF(Cur_LBA, &Tracks[index].MSF);
Cur_LBA += Tracks[index].Length;
- elprintf(EL_STATUS, "Track %2i: %02d:%02d:%02d %9i AUDIO - %s", index, Tracks[index].MSF.M,
+ elprintf(EL_STATUS, "Track %2i: %02d:%02d:%02d %9i AUDIO - %s", num_track, Tracks[index].MSF.M,
Tracks[index].MSF.S, Tracks[index].MSF.F, Tracks[index].Length,
cue_data->tracks[num_track].fname);
}
goto finish;
}
- /* track autosearch, Gens-like */
+ /* mp3 track autosearch, Gens-like */
iso_name_len = strlen(cd_img_name);
if (iso_name_len >= sizeof(tmp_name))
iso_name_len = sizeof(tmp_name) - 1;
LBA_to_MSF(Cur_LBA, &Tracks[index].MSF);
Cur_LBA += Tracks[index].Length;
- elprintf(EL_STATUS, "Track %2i: %02d:%02d:%02d %9i AUDIO - %s", index, Tracks[index].MSF.M,
+ elprintf(EL_STATUS, "Track %2i: %02d:%02d:%02d %9i AUDIO - %s", num_track, Tracks[index].MSF.M,
Tracks[index].MSF.S, Tracks[index].MSF.F, Tracks[index].Length, tmp_name);
num_track++;
break;
}
}
- if (ret != 0) missed++;
+ if (ret != 0 && i > 1) missed++;
}
finish:
{
if (Pico_mcd->TOC.Tracks[i].F != NULL)
{
+ if (Pico_mcd->TOC.Tracks[i].ftype == TYPE_MP3)
#if DONT_OPEN_MANY_FILES
- if (Pico_mcd->TOC.Tracks[i].type == TYPE_MP3)
free(Pico_mcd->TOC.Tracks[i].F);
- else
-#endif
+#else
fclose(Pico_mcd->TOC.Tracks[i].F);
+#endif
+ else
+ pm_close(Pico_mcd->TOC.Tracks[i].F);
}
}
memset(Pico_mcd->TOC.Tracks, 0, sizeof(Pico_mcd->TOC.Tracks));
PICO_INTERNAL int FILE_Read_One_LBA_CDC(void)
{
-// static char cp_buf[2560];
-
if (Pico_mcd->s68k_regs[0x36] & 1) // DATA
{
if (Pico_mcd->TOC.Tracks[0].F == NULL) return -1;
}
else // AUDIO
{
- // int rate, channel;
-
- // if (Pico_mcd->TOC.Tracks[Pico_mcd->scd.Cur_Track - 1].ftype == TYPE_MP3)
- {
- // TODO
- // MP3_Update(cp_buf, &rate, &channel, 0);
- // Write_CD_Audio((short *) cp_buf, rate, channel, 588);
- }
-
cdprintf("Read file CDC 1 audio sector :\n");
}
{
// CAUTION : lookahead bit not implemented
- //memcpy(&Pico_mcd->cdc.Buffer[Pico_mcd->cdc.PT.N], cp_buf, 2352);
+ // this is pretty rough, but oh well - not much depends on this anyway
+ memcpy(&Pico_mcd->cdc.Buffer[Pico_mcd->cdc.PT.N], cdda_out_buffer, 2352);
}
}
}
return 0;
}
-
-PICO_INTERNAL int FILE_Play_CD_LBA(void)
-{
- int index = Pico_mcd->scd.Cur_Track - 1;
- Pico_mcd->m.audio_track = index;
-
- cdprintf("Play track #%i", Pico_mcd->scd.Cur_Track);
-
- if (Pico_mcd->TOC.Tracks[index].F == NULL)
- {
- return 1;
- }
-
- if (Pico_mcd->TOC.Tracks[index].ftype == TYPE_MP3)
- {
- int pos1024 = 0;
- int Track_LBA_Pos = Pico_mcd->scd.Cur_LBA - Track_to_LBA(Pico_mcd->scd.Cur_Track);
- if (Track_LBA_Pos < 0) Track_LBA_Pos = 0;
- if (Track_LBA_Pos)
- pos1024 = Track_LBA_Pos * 1024 / Pico_mcd->TOC.Tracks[index].Length;
-
- mp3_start_play(Pico_mcd->TOC.Tracks[index].F, pos1024);
- }
- else
- {
- return 3;
- }
-
- return 0;
-}
-