Ticket #8394: simon-wave.patch

File simon-wave.patch, 2.2 KB (added by fingolfin, 19 years ago)
  • simon/sound.cpp

    RCS file: /cvsroot/scummvm/scummvm/simon/sound.cpp,v
    retrieving revision 1.73
    diff -u -d -r1.73 sound.cpp
     
    116116                free(_offsets);
    117117        delete _file;
    118118}
    119 
    120 #if !defined(__GNUC__)
    121 #pragma START_PACK_STRUCTS
    122 #endif
    123 
    124 struct WaveHeader {
    125         uint32 riff;
    126         uint32 unk;
    127         uint32 wave;
    128         uint32 fmt;
    129 
    130         uint32 size;
    131 
    132         uint16 format_tag;
    133         uint16 channels;
    134         uint32 samples_per_sec;
    135         uint32 avg_bytes;
    136 
    137         uint16 block_align;
    138         uint16 bits_per_sample;
    139 } GCC_PACK;
    140 
    141 #if !defined(__GNUC__)
    142 #pragma END_PACK_STRUCTS
    143 #endif
    144119       
    145120void WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {
    146121        if (_offsets == NULL)
    147122                return;
    148123
    149         WaveHeader wave_hdr;
    150         uint32 data[2];
    151 
    152         flags |= SoundMixer::FLAG_AUTOFREE;
    153 
    154124        _file->seek(_offsets[sound], SEEK_SET);
    155125
    156         // TODO: use loadWAVFromStream to load the WAVE data!
    157         /*
    158         int rate, size;
    159         bye flags;
    160         isValidWAV = loadWAVFromStream(*_file, size, rate, flags);
    161         */
    162 
    163         if (_file->read(&wave_hdr, sizeof(wave_hdr)) != sizeof(wave_hdr) ||
    164                         wave_hdr.riff != MKID('RIFF') || wave_hdr.wave != MKID('WAVE')
    165                         || wave_hdr.fmt != MKID('fmt ') || READ_LE_UINT16(&wave_hdr.format_tag) != 1
    166                         || READ_LE_UINT16(&wave_hdr.channels) != 1
    167                         || READ_LE_UINT16(&wave_hdr.bits_per_sample) != 8) {
    168                 error("playWav(%d): can't read RIFF header", sound);
    169         }
    170 
    171         _file->seek(FROM_LE_32(wave_hdr.size) - sizeof(wave_hdr) + 20, SEEK_CUR);
    172 
    173         data[0] = _file->readUint32LE();
    174         data[1] = _file->readUint32LE();
    175         if (data[0] != 'atad') {
    176                 error("playWav(%d): can't read data header", sound);
     126        // Try to load the WAVE data into an audio stream
     127        AudioStream *stream = makeWAVStream(*_file);
     128        if (!stream) {
     129                error("playWav(%d): can't read WAVE header", sound);
    177130        }
    178131
    179         byte *buffer = (byte *)malloc(data[1]);
    180         _file->read(buffer, data[1]);
    181 
    182         _mixer->playRaw(handle, buffer, data[1], FROM_LE_32(wave_hdr.samples_per_sec), flags);
     132        _mixer->playInputStream(SoundMixer::kSFXAudioDataType, handle, stream);
    183133}
    184134
    185135void VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {