@@ -27,21 +27,21 @@
#include < fstream>
#include < iostream>
#include < limits>
#include < limits.h> // GCC 2.95
#include < sstream>
#include < vector>
#include < sys/stat.h>
#include " cdrom.h"
#include " drives.h"
#include " support.h"
#include " setup.h"
#if !defined(WIN32)
#include < libgen.h>
#else
#include < string.h>
#endif
#include " cdrom.h"
#include " drives.h"
#include " support.h"
#include " setup.h"
using namespace std ;
#define MAX_LINE_LENGTH 512
@@ -208,7 +208,6 @@ int CDROM_Interface_Image::refCount = 0;
CDROM_Interface_Image* CDROM_Interface_Image::images[26 ] = {};
CDROM_Interface_Image::imagePlayer CDROM_Interface_Image::player = {
{0 }, // buffer[]
{{0 }, {0 }}, // TCtrl struct
nullptr , // TrackFile*
nullptr , // MixerChannel*
nullptr , // CDROM_Interface_Image*
@@ -218,8 +217,7 @@ CDROM_Interface_Image::imagePlayer CDROM_Interface_Image::player = {
0 , // playedTrackFrames
0 , // totalTrackFrames
false , // isPlaying
false , // isPaused
false // ctrlUsed
false // isPaused
};
CDROM_Interface_Image::CDROM_Interface_Image (Bit8u subUnit)
@@ -432,7 +430,7 @@ bool CDROM_Interface_Image::PlayAudioSector(unsigned long start, unsigned long l
// We can't play audio from a data track (as it would result in garbage/static)
else if (track >= 0 && tracks[track].attr == 0x40 )
LOG (LOG_MISC,LOG_WARN)(" Game tries to play the data track. Not doing this" );
LOG (LOG_MISC,LOG_WARN)(" Game tried to play the data track. Not doing this" );
// Checks passed, setup the audio stream
else {
@@ -469,19 +467,15 @@ bool CDROM_Interface_Image::PlayAudioSector(unsigned long start, unsigned long l
player.playedTrackFrames = 0 ;
#ifdef DEBUG
LOG_MSG (" %s CDROM: Playing track %d at %d Hz "
" %d-channel at start sector %lu (%.1f minute-mark), seek %u ms from track start, "
" (skip=%d,dstart=%d,secsize=%d), for %u Redbook frames (%.1f seconds)" ,
LOG_MSG (" %s CDROM: Playing track %d ( %d Hz "
" %d-channel) at starting sector %lu (%.1f minute-mark) "
" for %u Redbook frames (%.1f seconds)" ,
get_time (),
track,
track_rate,
track_channels,
start,
static_cast <float >(start) / (REDBOOK_FRAMES_PER_SECOND * 60 ),
offset,
tracks[track].skip ,
tracks[track].start ,
tracks[track].sectorSize ,
player.totalRedbookFrames ,
static_cast <float >(player.totalRedbookFrames ) / REDBOOK_FRAMES_PER_SECOND);
#endif
@@ -529,19 +523,14 @@ bool CDROM_Interface_Image::StopAudio(void)
void CDROM_Interface_Image::ChannelControl (TCtrl ctrl)
{
player.ctrlUsed = (ctrl.out [0 ]!=0 || ctrl.out [1 ]!=1 || ctrl.vol [0 ]<0xfe || ctrl.vol [1 ]<0xfe );
player.ctrlData = ctrl;
// Apply the volume to our Mixer Channel
if (player.ctrlUsed && player.channel != NULL ) {
const float leftVolumePercent = static_cast <float >(player.ctrlData .vol [0 ] / 255.0 );
const float rightVolumePercent = static_cast <float >(player.ctrlData .vol [1 ] / 255.0 );
player.channel ->SetScale (leftVolumePercent, rightVolumePercent);
#ifdef DEBUG
LOG_MSG (" %s CDROM: Game set the left and right volume to %3.0f%% and %3.0f%%, respectively" ,
get_time (), leftVolumePercent * 100 , rightVolumePercent * 100 );
#endif
}
if (player.channel == NULL ) return ;
// Scale our mixer channel's volume as defined by the application
player.channel ->SetScale (static_cast <float >(ctrl.vol [0 ]/255.0 ),
static_cast <float >(ctrl.vol [1 ]/255.0 ));
// Map our mixer channel's as defined by the application
player.channel ->MapChannels (ctrl.out [0 ], ctrl.out [1 ]);
}
bool CDROM_Interface_Image::ReadSectors (PhysPt buffer, bool raw, unsigned long sector, unsigned long num)
@@ -597,6 +586,7 @@ bool CDROM_Interface_Image::ReadSector(Bit8u *buffer, bool raw, unsigned long se
if (tracks[track].sectorSize == RAW_SECTOR_SIZE && !tracks[track].mode2 && !raw) seek += 16 ;
if (tracks[track].mode2 && !raw) seek += 24 ;
#if 0 // Excessively verbose.. only enable if needed
#ifdef DEBUG
LOG_MSG("%s CDROM: ReadSector track=%d, desired raw=%s, sector=%ld, length=%d",
get_time(),
@@ -605,6 +595,8 @@ bool CDROM_Interface_Image::ReadSector(Bit8u *buffer, bool raw, unsigned long se
sector,
length);
#endif
#endif
return tracks[track].file ->read (buffer, seek, length);
}