diff options
Diffstat (limited to 'engines/sci/resource.cpp')
| -rw-r--r-- | engines/sci/resource.cpp | 16 | 
1 files changed, 15 insertions, 1 deletions
| diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 896947dc35..bdc8b3b52d 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -1858,6 +1858,12 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi  			sampleChannel->data = data;  			sampleChannel->size = channel->size - (data - channel->data);  			channel->size = data - channel->data; +			// Read sample header information +			//Offset 14 in the header contains the frequency as a short integer. Offset 32 contains the sample length, also as a short integer. +			_tracks->digitalSampleRate = READ_LE_UINT16(sampleChannel->data + 14); +			_tracks->digitalSampleSize = READ_LE_UINT16(sampleChannel->data + 32); +			sampleChannel->data += 44; // Skip over header +			sampleChannel->size -= 44;  		}  		break; @@ -1891,6 +1897,8 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi  			_tracks[trackNr].channels = new Channel[_tracks[trackNr].channelCount];  			if (_tracks[trackNr].type != 0xF0) { // Digital track marker - not supported currently  				_tracks[trackNr].digitalChannelNr = -1; // No digital sound associated +				_tracks[trackNr].digitalSampleRate = 0; +				_tracks[trackNr].digitalSampleSize = 0;  				for (channelNr = 0; channelNr < _tracks[trackNr].channelCount; channelNr++) {  					channel = &_tracks[trackNr].channels[channelNr];  					channel->unk = READ_LE_UINT16(data); @@ -1899,8 +1907,14 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi  					channel->number = *(channel->data - 2);  					channel->poly = *(channel->data - 1);  					channel->time = channel->prev = 0; -					if (channel->number == 0xFE) // Digital channel +					if (channel->number == 0xFE) { // Digital channel  						_tracks[trackNr].digitalChannelNr = channelNr; +						_tracks[trackNr].digitalSampleRate = READ_LE_UINT16(channel->data); +						_tracks[trackNr].digitalSampleSize = READ_LE_UINT16(channel->data + 2); +						assert(READ_LE_UINT16(channel->data + 4) == 0); // Possibly a compression flag +						channel->data += 8; // Skip over header +						channel->size -= 8; +					}  					data += 6;  				}  			} else { | 
