|
|
@@ -962,10 +962,8 @@ static void doPlayAudio(uint32_t lba, uint32_t length)
|
|
|
lba = img.file.position() / 2352;
|
|
|
}
|
|
|
|
|
|
- // --- TODO --- determine proper track offset, software I tested with had a tendency
|
|
|
- // to ask for offsets that seem to hint at 2048 here, not the 2352 you'd assume.
|
|
|
- // Might be due to a mode page reporting something unexpected? Needs investigation.
|
|
|
- uint64_t offset = trackinfo.file_offset + 2048 * (lba - trackinfo.data_start);
|
|
|
+ uint64_t offset = trackinfo.file_offset
|
|
|
+ + trackinfo.sector_length * (lba - trackinfo.data_start);
|
|
|
dbgmsg("------ Play audio CD: ", (int)length, " sectors starting at ", (int)lba,
|
|
|
", track number ", trackinfo.track_number, ", data offset in file ", (int)offset);
|
|
|
|
|
|
@@ -981,7 +979,8 @@ static void doPlayAudio(uint32_t lba, uint32_t length)
|
|
|
|
|
|
// playback request appears to be sane, so perform it
|
|
|
// see earlier note for context on the block length below
|
|
|
- if (!audio_play(target_id, &(img.file), offset, offset + length * 2048, false))
|
|
|
+ if (!audio_play(target_id, &(img.file), offset,
|
|
|
+ offset + length * trackinfo.sector_length, false))
|
|
|
{
|
|
|
// Underlying data/media error? Fake a disk scratch, which should
|
|
|
// be a condition most CD-DA players are expecting
|