Ticket #7950: monkeymp3patch.diff

File monkeymp3patch.diff, 1.6 KB (added by SF/urkle, 18 years ago)

PlayMP3CDTrack patch

  • sound.cpp

    RCS file: /cvsroot/scummvm/scummvm/sound.cpp,v
    retrieving revision 1.51
    diff -u -r1.51 sound.cpp
     
    2424#include "scumm.h"
    2525#include "sound/mididrv.h"
    2626#include "sound/imuse.h"
     27#include "sys/stat.h"
    2728
    2829#ifdef _WIN32_WCE
    2930extern void *bsearch(const void *, const void *, size_t,
     
    106107        ptr = getResourceAddress(rtSound, sound);
    107108        if (ptr != NULL && READ_UINT32_UNALIGNED(ptr) == MKID('SOUN')) {
    108109                ptr += 8;
     110#ifdef COMPRESSED_SOUND_FILE
     111                playMP3CDTrack(ptr[16], ptr[17] == 0xff ? -1 : ptr[17],
     112                                                (ptr[18] * 60 + ptr[19]) * 75 + ptr[20], 0);
     113#else
    109114                _system->play_cdrom(ptr[16], ptr[17] == 0xff ? -1 : ptr[17],
    110115                                                (ptr[18] * 60 + ptr[19]) * 75 + ptr[20], 0);
     116#endif
    111117                current_cd_sound = sound;
    112118                return;
    113119        }
     
    691697        float frame_size;
    692698        mad_timer_t duration;
    693699
    694         if (!start && !delay) {
     700        if (!num_loops && !start) {
    695701                _mixer->stop(_mp3_handle);
    696702                return;
    697703        }
     
    705711        offset = (long)((float)start / (float)75 * 1000 /
    706712                                (float)((float)1152 / (float)_mad_header[index].samplerate *
    707713                                                                                  1000) * (float)(frame_size + 0.5));
    708714        // Calc delay
    709         mad_timer_set(&duration, 0, delay, 75);
     715        if (!delay) {
     716                struct stat file_stat;
     717                fstat(fileno(_mp3_tracks[index]),&file_stat);           
     718                mad_timer_set(&duration, 0,file_stat.st_size, (_mad_header[index].bitrate/8));
     719        } else {
     720                mad_timer_set(&duration, 0, delay, 75);
     721        }       
    710722        // Go
    711723        fseek(_mp3_tracks[index], offset, SEEK_SET);
    712724