RCS file: /cvsroot/scummvm/scummvm/simon/sound.cpp,v
retrieving revision 1.73
diff -u -d -r1.73 sound.cpp
|
|
|
116 | 116 | free(_offsets); |
117 | 117 | delete _file; |
118 | 118 | } |
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 |
144 | 119 | |
145 | 120 | void WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) { |
146 | 121 | if (_offsets == NULL) |
147 | 122 | return; |
148 | 123 | |
149 | | WaveHeader wave_hdr; |
150 | | uint32 data[2]; |
151 | | |
152 | | flags |= SoundMixer::FLAG_AUTOFREE; |
153 | | |
154 | 124 | _file->seek(_offsets[sound], SEEK_SET); |
155 | 125 | |
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); |
177 | 130 | } |
178 | 131 | |
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); |
183 | 133 | } |
184 | 134 | |
185 | 135 | void VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) { |